异常处理
目录
1.2 运行时异常(RuntimeException):可以避免
1 异常
所有异常的类都是java.lang.Exception的子类
1.1 检查性异常:无法避免
因为用户错误或者其他外在操作错误,导致的代码无法继续执行,引起的异常。比如:断网、处理的文件不存在等。
常见的检查性异常类:
1 ClassNotFoundException:应用程序试图加载类时,找不到相应的类,抛出该异常
2 lllegalAccessException:访问一个类被拒绝的时候,抛出该异常
3 NoSuchFieldException:请求的变量不存在
4NoSuchMethodException:请求的方法不存在
1.2 运行时异常(RuntimeException):可以避免
运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。比如空指针异常
常见的运行时异常类:
1 ClassCastException:对象类型转换异常
2 IndexOutOfboundsException:下标越界异常
3 NullPointerException(NPE): 空指针异常
1.3捕获异常
try{
}
catch(){
}
注意:如果try 活 catch中有return返回值,则先执行完finally中的代码,再返回数据
1.4抛出异常
public static void () {
//在本方法中,手动抛出一个异常
throw new NullPointerException();
}
//throws将异常抛出给上一级处理,最终将抛给jvm处理
面试考点
注意:如果try 活 catch中有return返回值,则先执行完finally中的代码,再返回数据
基本数据类型
private static int t2(){
int i=10;
try{
int a=i/0;
return i;
}catch (Exception e){
//临时缓存返回值
return i;
}finally{
i++;
}
}
输出为10
----------------------------------------------------------------------------------
引用数据类型
private static Student t3(){
Student stu = new Student();
stu.setAge(20);
try{
int 10/0;
return stu;
//引用类型,返回值(临时缓存的是对象的地址)
}catch(Exception e ){
return stu;
}finally {
stu.setAge(30);
}
}
输出为20
-----------------------------------------------------------------------------------
字符串
private static String t4(){
String a="abc";
try{
int i=10/0;
return a;
//缓存的是abc在常量池中的地址
}catch(Exception e ){
return a;
}finally{
a = "dgr";
}
}
输出为abc
2错误 Java.lang.error
错误不是异常,而是脱离程序员控制的问题,错误在代码中通常被忽略。
例如:
JVM内存溢出。错误在编译阶段也是检查不到的。一般的,程序不会从错误中恢复。