书接上回~
异常处理使代码更稳健
我们用一个案例来引入:
需求:用键盘输入一个合理的数为止,且值必须大于零。在没学异常之前,我们可以定义一个死循环,让用户不断输入,直到正确为止跳出循环。
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(true){
System.out.print("请输入合法数字:");
String x = sc.nextLine();
double y = Double.valueOf(x);
if(y>0){
System.out.println("输入正确!");
break;
}
else{
System.out.println("应该输入大于零的数!");
}
}
}
}
但是!如果输入字符串或者其他类型数据,程序会直接崩溃退出,没有达到让用户输入正确数组的目的。
现在我们使用异常处理机制修改程序。
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (true) {
try {
System.out.print("请输入合法数字:");
String x = sc.nextLine();
double y = Double.valueOf(x);
if (y > 0) {
System.out.println("输入正确!");
break;
} else {
System.out.println("应该输入大于零的数!");
}
} catch (Exception e) {
System.out.println("请输入合法数字!!!");
}
}
}
}
在外面加一层try...catch即可,这样不管输入什么数据都会运行catch里的语句而不会因异常退出程序。
自定义java异常
java本身涵盖的异常类型并不能覆盖所有现实中出现的问题,这就需要我们自定义类型来解决。自定义异常还有哪些好处呢?可以使用异常的机制管理业务问题,如提醒程序员注意,同时一旦出现bug,可以用异常的形式来清晰的指出错的地方。
自定义异常的分类
1,自定义时编译异常:
- 定义一个异常类继承Exception。
- 重写构造器。
- 在出现异常的地方用 throw new 自定义对象抛出。
2,自定义运行时异常:
- 定义一个异常类继承RuntimeException。
- 重写构造器。
- 在出现异常的地方用 throw new 抛出。