##下为引出throw:
如代码:public int age;//如果该全局变量为public级别的变量,则定义Student类的人无法对该变量的范围进行有效的约束 公共方法操作私有属性,所以
public class Student {
private int age;
public void setAge(int age) {
if(age>10 && age<100) {
this.age=age;
}else {
System.out.println("年龄无效,,,");
}
}
public int getAge() {
return age;
}
}
这种提示错误的方式对于调用该方法的程序员没有什么过多的直接的帮助,因为只是知道出错,不知道哪个文件哪个地方,解决方案:throw 异常对象
如:throw new NullPointerException("年龄无效");但异常对象名跟结果说的不是一回事,由此想到了自定义异常。
创建自定义异常:创建继承Exception 或其子类的自定义类;自定义异常类调用父类构造函数(通常是含有一个String类型参数的构造函数);
自定义异常代码:先是自定义一个跟所可能出现的异常相关胡名字让他继承运行时异常,点击空白处右键,有resource,选择建立构造方法,仅勾选所继承的父类异常,这时自定义异常名下有黄色线,鼠标放上,点击第二个增加generated的相关ID,创建完成。如下:
public class AgeException extends RuntimeException {
private static final long serialVersionUID = 5391825784936058922L;
public AgeException(String message) {
super(message);
}
}
下面是在student中定义年龄的方法:
import vo.AgeException;
public class Student {
private int age;
public void setAge(int age) {
if(age>10 && age<100) {
this.age=age;
}else {
throw new AgeException("年龄无效");
}
}
public int getAge() {
return age;
}
}
是把错误丢给AgeException,这样此类中貌似没错了,不妨碍下面程序的运行。
下面是类Te调用student中方法:
public class Te {
public static void main(String[] args) {
Student s = new Student();
try {
s.setAge(100);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(s.getAge());
System.out.println(100);
}
}
这算是把错误丢给自己,通过catch把错误报销,不影响下面程序运行。
此界面方便查找错误代码所在地跟源代码。
##throws:
throws用于声明方法可能抛出的异常,其后为异常类,可以有多个,异常类之间用英文逗号间隔。 什么时候使用: 当方法体中的throw关键字抛出由检查时异常创建的对象时,如果该异常对象在抛出的同时已经通过try-catch进行了处理,则可以不使用throws,否则必须使用throws抛出创建该对象的异常类或其父类。 所调用的方法抛出了检查时异常时,如果该方法在调用的同时已经通过try-catch进行了处理,则可以不使用throws继续上抛该异常,否则必须使用throws才能上抛该异常,此时上抛的异常类可以是调用方法时方法抛出的异常类也可以是其父类。
##throw与throws的区别:
抛出的东西不同:throw抛出的是具体的异常对象,而throws抛出的是抽象的异常类;用它来表示把可能会出现的异常抛出去,但一旦用了throw则一定抛出了某种异常。
使用位置不同:throw一般用在方法体中,也可用在代码块中,但是如果抛出的是检查时异常类创建的对象,则必须使用try-catch自行处理; throws只能用在方法声明括号后面;
##throw用于抛出异常对象;
如果异常对象为运行时,则方法参数列表后面可以不使用throws,也可以将异常抛给方法调用者;try-catch,如上代码即是。
如果异常对象为检查时,则方法参数列表后面必须使用throws抛出创建该对象的类;如果没有throws 必须try-catch解决。如下把可能会出现的异常抛出:
public static void main(String[] args) throws Exception {
Student s=new Student();
s.setAge(111);
System.out.println(s.getAge());
System.out.println(100);
}