一、throw和throws
throw用于手动抛出异常,作为程序员可以在任意位置手动抛出异常
throws用于在方法上标识要暴露的异常,抛出的异常交由调用者处理
两者区别
1.throw用在方法内,后面跟上要抛出的异常类对象
2.throws修饰在方法上,告诉调用者此方法可能会抛出异常,后面跟上要抛出的异常类名
class Bar{
int age;
public Bar(int age){
this.age = age;
}
void check()throws IllegalArgumentException{ //throws 声明标识可能出现的异常
if(age < 18){
throw new IllegalArgumentException("年纪太小"); //throw 抛出异常
}
}
}
public class Test {
public static void main(String[] args) {
Bar b = new Bar(15);
try{
b.check();
}catch(IllegalArgumentException e){
System.out.println(e.getMessage());
e.printStackTrace();
}
System.out.println("end");
}
}
/*
年纪太小
end
java.lang.IllegalArgumentException: 年纪太小
at Bar.check(Test.java:9)
at Test.main(Test.java:19)
*/
二、自定义异常
常见异常
RuntimeException,IOException,SQLException,ClassNotFoundException
自定义异常
java提供的异常体系不可能预见所有希望加以报告的错误
自定义异常类必须从已有的异常类继承
建立新的异常类型最简单的方法就是让编译器产生默认构造方法
对异常来说,最重要的部分就是它的类名
可以为异常类定义一个接收字符串参数的构造方法,字符串参数描述异常信息
class Bar{
int age;
public Bar(int age){
this.age = age;
}
void check()throws AgeLessThanEighteenException{
if(age < 18){
throw new AgeLessThanEighteenException("年纪太小");
}
}
}
//这种就是前面说的受查异常,必须要在代码里处理
class AgeLessThanEighteenException extends Exception{
private String message;
public AgeLessThanEighteenException(String message){
this.message = message;
}
}
public class Test {
public static void main(String[] args) {
Bar b = new Bar(15);
try{
b.check(); //自定义异常,必须要在代码里处理
}catch(AgeLessThanEighteenException e){
System.out.println(e.getMessage());
e.printStackTrace();
}
System.out.println("end");
}
}
/*
null
AgeLessThanEighteenException
end
at Bar.check(Test.java:9)
at Test.main(Test.java:27)
*/