异常是代码执行的过程中可能遇到的问题,导致程序不能正常运行了。
异常会是出现的,程序员应该提前处理这种可能出现异常。
异常处理体现了程序设计的健壮性和稳定性。
早期的异常处理是通过
if(异常){
//处理
}elseif(异常){
//处理
}
这个不靠谱。程序有成千上万种,程序员要提前处理,所以这种不靠谱
假如不处理代码出现的异常,程序会将异常直接抛给JVM虚拟机,程序就会立即崩溃。
Exception:一切异常的父类。代表了java中的所有异常的父类。
出现异常以后的代码不会进行,异常必须处理(异常处理捕获了才会执行后面的代码。)
常见的异常:(ArrayIndexOutOfBoundsException【数组越界异常】、ArithmeticException【运行时异常】、NullPointerException【空指针异常】、ClassCastException【类型强转异常】、NumberFormatException【数字转换类型异常】)
String str=null;
System.out.prinln(str.length());//空指针异常
企业里面会用Exception来捕获打印出来看什么异常。
代码:
package exception_01;
public class Exception_01 {
public static void main(String[] args) {
chu(5,0);
}
public static void chu(int a,int b){
int c=0;
try {
c=a/b;
System.out.println(c);
} catch (Exception e) {
System.out.println("请输入正确的数字:");
}
System.out.println("哈哈");
}
}
异常(Exception)的分类:
Throwable:
-- Error:
-- Exception:其他、RuntimeException(运行时的异常)
RuntimeException:运行时异常,运行的时候出现的异常。
运行时异常不捕获编译时也不会报错。
面试:
异常可分为:必须检查异常,非必须检查异常。针对于编译时。
--- 必须检查异常编译时必须进行捕获,否则报错。
--- 非必须检查异常可以捕获也可以不捕获都不会报错。
RuntimeException异常或其子类异常就是非必须检查异常。
其他Exception异常或者Exception本身就是必须检查异常。
必须检查异常:InputStream is =new fileInputStream(new File("c:/...."));
throws关键字:
throws Exception抛出去让外面处理异常
throws写在方法后面的
方法的完整格式:
【修饰符】【static】<返回值>方法名【throws 异常类型】(形参列表){
//代码
}
将方法体中可能出现的异常都抛出去。
--- 谁调用这个方法出现的异常就抛给谁,这个异常就throws给谁
如果方法抛出来throws出来的必须检查异常
--- 要么方法自己立即捕获
--- 要么方法不管通过throws继续往外抛给上一级调用者
这个时候调用者就必须捕获或者继续往外抛
throw:创建一个异常对象,然后从当前抛出throw new 异常类型(xx);
throws:用在方法后面,将方法中的异常抛给上一级调用者。
finally关键字
try{
}catch(异常类型 e){
e.printStackTrace();
}finally{
//代码块
//无论什么情况,最终都要最后执行一次代码。
}
finally可以出现0-1次
finally作用:
一般用于在程序执行完最后做一些事情
比如:最后关闭程序在运行过程中使用的资源。