目录
异常的体系结构和异常的分类
虚拟机默认处理异常的方式
throws声明异常
声明异常的注意事项
throws抛出异常
try…catch自己处理异常
try…catch的常见问题
throwable成员方法
package top.djzxdx.www.throwsdemo;
public class throwsdemo2 {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5};
try {
System.out.println(arr[10]);
} catch (ArrayIndexOutOfBoundsException e) {
e.printStackTrace();
}
System.out.println("哈哈哈");
}
}
异常的小练习
学生类:
package top.xxx.www.throwsdemo;
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if (age >= 18 && age <= 25) {
this.age = age;
}else{
throw new RuntimeException("年龄范围有误");
}
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
学生测试类:
package top.xxx.www.throwsdemo;
import java.util.Scanner;
public class StudentDemo {
public static void main(String[] args) {
Student stu = new Student();
Scanner sc = new Scanner(System.in);
System.out.println("请输入姓名:");
String s = sc.nextLine();
stu.setName(s);
while(true){
System.out.println("请输入年龄:");
String s1 = sc.nextLine();
try {
Integer integer = Integer.valueOf(s1);
stu.setAge(integer);
break;
} catch (NumberFormatException e) {
System.out.println("您输入的不是数字!");
continue;
}catch (RuntimeException e) {
System.out.println("您输入的年龄范围不正确!");
continue;
}
}
System.out.println(stu.toString());
}
}
自定义异常
自己写一个异常类:
package top.djzxdx.www.throwsdemo;
public class AgeOutOfBoundsException extends RuntimeException{
public AgeOutOfBoundsException() {
}
public AgeOutOfBoundsException(String message) {
super(message);
}
}
修改Student类中的throw new异常类型:
package top.djzxdx.www.throwsdemo;
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if (age >= 18 && age <= 25) {
this.age = age;
}else{
throw new AgeOutOfBoundsException("年龄范围有误");
}
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
修改学生测试类中的异常类型,同时把异常的提示信息打印在控制台:
package top.djzxdx.www.throwsdemo;
import java.util.Scanner;
public class StudentDemo {
public static void main(String[] args) {
Student stu = new Student();
Scanner sc = new Scanner(System.in);
System.out.println("请输入姓名:");
String s = sc.nextLine();
stu.setName(s);
while(true){
System.out.println("请输入年龄:");
String s1 = sc.nextLine();
try {
Integer integer = Integer.valueOf(s1);
stu.setAge(integer);
break;
} catch (NumberFormatException e) {
System.out.println("您输入的不是数字!");
continue;
}catch (AgeOutOfBoundsException e) {
System.out.println(e.toString());
System.out.println("您输入的年龄范围不正确!");
continue;
}
}
System.out.println(stu.toString());
}
}