Java基础异常中的finally关键字

简介: Java基础异常中的finally关键字

关于try…catch中的finally子句


1、在finally子句中的代码是最后执行的,并且是一定执行的,即使try语句块中的代码块出现了异常


finally子句必须和try一起出现,不能单独编写


2、finally语句通常使用在哪些情况下呢?


通常在finally语句块中完成资源的释放/关闭


因为finally中的代码比较有保障


即使try语句块中的代码出现异常,finally中代码也会正常执行


示例代码01:


public class ExceptionTest10 {
    public static void main(String[] args) {
        FileInputStream fis = null;//声明位置放到try外面。这样在finally中才能使用
        try {
            //创建输入流对象
            fis = new FileInputStream("D:\\Noepad++\\config.xml");
            //开始读文件。。。
            String s = null;
            //这里一定出现空指针异常
            s.toString();
            System.out.println("HelloWorld");
            //流使用完需要关闭,因为流是占用资源的
            //即使以上的程序出现异常,流也要关闭
            //放在这里有可能流关闭不了
            //file.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }catch(NullPointerException e){
            e.printStackTrace();
        }finally {
            System.out.println("Hello 浩克!");
            //流的关闭放在这里比较安全
            //finally中的代码是一定会执行的
            //即使try中出现了异常
            if(!(fis == null)){//避免空指针异常
                try {
                    //close()方法,采用捕捉的方式
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        System.out.println("HelloWorld!");
    }
}


运行结果:


0a2653c851af460fa595bd959398a8f1.png


3、放在finally语句块中的代码是一定会执行的【再次强调!!】


示例代码02:


public class ExceptionTest11 {
    public static void main(String[] args) {
        /*
        * try和finally,没有catch可以吗?可以
        *     try不能单独使用
        *     try finally可以联合使用
        * 以下代码的执行顺序:
        *     先执行try..
        *     在执行finally..
        *     最后执行 return(return语句只要执行方法必然结束)
        *
        * */
        try{
            System.out.println("try...");
           return;
        }finally{
            //finally中的语句会执行。能执行到
            System.out.println("finally..");
        }
        //这里不能写语句,因为这个代码是无法执行到的
        //System.out.println("HelloWorld!");
    }
}


运行结果:


2d65d23f6d4748949b924e4057485923.png


示例代码03:


public class ExceptionTest12 {
    public static void main(String[] args) {
        try{
            System.out.println("try..");
            // 退出JVM
            System.exit(0);// 退出JVM之后,finally语句中的代码就不执行了!
        }finally{
            System.out.println("finally..");
        }
    }
}


运行结果:


6de278e6d6694ce5bb08e7e842b7e74b.png


4、finally面试题


代码:


//finally面试题
public class ExceptionTest13 {
    public static void main(String[] args) {
        int reValue = m();
        System.out.println(reValue);//100
    }
    public static int m(){
        int i = 100;
        /*
    java语法规则(有一些规则是不能破坏的,一旦这么说了,就必须这么做!):
        java中有一条这样的规则:
            方法体中的代码必须遵循自上而下顺序依次逐行执行(亘古不变的语法!)
        java中海油一条语法规则:
            return语句一旦执行,整个方法必须结束(亘古不变的语法!)
     */
        try{
            // 这行代码出现在int i = 100;的下面,所以最终结果必须是返回100
            // return语句还必须保证是最后执行的。一旦执行,整个方法结束。
            return i;
        }finally{
            i++;
        }
    }
}
运行结果:
    100
相关文章
|
12天前
|
Java
在 Java 中捕获和处理自定义异常的代码示例
本文提供了一个 Java 代码示例,展示了如何捕获和处理自定义异常。通过创建自定义异常类并使用 try-catch 语句,可以更灵活地处理程序中的错误情况。
|
12天前
|
Java
在 Java 中,如何自定义`NumberFormatException`异常
在Java中,自定义`NumberFormatException`异常可以通过继承`IllegalArgumentException`类并重写其构造方法来实现。自定义异常类可以添加额外的错误信息或行为,以便更精确地处理特定的数字格式转换错误。
|
13天前
|
IDE 前端开发 Java
怎样避免 Java 中的 NoSuchFieldError 异常
在Java中避免NoSuchFieldError异常的关键在于确保类路径下没有不同版本的类文件冲突,避免反射时使用不存在的字段,以及确保所有依赖库版本兼容。编译和运行时使用的类版本应保持一致。
|
14天前
|
Java 编译器
如何避免在 Java 中出现 NoSuchElementException 异常
在Java中,`NoSuchElementException`通常发生在使用迭代器、枚举或流等遍历集合时,尝试访问不存在的元素。为了避免该异常,可以在访问前检查是否有下一个元素(如使用`hasNext()`方法),或者使用`Optional`类处理可能为空的情况。正确管理集合边界和条件判断是关键。
|
17天前
|
Java
Java异常捕捉处理和错误处理
Java异常捕捉处理和错误处理
14 1
|
19天前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
41 2
|
26天前
|
Java
如何在 Java 中处理“Broken Pipe”异常
在Java中处理“Broken Pipe”异常,通常发生在网络通信中,如Socket编程时。该异常表示写入操作的另一端已关闭连接。解决方法包括:检查网络连接、设置超时、使用try-catch捕获异常并进行重试或关闭资源。
|
18天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
67 4
|
2月前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
432 37
|
1月前
|
存储 安全 Java
java基础面试题
java基础面试题
32 2
下一篇
无影云桌面