两种处理异常的方式小结:
1.抛出throw,throws
- 在方法中,当传递的参数有误,没有继续执行下去的意义了,就采取抛出处理,表示让该方法结束运行。
- 告诉调用者出现了问题。
2.捕获try-catch
能让代码继续往下运行。
3.异常的练习:
定义一个Student类,当年龄不在20-30之间时,提示。
public class ExceptionDemo12 {
public static void main(String[] args) {
Student stu = new Student();
Scanner sc = new Scanner(System.in);
System.out.println("请输入姓名");
String name = sc.nextLine();
stu.setName(name);
while (true) {
System.out.println("请输入年龄");
String ageStr = sc.nextLine();
try {
//这行可能出现异常
int age = Integer.parseInt(ageStr);
//这行可能会出现异常
//抛给了调用者,调用者没有处理,就交给jvm;这个例子中调用者在catch中进行了处理。
stu.setAge(age);
//赋值成功,跳出循环
break;
} catch (NumberFormatException e) {
System.out.println("请输入一个整数");
continue;
} catch(RuntimeException e){
System.out.println("请输入一个符合范围的年龄:"+e);
continue;
}
//在这判断不合理,应该在pojo中判断
/* if (age >= 18 && age <= 25) {
stu.setAge(age);
break;
} else {
System.out.println("请输入符合要求的年龄");
continue;
//报错unreachable statement异常
// int abc = 123;
// System.out.println("执行了continue");
}*/
//跳出循环的条件:赋值成功了
}
System.out.println(stu);
}
}
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
if( age >= 20 && age <= 30){
this.age = age;
}else{
throw new RuntimeException("年龄超出了范围");
}
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
运行结果: