throws和throw的区别:
- throws使用在函数上;用于抛出异常类,可以跟多个,用逗号隔开。
- throw使用在函数内;用于抛出异常对象。
- 当函数内容有throw抛出异常对象,并未进行try处理,必须要在函数上声明,否则编译失败。(RuntimeException除外,函数内如果抛出RuntimeException异常,函数上可以不用声明)
异常有两种:
- 编译时被检测异常:该异常在编译时,如果没有处理(没有抛也没有try),编译失败;该异常被标识,代表着可以被处理。
- 运行时检测(编译时不检测):在编译时,不需要处理,编译器不检查;该异常的发生,建议不处理,让程序停止,需要对代码进行修正。
代码示例
class FushuException extends Exception{
private int value;
FushuException(String msg,int value){
super(msg);
this.value=value;
}
public int getValue(){
return value;
}
}
class Demo{
int div(int a,int b) throws FushuException{
if(b<0)
throw new FushuException("出现了除数是负数的情况!/by zero",b);
return a/b;
}
}
class 自定义异常 {
public static void main(String[] args) {
Demo d=new Demo();
try{
int x=d.div(4,-4);
System.out.println("x="+x);
}
catch(FushuException e){
System.out.println(e.toString());
System.out.println("除数出现负数:"+e.getValue());
}
finally{
System.out.println("finally");
}
System.out.println("over");
}
}