Selenium and Java

Thursday, 23 July 2015

Java- Exceptions

Exception in Java:  An exception is a problem that arises during the execution of a program. Exceptions are caught by handlers positioned along the thread's method invocation stack.

Some of these exceptions are caused by user error, others by programmer error, and others by physical resources that have failed in some manner.
To understand how exception handling works in Java, you need to understand the three categories of exceptions


  • Checked exceptions: A checked exception is an exception that is typically a user error or a problem that cannot be foreseen by the programmer. For example, if a file is to be opened, but the file cannot be found, an exception occurs. These exceptions cannot simply be ignored at the time of compilation.
  • Runtime exceptions: A runtime exception is an exception that occurs that probably could have been avoided by the programmer. As opposed to checked exceptions, runtime exceptions are ignored at the time of compilation.
  • Errors: These are not exceptions at all, but problems that arise beyond the control of the user or the programmer. Errors are typically ignored in your code because you can rarely do anything about an error. For example, if a stack overflow occurs, an error will arise. They are also ignored at the time of compilation.



Checked vs Unchecked Exceptions in Java


In Java, there two types of exceptions:
1) Checked: are the exceptions that are checked at compile time. If some code within a method throws a checked exception, then the method must either handle the exception or it must specify the exception using throws keyword.
For example, consider the following Java program that opens file at locatiobn “C:\test\a.txt” and prints first three lines of it. The program doesn’t compile, because the function main() uses FileReader() and FileReader() throws a checked exception FileNotFoundException. It also uses readLine() and close() methods, and these methods also throw checked exception IOException


import java.io.*;
class Main {
  public static void main(String[] args) {
     FileReader file = new FileReader("C:\\test\\a.txt");
     BufferedReader fileInput = new BufferedReader(file);
     // Print first 3 lines of file "C:\test\a.txt"
     for (int counter = 0; counter < 3; counter++)
       System.out.println(fileInput.readLine());
    fileInput.close();
  }
}

To fix the above program, we either need to specify list of exceptions using throws, or we need to use try-catch block. We have used throws in the below program. Since FileNotFoundException is a subclass of IOException, we can just specify IOException in the throws list and make the above program compiler-error-free.

import java.io.*;
  class Main {
     public static void main(String[] args) throws IOException {
         FileReader file = new FileReader("C:\\test\\a.txt");
         BufferedReader fileInput = new BufferedReader(file);
         // Print first 3 lines of file "C:\test\a.txt"
        for (int counter = 0; counter < 3; counter++)
          System.out.println(fileInput.readLine());
        fileInput.close();
      }
   }

2) Unchecked (Runtime)  : are the exceptions that are not checked at compiled time. In C++, all exceptions are unchecked, so it is not forced by the compiler to either handle or specify the exception. It is up to the programmers to be civilized, and specify or catch the exceptions.
In Java exceptions under Error and RuntimeException classes are unchecked exceptions, everything else under throwable is checked. 
Consider the following Java program. It compiles fine, but it throws ArithmeticException when run. The compiler allows it to compile, because ArithmeticException is an unchecked exception.
class Main {
    public static void main(String args[]) {
      int x = 0;
      int y = 10;
     int z = y/x;
    }
}


Exception handling: Exception Handling is a mechanism to handle runtime errors such as ClassNotFound, IO, SQL, Remote etc.

No comments:

Post a Comment