Java-自定义异常
代码:`package 自定义异常;
public class HeroIsDeadException extends Exception {
public HeroIsDeadException() {
}
public HeroIsDeadException(String message) {
super(message);
}
}
package 自定义异常;
public class Hero {
private String name;
protected int hp;
@Override
public String toString() {
return "Hero{" +
"name='" + name + '\'' +
", hp=" + hp +
'}';
}
public Hero(String name, int hp) {
this.name = name;
this.hp = hp;
}
public void attackHero(Hero h) throws HeroIsDeadException{
if(h.hp == 0){
throw new HeroIsDeadException(h.name + "已经挂了无法选择");
}else {
System.out.println("攻击成功");
}
}
}
package 自定义异常;
public class Test {
public static void main(String[] args) {
Hero dm = new Hero("盖伦", 1900);
System.out.println(dm);
Hero tm = new Hero("提莫", 0);
System.out.println(tm);
try {
dm.attackHero(tm);
System.out.println(tm);
}catch (Throwable e){
e.printStackTrace();
System.out.println("具体原因"+e.getMessage());
}
}
}
总结:
throw与throws的区别
1、throw用在方法体内,上面代码显示了,是直接在main方法体内
throws用在方法声明后面,表示再抛出异常,由该方法的调用者来处理。这个看上面的代码就理解了
2、throw是具体向外抛异常的,抛出的是一个异常实例
throws声明了是哪种类型的异常,使它的调用者可以捕获这个异常
3、throw,如果执行了,那么一定是抛出了某种异常了,安生throws表示可能出现,但不一定。
4、同时出现的时候,throws出现在函数头、throw出现在函数体,两种不会由函数去处理,真正的处理由函数的上层调用处理