创建自定义的异常类需要继承自Exception类,并提供含有一个String类型形参的构造方法,该形参就是一场的描述信息,可以通过getMessage()方法获得。例如:
public class NewException extends Exception{
public NewException(String s){//这个s就是自定义的精髓所在,想传啥传啥
super(s);
}
}
try catch在main里头用哈,具体的方法里头还是if 判断之后throw new 一个异常。
(是不是凡是涉及异常使用的类都必须Add throws Declaration?)
自定义异常类代码如下:
public class DangerException extends Exception{
String s;
/*该异常类有构造方法,该构造方法使用super调用父类构造方法,
*使用字符串:“属于危险品!”,对父类变量message进行初始化。
*/
DangerException(String s){
super("属于危险品!");
//message=s; Error:message cannot be resolved to a variable
//this.message=s; Error:message cannot be resolved or is not a field
//那如何对父类变量message进行初始化呢?
//额,是不是:super("属于危险品!")就已经完成了对message的初始化?
this.s=s;
}
public String toString(){
return s+','+this.getMessage();
}
}
其他代码如下:
public class Goods {
private String name;
private boolean isDanger;
Goods(String name,boolean isDanger){
this.name=name;
this.isDanger=isDanger;
}
public String getName(){
return name;
}
public void setName(String s){
name = s;
}
public boolean getIsDanger(){
return isDanger;
}
public void setIsDanger(boolean b){
isDanger = b;
}
}
public class Machine {
public void checkBag(Goods goods) throws DangerException{//不能忘记加
//throws DangerException,否则下面的throw new 会报错!
if(goods.getIsDanger()){
throw new DangerException(goods.getName());
//System.out.println(goods.getName()+",被禁止!");// Error:Unreachable code
}
else
{
System.out.println(goods.getName()+",检查通过");
}
}
}
public class Check {
public static void main(String[] args) throws DangerException {
String[] name ={"苹果","炸药","西服","硫酸","手表","硫磺"};//商品名称
Goods[] goods = new Goods[name.length]; //检查6件物品
//创建商品对象
goods[0]=new Goods(name[0],false);
goods[1]=new Goods(name[1],true);
goods[2]=new Goods(name[2],false);
goods[3]=new Goods(name[3],true);
goods[4]=new Goods(name[4],false);
goods[5]=new Goods(name[5],true);
//检查商品
Machine m=new Machine();
for(int i=0;i<6;i++){
try{
m.checkBag(goods[i]);
//System.out.println();
}
catch(DangerException e){
System.out.println(e);
System.out.println(goods[i].getName()+",被禁止!");
}
finally{
System.out.println();
}
}
}
}
经过复习才搞明白一点异常的机制:程序进入try,再进入public void checkBag(Goods goods)方法;如果在public void checkBag(Goods goods)方法中遇到异常,异常后面的代码不会执行了,程序将跳出public void checkBag(Goods goods)方法,来到catch,执行catch中的内容,这就是异常的机制了。