异常
1. throw和throws的区别?
- throws用来声明一个方法可能抛出的所有异常信息,交由调用者处理异常。
- thorw用在方法内,指抛出的一个具体的异常的类型。
2.Java中异常有哪几类?
- java中的异常主要分为Error和Exception。
3.final、finally、finalize的区别?
- final用于声明属性,方法和类,分别表示属性不可变,方法不可被重写,类不可被继承。
- finally是异常处理语句结构的一部分,表示总是执行。
- finalize是Object的一个方法,垃圾收集器执行的时候会调用被回收对象的此方法。
4.try-catch-finally那个部分可以省略?
- catch 和 finally 语句块可以省略其中一个。
public class Test {
public static void main(String[] args) {
omitFinally();
omitCatch();
}
/**
* 省略finally 语句块
*/
public static void omitFinally() {
try {
int i = 0;
i += 2;
System.out.println(i);//2
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 省略 catch 语句块
*/
public static void omitCatch() {
int i = 0;
try {
i += 1;
} finally {
i = 12;
}
System.out.println(i);//12
}
}
5.try-catch-finally中,如果catch中return了,finally还会执行嘛?
- 会执行,在return前执行。
public class Demo {
public static void main(String[] args) {
System.out.println(getInt());
/*输出:finally=40
30 */
}
public static int getInt() {
int a = 10;
try {
System.out.println(a / 0);
a = 20;
} catch (ArithmeticException e) {
a = 30;
return a;
/*
* return a 在程序执行到这一步的时候,这里不是return a 而是 return 30;这个返回路径就形成了
* 但是呢,它发现后面还有finally,所以继续执行finally的内容,a=40
* 再次回到以前的路径,继续走return 30,形成返回路径之后,这里的a就不是a变量了,而是常量30
*/
} finally {
a = 40;
System.out.println("finally="+a);
}
return a;
}
}
public class Demo2 {
public static void main(String[] args) {
System.out.println(getInt());//输出40
}
public static int getInt() {
int a = 10;
try {
System.out.println(a / 0);
a = 20;
} catch (ArithmeticException e) {
a = 30;
return a;
/*
* return a 在程序执行到这一步的时候,这里不是return a 而是 return 30;这个返回路径就形成了
* 但是呢,它发现后面还有finally,所以继续执行finally的内容,a=40
* 再次回到以前的路径,继续走return 30,形成返回路径之后,这里的a就不是a变量了,而是常量30
*/
} finally {
a = 40;
return a; //如果这样,就又重新形成了一条返回路径,由于只能通过1个return返回,所以这里直接返回40
}
}
}
6.常见的异常类有哪些?
一、编译时异常:
- 1.除0发生算术异常(ArithmeticException)
- 2.数组下标越界异常(ArrayIndexOutOfException)
- 3.数组元素类型不匹配异常(ArrayStoreException)
- 4.强制类型转换异常(ClassCastException)
- 5.索引越界异常(IndexOutOfBoundsException):索引越界异常在某排序索引(例如对字符串或数组的排序)超出范围是抛出。
- 6.空指针异常(NullPointerException):null对象调用实例方法时抛出
- 7.数字格式转换异常(NumberFormatException):把一个格式不对的字符串转换成一个数值类型。
- 8.字符串索引越界异常(SrtringIndexOutException):用非法索引访问字符串抛出的异常。如果索引为负或大于等于字符串的大小,则该索引为非法索引。
- 9.操作错误(UnsupportedOperationException)
二、运行时异常: - 1.找不到指定类时发生的异常(ClassNotFoundException):例当程序加载Class类中的forName()方法时,异常抛出。
- 2.请求的方法不存在(NosuchMethodException):当程序试图调用某个类的某种方法,而该类中没有该方法的定义时抛出该异常。