Difference between try-finally and try-catch

前端 未结 11 546
栀梦
栀梦 2020-12-23 03:05

What\'s the difference between

try {
    fooBar();
} finally {
    barFoo();
}

and

try {
  fooBar();
} catch(Throwable thro         


        
相关标签:
11条回答
  • 2020-12-23 03:08

    In My reasearch Finally block is always executed and it is mainly "used for the any open connections to close" and to destroy something that is running unnecessarily.

    0 讨论(0)
  • 2020-12-23 03:09

    These are two different things:

    • The catch block is only executed if an exception is thrown in the try block.
    • The finally block is executed always after the try(-catch) block, if an exception is thrown or not.

    In your example you haven't shown the third possible construct:

    try {
        // try to execute this statements...
    }
    catch( SpecificException e ) {
        // if a specific exception was thrown, handle it here
    }
    // ... more catches for specific exceptions can come here
    catch( Exception e ) {
        // if a more general exception was thrown, handle it here
    }
    finally {
        // here you can clean things up afterwards
    }
    

    And, like @codeca says in his comment, there is no way to access the exception inside the finally block, because the finally block is executed even if there is no exception.

    Of course you could declare a variable that holds the exception outside of your block and assign a value inside the catch block. Afterwards you can access this variable inside your finally block.

    Throwable throwable = null;
    try {
        // do some stuff
    }
    catch( Throwable e ) {
        throwable = e;
    }
    finally {
        if( throwable != null ) {
            // handle it
        }
    }
    
    0 讨论(0)
  • 2020-12-23 03:09

    Try block will hold the statements which are going to raise exception. The catch block will hold the reference thrown from the try block and required messages are generated from catch block. Finally block is also used to close the used resources like io closing,file closing, dB closing.. In Java -9 enhanced try-with resource came up where the resources are declared outside the try..in enchanced try with resource the catch block is mandatory

    0 讨论(0)
  • 2020-12-23 03:12

    try is used to run a method that may throw an exception

    catch is used to "catch" stop that exception

    finally is used for any clean up needed from that exception being caught or not

    try{
        myObject.riskyMethod(); // run a method that may throw an exception
    }
    catch(Exception ex){
        myLogger.log(ex.Message); // "catch" stop that exception
    }
    finally{
        myObject = null; // clean up needed from that exception being caught
    }
    
    0 讨论(0)
  • 2020-12-23 03:13

    Generally when we use any resources like streams, connections etc.. we have to close them explicitly using finally block. In the program given below we are reading data from a file using FileReader and we are closing it using finally block.

    import java.io.File;
    import java.io.FileReader;
    import java.io.IOException;
    
    public class ReadData_Demo {
    
       public static void main(String args[]){
          FileReader fr=null;       
          try{
             File file=new File("file.txt");
             fr = new FileReader(file);  char [] a = new char[50];
             fr.read(a); // reads the content to the array
             for(char c : a)
             System.out.print(c); //prints the characters one by one
          }catch(IOException e){
              e.printStackTrace();
           }
           finally{ 
              try{
                  fr.close();
              }catch(IOException ex){       
                   ex.printStackTrace();
               }
           }
        }
    
    }
    

    Maybe other guys like me searched for something like this.

    Information from this page tutpoint

    0 讨论(0)
  • 2020-12-23 03:18

    Finally and catch blocks are quite different:

    Within the catch block you can respond to the thrown exception. This block is executed only if there is an unhandled exception and the type matches the one or is subclass of the one specified in the catch block's parameter. Finally will be always executed after try and catch blocks whether there is an exception raised or not.

    0 讨论(0)
提交回复
热议问题