最近在学习Java 异常处理的时候,练习了一个学生录入的程序,过程中也遇到了一些处理异常方面的问题,特地将其记录下来,方便日后自己查阅!!!!!!!
一.try...catch注意点
-
如果 try 中没有遇到问题,怎么执行?
会把try中所有的代码全部执行完毕,不会执行catch里面的代码
-
如果 try 中遇到了问题,那么 try 下面的代码还会执行吗?
那么直接跳转到对应的catch语句中,try下面的代码就不会再执行了 当catch里面的语句全部执行完毕,表示整个体系全部执行完全,继续执行下面的代码(注意,如果try中存在2个异常,那么在第一个异常执行之后,直接跳转到对应的catch try中剩下代码都不会执行,包括第二个异常)
-
如果出现的问题没有被捕获,那么程序如何运行?
那么try...catch就相当于没有写.那么也就是自己没有处理. 默认交给虚拟机处理.
-
同时有可能出现多个异常怎么处理?
出现多个异常,那么就写多个catch就可以了. 注意点:如果多个异常之间存在子父类关系.那么父类一定要写在下面
二.异常练习(学生录入)
public void setAge(int age) {
if(age>=18&&age<=25){
this.age = age;
}else{
throw new NumberFormatException();
}
}
//至于为何为把18-25的年龄判断写到Student类中是因为 //这边是只有一个学生对象 我们可以写在Demo中,但如果有很多个学生对象,那么创建一个学生对象 // 赋值一次就要在Demo中写一次18-25的判断就显得冗余 //所以直接写在学生类中,那么多个学生对象的年龄判断都可以在学生类中进行
主程序
public class ExceptionDemo03 {
public static void main(String[] args) {
Student student = new Student();
Scanner sc= new Scanner(System.in);
System.out.println("请输入学生的姓名:");
String name = sc.next();
student.setName(name);
while (true)
{
try {
System.out.println("请输入学生的年龄:");
String ageStr = sc.next();//这边用sc.next是为了既可以输入字符串 也可以输入整数!!!
int parseInt = Integer.parseInt(ageStr);
student.setAge(parseInt);
break;
}
catch (NumberFormatException e) {
System.out.println("请输入一个整数");
}
catch (RuntimeException e) {
//e.printStackTrace();
System.out.println("请输入一个18-25之间的数");
}
}
System.out.println(student);
}
}