异常信息检查:
其中包含了三个重要的信息,异常出现的位置,异常的类型,错误语句的提醒。
Exception有两种异常:
1、RuntimeException(运行时异常):无需显式处理,都是RuntimeException类及其子类。
2、编译时异常:除RuntimeException之外的所有异常。不处理的话就无法通过编译。
处理异常的两种方法:
1、throws方式处理异常:
public void 方法() throws 异常类名{
}
throw抛出异常:主动抛出异常,下面的代码不执行。
throw new RuntimeException("你犯了一个错误。");
面试题:throws和throw的区别
①throws写在方法的声明上,throw写在方法中。
②throws表示该方法存在哪些异常,throw表示在此处抛出一个异常(动作)。
③throws后面接异常的类型,throw后面接异常的对象。
2、try-catch(-finally):
try {
int i = 1//0; // 把可能要出现的异常写在try里
} catch (Exception e) { //异常类型 异常变量名
e.printStackTrace(); //处理异常的方式
}
finally可有可无,无论代码有没有异常发生,finally都会执行。(一般用来执行关流操作)。finally执行过后try中的值才输出;如果finally中有return,则优先执行,有可能会影响try中的值,因为当程序执行到try{}语句中的return方法时,它会干这么一件事,将要返回的结果存储到一个临时栈中,然后程序不会立即返回,而是去执行finally{}中的程序。
public static void main(String[] args) {
System.out.println(show());
}
public static int show(){
try {
int i = 0 ;
return i;
} finally {
int i = 2;
}
}
结果为0。
public static void main(String[] args) {
System.out.println(show());
}
public static int show(){
try {
int i = 0 ;
return i;
} finally {
int i = 2;
return i;
}
}
答案为2。
*自定义异常类:
写一个类 继承Exception 就是编译时异常
写一个类 继承RuntionException 就是运行时异常
面试题:final、finally、finalize三者的区别?
final为常量关键字,而finally为异常关键字,finalize为object自带方法名。
一、final这个关键字在Java中代表不可改变的,可用来修饰类,方法,变量。
二、finally关键字用在异常处理中,用于处理异常后的清理工作,实际中一般用于关闭文件流,释放资源等操作。
三、这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的,它是在 Object 类中定义的,finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。(一般不用自己调用)