①. 异常的概述和分类
- RuntimeException:在编译期是不检查的,出现问题后,需要我们回来修改代码
- 非RuntimeException:编译器就必须处理,否则程序不能通过编译,就更不能正常运行了
②. Jvm默认是如何处理异常的
public class JvmException {
public static void main(String[] args) {
DemoJvm d=new DemoJvm();
int x=d.div(1,0);
System.out.println(x);
}
}
class DemoJvm{
public int div(int a,int b){
return a/b;
}
}
③. try–catch的方式处理异常
- ①. try–catch的方式处理异常
try:用来检测异常的;catch:用来捕获异常的;finally:用来释放资源的 世界上最真情的相依就是你在try 我在catch,无论你发神马脾气,我都静静接受,默默处理
try.....catch.....finally
1.try.....catche
2.try.....catche.....finally
3.try.....finally
throws
-
- ②. 当通过trycatch将问题处理了,程序会继续执行
- ③. try后面如果跟多个catch,那么小的异常放前面,大的异常放后面,根据多肽的原理,如果大的放前面,就会将所有的子类对象接受,后面的catch就没有意义了
④. 编译期异常和运行期异常的区别
-
①. 所有的RuntimeException类及其子类的实例被称为运行时异常,其他的异常就是编译时异常 -
②. 编译时异常:Java程序必须显示处理,否则程序就会发生错误,无法通过编译 -
③. 运行时异常:无需显示处理,也可以和编译时异常一样处理
⑤. Throwable的集中常见方法
-
①. String getMessage():获取异常信息,返回字符串 -
②. String toString():获取异常类和异常信息,返回字符串 -
③. void printStackTrace():获取异常类名和异常信息,以及异常出现在程序中的位置,返回值为void (Jvm 默认这种方式)
try{
System.out.println(1/0);
}catch (Exception e){
System.out.println(e.getMessage());
System.out.println(e.toString());
System.out.println(e);
e.printStackTrace();
}
⑥. throws的方式处理异常
-
①. 编译时异常的抛出,必须对其进行处理 -
②. 运行时异常的抛出,可以处理也可以不处理
- ③. throw:在功能方法内部出现某种情况,程序不能继续运行,需要进行跳转时,就用throw把异常对象抛出
throws:
1. 用在方法声明后面,跟的是异常类名
2. 可以跟多个异常类名,用逗号隔开
3. 表示抛出异常,由该方法的调用者来处理
throw:
1. 用在方法体内,跟的是异常对象名
2. 只能抛出一个异常类对象名
3. 表示抛出异常,由方法体内的语句处理
Exception e=new Exception("年龄非法");
throw e;
⑦. finally最后执行
try{
System.out.println(10/0);
}catch (Exception e){
System.out.println("除数为0了");
return;
}finally {
System.out.println("一定会执行的");
}
- ③. final,finally和finalize的区别
1.final,finally和finalize的区别
final:
final可以修饰类,不能为继承
final修饰方法,不能被重写
final修饰变量,只能赋值一次
finally:
finally是try语句中的一个语句体,不能单独使用,用来释放资源
finalize:
是一个方法,当垃圾回收器确定不存在对该对象的更多引用时,
由对象的垃圾回收器调用次方法
2.如果catch里面有return语句,请问finally的代码还会执行吗?如果会,请问在return前还是retrun后
会执行,在return前执行
⑧. 自定义异常概述和基本使用
- 子类重写父类方法时,要求子类抛出的异常要小于父类抛出的异常
- 如果被重写的方法没有异常抛出,那么子类的方法绝对不可以抛出异常,如果子类方法内部有异常发生,那么子类只能try,不能throws
- ②. 如何使用异常处理
原则:如果该功能类部可以将问题处理,用try,如果处理不了,交由调用者处理,这里用throws
public class ScoreException extends Exception {
public ScoreException(){
}
public ScoreException(String message){
super(message);
}
}
public class Teacher {
public void checkScore(int score)throws ScoreException{
if(score<0||score>100){
throw new ScoreException("你输入的数字有误");
}else{
System.out.println("正确");
}
}
}
public class Demo {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入你的成绩:");
int score=sc.nextInt();
Teacher t=new Teacher();
try {
t.checkScore(score);
} catch (ScoreException e) {
e.printStackTrace();
}
}
}
|