现在怎么建设一个网站,wordpress第三性,云速建站可以建个人网站吗,合肥市建设网站每日一题-Java核心-谈谈你对异常的理解【面试八股文】 异常是程序在运行过程中出现的错误或不正常的情况。当程序执行过程中遇到无法处理的错误或者不符合预期的情况#xff0c;就会抛出异常。异常可以分为两种类型#xff1a;受检异常和非受检异常。 受检异常是指在程序编译… 每日一题-Java核心-谈谈你对异常的理解【面试八股文】 异常是程序在运行过程中出现的错误或不正常的情况。当程序执行过程中遇到无法处理的错误或者不符合预期的情况就会抛出异常。异常可以分为两种类型受检异常和非受检异常。 受检异常是指在程序编译过程中就能被检测到的异常需要在代码中进行明确的处理否则编译不通过。例如文件不存在、网络连接失败等情况都属于受检异常。 非受检异常是指在程序运行过程中出现的异常无法在编译时被检测到。这些异常通常是由程序逻辑错误导致的如空指针引用、数组越界等。非受检异常可以通过捕获和处理来避免程序的崩溃。 异常处理是为了在程序出现异常时能够进行相应的处理避免程序的异常终止。常用的异常处理方式包括捕获异常、抛出异常和处理异常。捕获异常通过try-catch语句块来实现可以在catch块中对异常进行处理如输出错误信息、记录日志等。抛出异常通过throw语句将异常传递给上层调用者来处理。处理异常可以通过finally块来执行一些无论是否发生异常都需要执行的代码。 异常处理的目的是保证程序的稳定性和可靠性。良好的异常处理可以提高程序的健壮性增强程序的容错性并能够更好地定位和解决问题。同时合理的异常处理也能提高程序的可读性和可维护性。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u1HQ9693-1691657117410)(E:\课程更新录制\08-面试专题\01-课件资料\img\Java异常.png)]
return和finally的顺序问题 分析如下的代码程序给出输出结果并给出原因
public class Demo02 {public static void main(String[] args) {Demo02 demo02 new Demo02();System.out.println(demo02.getName(bobo));}public String getName(String name){String res ;try {res name;return res;}finally {res 波波烤鸭;}}
}输出的结果是bobo 原因通过指令分析我们可以发现在 return 代码执行的时候会将局部变量保存在 栈帧的顶部然后在finally中修改的还是原来的栈帧位置的局部变量最终返回的信息还是栈帧顶部的变量所以finally代码块在return关键字之后会执行但是不会改变栈帧顶部的信息。
指令分析 首先我们要清楚在jvm中每个线程都具有自己的虚拟机栈。当执行方法时如上面的getName就会创建一个栈帧存储局部变量表操作数栈等信息进入虚拟机栈。每一个方法从调用到执行完毕就是一个栈帧从虚拟机栈中入栈到出栈的过程。对应的栈帧情况为 ldc将intfloat或者String类型常量从常量池推送至栈顶。 astore将栈顶引用型类型数据存入指定本地变量。 aload将制定的引用类型变量推送至栈顶 查看关键的指令为 还有一种情况需要注意如果finally和try块中都有return关键字会怎么样呢
public class Demo02 {public static void main(String[] args) {Demo02 demo02 new Demo02();System.out.println(demo02.getName(bobo));}public String getName(String name){String res ;try {res name;return res;}finally {res 波波烤鸭;return res; // 指令中返回的就不是栈帧顶部的数据了 而是 res 对应的栈帧位置}}
}通过指令我们可以看到在finally中的return关键字的指令返回的就是finally中的局部变量的信息可以理解为finally中的return会覆盖掉try块中的return逻辑。