Exception An exception is a problem that arises during the execution of a program. Exception is a response to an exceptional circumstance that arises while a program is running, such as an attempt to divide by zero. Exceptions provide a way to transfer control from one part of a program to another. Exception handling is built upon four keywords: try, catch, finally, and throw.
Event driving Programming by(VB) byDagne w . 2
Exception Exception is a notification that something interrupts the normal program execution. Exceptions provide a programming paradigm for detecting and reacting to unexpected events. When an exception arises, the state of the program is saved, the normal flow is interrupted and the control is passed to an exception handler (if such exists in the current context). Exceptions are raised or thrown by programming code that must send a signal to the executing program about an error or an unusual situation. For example, if we try to open a file, which doesn’t exist, the code responsible for opening the file will detect this and will throw an exception with a proper error message. Event driving Programming by(VB) byDagne w . 3 Exception An exception is unexpected error that occur when a program is running. ❖ Examples: trying to read from a file that does not exist, throws FileNotFoundException. Trying to read from a database table that does not exist, throws a SqlException. ❖ Showing actual unhandled exceptions to the end user is bad for two reasons Users will be annoyed as they are cryptic and does not make much sense to the end users. Exceptions contain information, that can be used for hacking into your application. Event driving Programming by(VB) byDagne w . 4 Exception Exceptions in .NET are two types – system and application. System exceptions are defined in .NET libraries and are used by the framework, while application exceptions are defined by application developers and are used by the application software. When we, as developers, design our own exception classes, it is a good practice to inherit from ApplicationException and not directly from SystemException (or even worse – directly from Exception). SystemException should only be inherited internally within the .NET Framework. Some of the worst system exceptions include ExecutionEngineException (which is thrown on internal error within CLR), StackOverflowException (call-stack overflow, most probably due to infinite recursion) and OutOfMemoryException (insufficient Event driving Programming by(VB) byDagne wmemory). . 5 Exception An exception is actually a class that derives from System.Exception class. The System.Exception class has several useful properties, that provide valuable information about exception. Message: Gets a message that describes the current exception Stack Trace: Provides the call stack to the line number in the method where the exception occurred. Source: gets or sets the name of the application or object that causes the error. ToString(): creates and return a string representation of the current exception
Event driving Programming by(VB) byDagne w . 6
Exception Exceptions are represented by classes. The exception classes in VB are mainly directly or indirectly derived from the System.Exception class. Some of the exception classes derived from the System.Exception class are the System.ApplicationException and System.SystemException classes. TheSystem.ApplicationException class supports exceptions generated by application programs. Hence the exceptions defined by the programmers should derive from this class. The System.SystemException class is the base class for all predefined system exception. The following table provides some of the predefined exception classes derived from the Sytem.SystemException class − Event driving Programming by(VB) byDagne w . 7 Exception
Event driving Programming by(VB) byDagne w . 8
Catching and Handling Exceptions We use try, catch and finallyblocks for exception handling: try: The code that can possibly cause an exception will be in the try block. Catch: Handles the exception. Finally: Clean and free resources that the class was holding onto during the program execution. Finallyblock is optional. Note: it is a good practice to always release resources in the finally block, because finally block is guaranteed to execute, irrespective of whether there is an exception or not. Specific exceptions will be caught before the base general exception, so specific exception blocks should always be on top of the base exception block. Otherwise, you will encounter a compiler error Event driving Programming by(VB) byDagne w . 9 Catching and Handling Exceptions try − A try block identifies a block of code for which particular exceptions is activated. It is followed by one or more catch blocks. catch − A program catches an exception with an exception handler at the place in a program where you want to handle the problem. The catch keyword indicates the catching of an exception. finally − The finally block is used to execute a given set of statements, whether an exception is thrown or not thrown. For example, if you open a file, it must be closed whether an exception is raised or not. throw − A program throws an exception when a problem shows up. This is done using a throw keyword. Event driving Programming by(VB) byDagne w . 10 Catching and Handling Exceptions Exception handling is a mechanism, which allows exceptions to be thrown and caught. This mechanism is provided internally by the CLR (Common Language Runtime). Parts of the exception handling infrastructure are the language constructs in C# for throwing and catching exceptions. CLR takes care to propagate each exception to the code that can handle it. To handle an exception, we must surround the code that could throw an exception with a try-catch block
Event driving Programming by(VB) byDagne w . 11
Exception Syntax Assuming a block raises an exception, a method catches an exception using a combination of the try and catch keywords. A try/catch block is placed around the code that might generate an exception. Code within a try/catch block is referred to as protected code, and the syntax for using try/catch looks like the following: Try ' Code that might cause an exception Catch ex As ExceptionType ' Code to handle the exception Finally ' Code that will always run, regardless of an exception End Try Event driving Programming by(VB) byDagne w . 12 DivideByZeroException
This exception is thrown when there is an attempt to divide by zero
Try ' Code that may cause an exception Dim result As Integer = 10 / 0 Catch ex As DivideByZeroException ' Handle specific exception Console.WriteLine("Cannot divide by zero!") Catch ex As Exception ' Handle any other exceptions Console.WriteLine("An error occurred: " & ex.Message) Finally ' Code that runs after the try or catch block, whether or not an exception was thrown Console.WriteLine("Execution completed.") End Try Event driving Programming by(VB) byDagne w . 13 OutOfMemoryException This exception is thrown when there is not enough memory to continue the execution of a program. Try Dim largeArray(1000000000) As Byte Catch ex As OutOfMemoryException Console.WriteLine("Error: " & ex.Message) End Try
Event driving Programming by(VB) byDagne w . 14
IndexOutOfRangeException This exception is thrown when an attempt is made to access an element of an array or collection with an index that is outside its bounds. Dim numbers() As Integer = {1, 2, 3} Try Dim number As Integer = numbers(5) Catch ex As IndexOutOfRangeException Console.WriteLine("Error: " & ex.Message) End Try
Event driving Programming by(VB) byDagne w . 15
FormatException This exception is thrown when the format of an argument does not meet the parameter specifications of the invoked method Try Dim num As Integer = Integer.Parse("NotANumber") Catch ex As FormatException Console.WriteLine("Error: " & ex.Message) End Try
Event driving Programming by(VB) byDagne w . 16
NullReferenceException
This exception is thrown when there is an attempt to
dereference a null object reference Try Dim obj As Object = Nothing Console.WriteLine(obj.ToString()) Catch ex As NullReferenceException Console.WriteLine("Error: " & ex.Message) End Try
Event driving Programming by(VB) byDagne w . 17
IOException
This exception is thrown when an I/O error occurs
Imports System.IO Try Dim reader As StreamReader = File.OpenText("nonexistentfile.txt") Catch ex As IOException Console.WriteLine("Error: " & ex.Message) End Try
Event driving Programming by(VB) byDagne w . 18
ArgumentOutOfRangeException This exception is thrown when an argument is outside the allowable range of values. Sub CheckAge(age As Integer) If age < 0 OrElse age > 120 Then Throw New ArgumentOutOfRangeException(NameOf(age), "Age must be between 0 and 120.") End If Console.WriteLine("Age is valid.") End Sub Try CheckAge(130) Catch ex As ArgumentOutOfRangeException Console.WriteLine("Error: " & ex.Message) End Try Event driving Programming by(VB) byDagne w . 19 Exercises Find out all exceptions in the System.IO.IOException hierarchy. Find out all standard exceptions that are part of the hierarchy holding the class System.IO.FileNotFoundException. Find out all standard exceptions from System.ApplicationException hierarchy. Explain the concept of exceptions and exception handling, when they are used and how to catch exceptions. Explain when the statement try-finally is used. Explain the relationship between the statements try-finally and using. Explain the advantages when using exceptions.