(1)一个人只要自己不放弃自己,整个世界也不会放弃你.
(2)天生我才必有大用
(3)不能忍受学习之苦就一定要忍受生活之苦,这是多么痛苦而深刻的领悟.
(4)做难事必有所得
(5)精神乃真正的刀锋
(6)战胜对手有两次,第一次在内心中.
(7)编写实属不易,若喜欢或者对你有帮助记得点赞+关注或者收藏哦~
Java SE 075 异常笔试面试常见问题深度剖析
文章目录
1.处理异常时可以有多个catch块
1.1定义自定义异常类1
package com.javareview.exception;
/**
* 自定义异常
* @author xiongjie
*/
public class MyException extends Exception{
public MyException(){
super();
}
public MyException(String message){
super(message);
}
}
1.2定义自定义异常类2
package com.javareview.exception;
/**
* 自定义异常2
* @author xiongjie
*/
public class MyException2 extends Exception{
public MyException2(){
super();
}
public MyException2(String message){
super(message);
}
}
1.3测试处理异常时可以有多个catch块
package com.javareview.exception.test;
import com.javareview.exception.MyException;
import com.javareview.exception.MyException2;
/**
* 测试处理异常时可以有多个catch块
*/
public class MyExceptionTest3 {
public void method(String str) throws MyException, MyException2{
if(null == str){
throw new MyException("字符串不能为空!");
}else if("hello".equals(str)){
throw new MyException2("字符串不能为hello!");
}else{
System.out.println(str);
}
}
/**
* 测试处理异常时可以有多个catch块
* @param args
*/
public static void main(String[] args){
MyExceptionTest3 test = new MyExceptionTest3();
try {
test.method("hello");
} catch (MyException e) {
e.printStackTrace();
}catch(MyException2 e){
e.printStackTrace();
}finally{
System.out.println("异常处理结束!");
}
System.out.println("程序处理结束");
}
}
2.要点记录
2.1解说
(1)虽然可以有多个catch块,但是异常类的排列顺序是按照子类与父类这种关系进行排列的。最底层的一定是一个子类型的。
(2)如果一旦多个catch块里面的异常类型存在继承关系的话,一定要将父类型的catch块放到后面,放在前面,后面的子类型就没法去执行了。因为根据java多态,任何类型的父类对象都可以赋给Exception 的e。
2.2小结
(1)我们可以使用多个catch块来捕获异常,这时需要将父类型的catch块放到子类型的catch块之后,这样才能保证后续的catch可能被执行,否则子类型的catch将永远无法到达。Java编译器会报编译错误。
(2)如果多个catch块的异常类型都是独立的,那么谁在前谁在后都是可以的。
3.try块中的语句注意事项
3.1try块中的return
如果try块中存在return语句,那么首先也需要将finally块中的代码执行完毕,然后方法再返回。
3.2try块中的System.exit(0)语句
如果try块中存在Stystem.exit(0),那么就将不会执行finally块中的代码,因为System.exit(0)会终止当前运行的java虚拟机,程序会在虚拟机终止前结束执行。
4.异常在项目开发中的另一种处理方式
首先将这个异常捕获,然后在catch块中throw new一个自己的异常类,然后在在方法的声明中throws一个自定义的异常。