概述
常见运行时异常
- 直接继承自RuntimeException或者子类,编译阶段不会报错,运行时可能出现的错误
运行时异常:一般是程序员业务没有考虑好或者是编程逻辑不严谨引起的程序错误
- 数组索引越界异常
- 空指针异常
- 类型转换异常
- 数学操作异常
- 数字转换异常
常见编译时异常
- 不是RuntimeExeption或者子类的异常,编译就报错,必须处理,否则代码不通过
异常的默认处理流程
编译时异常的处理机制
编译时异常是编译阶段就出错的,所以必须处理,否则代码无法通过
方式一:throws
注:一个方法内部可能有很多个异常,但是最终只会抛出一个异常,就看谁先出现了!
方式二:try...catch...
方式三:前两者结合
在开发中第三种方式是最好的,底层异常抛出去给最外层,最外层集中捕获处理。
运行时异常的处理机制
可以不处理,建议处理一下,只需要在最外层捕获处理就可以
案例
代码参考
public class Test2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(true){
try {
System.out.println("请你输入合法的价格:");
String priceStr = sc.nextLine();
//转成double类型的数据
double price = Double.valueOf(priceStr);
//判断价格是否大于0
if (price > 0){
System.out.println("价格:"+price);
break;
}else {
System.out.println("价格必须是正数!");
}
} catch (Exception e) {
System.out.println("用户输入的数据有问题,请输入合法数值!");
e.printStackTrace();
}
}
}
}
自定义异常
补充:throw和throws的区别
throw:在方法内部直接创建一个异常对象,并抛出
throws:用在方法申明上,抛出方法内部的异常