一、java异常定义
1.所谓异常就是指程序在运行时出现错误时通知调用者的一种机制。
2.异常举例
①除以“0”
system.out.println(10/0);
//执行结果
Exception in thread "main" java.lang.ArithmeticException : / by zero
②数组下标越界
int[] arr = {11,2,3};
system.out.println(arr[100]);
//执行结果
Exception in thread "main" java.lang.ArrayIndexoutofBoundsException : 100
③访问 null 对象
public class Test {
public int num = 100;
public static void main(string[] args){
Test t = null;
sysout.out.println(t.num);
}
}
//执行结果
Exception in thread "main" java.lang.nullpointerException
二、异常的基本用法
1.捕获异常
基本语法:
try{
//又可能出现异常的语句;
}[catch (//异常类型 异常对象) {
}...]
[finally {
//异常出口
}]
说明:
- try 代码块中放的是可能出现异常的代码;
- catch 代码块中放的是出现异常后的处理行为;
- finally 代码块中的代码用于处理善后工作,会在最后执行;
- catch finally 都可以根据情况选择加或不加。
2.代码示例
①不处理异常
int[1,2,3];
system.out.println("before");
system.out.println(arr[100]);
system.out.println("after");
//执行结果
Exception in thread "main" java.lang.ArrayIndexoutofBoundsException : 100
一旦出现异常,程序就终止了 .after 没有正确输出。
②使用 try catch 后的程序执行过程
int[1,2,3];
try{
system.out.println("before");
system.out.println(arr[100]);
system.out.println("after");
}catch(ArrayIndexoutofBoundsException e) {
//打印出现异常的调用栈
e.printStackTrace();
}
system.out.println("after try catch");
//执行结果
before
java.lang.ArrayIndexoutofBoundsException : 100
at demo02.Test.main(Test.java: 10)
after try catch
一旦 try 中出现异常,那么 try 代码块中的程序就不会继续执行,而是交给 catch 中的代码块来执行 .catch 执行完毕会继续往下执行。
三、异常处理流程
- 程序先执行 try 中的代码;
- 如果 try 中的代码程序异常,就会结束 try 中的代码,看和 catch 中的异常是否匹配;
- 若匹配就执行 catch 中的代码;
- 若不匹配,就会将异常向上传递到上层调用者;
- 无论执行 3或者4 ,finally 中的代码都会在该方法结束之前执行;
- 若上层调用者也没有处理的了异常,就继续向上传递;
- 一直到 main 方法也没有合适的代码处理异常,就会交给 JVM 来进行处理,此时程序就会异常终止。
四、Java异常体系
Java内置异常类之间的继承关系:
说明:
- Java语言规范将派生与 Error 类或 RuntimeException 类的所有异常称为非受查异常,所有的其他异常称为受查异常。
- 如果一段代码可能抛出 受查异常,那么必须进行显式处理。
例:
public static void main(string[] args){
system.out.println(readFile());
}
public static String readFile(){
//尝试打开文件,并读其中一行
File file = new file ("d : /test.txt");
//使用文件对象构造 Scanner 对象
Scanner sc = new Scanner (file);
return sc.nextLine();
}
//编译出错
Error: (13,22) java : 未报告的异常错误 java.io.FileNotFoundException; 必须对其进行捕获或声明以便抛出。
显式处理方法:
①使用 try catch
public static void main(string[] args){
system.out.println(readFile());
}
public static String readFile(){
File file = new file ("d : /test.txt");
Scanner sc = null;
try{
sc = new Scanner(file);
}catch(FileNotFoundException e){
e.printStackTrace();
}
return sc.nextLine();
}
②在方法上加上异常说明,相当于将处理动作交给上级调用者
public static void main(string[] args){
try{
system.out.println(readFile());
}catch(FileNotFoundException e){
e.printStackTrace();
}
}
public static String readFile(){
File file = new file ("d : /test.txt");
Scanner sc = new Scanner (file);
return sc.nextLine();
}
扩展
-
Java中还存在自定义异常,自定义异常通常会继承自 Exception 或者 RuntimeException;
-
继承自Exception的异常默认是受查异常;
-
继承自RuntimeException的异常默认是非受查异常。
以上为我对Java异常的一些浅显的总结。仅供大家参考,有错误请及时联系更改。欢迎大家提出建议。 才学疏浅,总结的不是很全面,还望见谅。