目录
一、异常处理
1.下标越界
2.空指针
3.类型转换异常
4.数字格式化
5.算数异常(数字异常)
1. 编程界
1.除数为0
2.输入输出流 -》IO流,没有关闭
3.停电
当一个程序抛出异常时,抛异常后的语句不再执行,类似于return的功能,终止方法执行。
public static void main(String[] args) {
int num1=10;
int num2=0;
try {
System.out.println(num1 / num2);
}catch (Exception e){//捕获异常
System.out.println("除数不能为零");
e.printStackTrace();//输出异常信息
}
System.out.println("我很重要...");
}
结果:
java.lang.ArithmeticException: / by zero
at hh.ch01.main(ch01.java:21)
除数不能为零
我很重要...
2. 异常的继承结构体系:
- 最顶级的Throuwable:错误,异常
- Error:正常情况下,不太可能出现的。绝大多数Error都会导致程序处于非正常的状态下,很难恢复。外力的作用下,不考虑。
Error是Throuwable的子类。在程序处理范围之外的。
- Exception:Java语言中,将程序执行中发生的不正常的情况称之为异常。
编译期异常:IOException 写代码时,抛异常。不解决,一直报红。
运行期异常:RuntimeException 运行会抛异常,平时没事。
RuntimeException的子类有:
- ArithmeticException 算术异常
- NullPointerException 空值异常
- ArrayIndexOutOfBoundsException 数组越界异常
- InputMismatchException 非法输入异常
- IllegalArgumentException 非法传参异常
- NumberFormatException 数字转换异常
- ClassCastException 类转换异常
- ClassNotFoundExcption 类加载异常
3. 自定义异常:
Java中异常机制,但结合实际业务。
4. 怎么自定义异常?
声明抛出throw
声明异常:将问题标识出来,报告给调用者,如果方法内通过throw抛出了编译异常,而没有捕获处理,那么必须通过throws进行声明,让调用者负责处理。
关键字throws运用于方法声明之上,用于表示当前方法不处理异常,而是提醒该方法的调用者来处理异常(抛出异常) 。
声明格式:
修饰符 返回值类型 方法名(参数) throws 异常类名1,异常类名2...{}
异常①:
异常②:
手动抛出异常
Java异常类对象在除了程序执行过程当中出现异常外,也可以根据需要手动创建并抛出异常。
①首先要生成异常类的对象,然后通过throw语句实现抛出异常
IOException io = new IOException();
throw io;
②可以抛出的异常必须是Throwable或者其子类的实例
throw new IOException("出现异常");
案例:定义一个键盘输入的方法创建一个异常,如果输入的是数字那么打印出这个数字,如果没有输入就会报异常信息。
public static void main(String[] args){
MsgException();
}
public static void MsgException() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入任意一个数字:");
String num = sc.nextLine();
if(num.equals("")) {
throw new NullPointerException("您没有输入!");
}else {
System.out.println("您输入的数字是:"+num);
}
}
结果信息:
return返回值的使用:
可用在try、catch、finaly中,
当try中有return返回值时,则catch或finaly中必须有返回值,否则编译异常,
因为执行try中代码遇到异常时,会直接跳到catch块中,不经过try中return返回值。
二、捕获异常
1.捕获异常的方法
try {
//需要捕获异常的代码
} catch (Exceptione) {
//处理异常代码的方法
}finally{
//不论有无异常,都会执行的代码,除非catch中有System.exit()方法
}
2.处理异常代码的方法
- printStackTrace();堆栈跟踪。显示执行流程,返回异常描述字符串、异常类型、异常位置
- System.exit(1); 异常终止
- System.exit(0); 程序终止
3.return返回值的使用:
- 可用在try、catch、finaly中,
- 当try中有return返回值时,则catch或finaly中必须有返回值,否则编译异常,
- 因为执行try中代码遇到异常时,会直接跳到catch块中,不经过try中return返回值。
4.多重catch块:
根据try中捕获的异常类型,选择对应的catch块处理,通常前面catch块会先声明子类异常,最后catch块用父异常Exception收尾。
示例:
try {
//出现有异常类型2的代码
} catch (异常类型1 e) {
e.printStackTrace();
} catch (异常类型2 e) {
e.printStackTrace();
}
三、心得体会
被空指针折磨死了,累累累!!!