java中的RuntimeException工作原理
java中的RuntimeExcption类及其子类的异常对象处理机制
首先如果我们抛出异常的时候,我们自己在编译阶段就不用throw和try{}catch(){}操作了,因为系统默认的处理方式,检查这个异常是不是RuntimeException(nameException instanceof RuntimeException),如果是编译阶段放过你,当时执行阶段你是抛出异常,你没办去继续进行异常的处理。所以就要你修改代码
下面我写个伪代码来说明这种情况
class Person
{
public void checkName(String name)
{
if(name.equals("张三"))
System.out.println("true");
else
System.out.println("false");
}
main()
{
checkName(null) //传个空值
}
}
你知道的我们无法try catch ,因为传个空对象,我们没有办法就行处理,这就要求我们修改代码块
所以在编译阶段呢,jvm就不报错了,(我们无能为力) 在catch里面我们没办法做出处理
但是在运行阶段的话 会报错,这就要求我们修改代码。
class Person
{
public void checkName(String name)
{
if(张三.equals(name))
System.out.println("true");
else
System.out.println("false");
}
这样就ok了。
所以RuntimeException有点小小的特殊,我们在try{}catch(){}里面的无能为力,就让他放纵吧,但是我们一定能处理好这个对象的,所以我们在运行时候修改代码
总结:我们在编译阶段既不抛给调用者,也不做处理。因为我们要修改代码块 。
class FushuException extends RuntimeException
{
private int value;
FushuException(String msg,int value)
{
super(msg);
this.value=value; //ok这样也可以通过编译
}
public int getValue()
{
return value;
}
}
class Demo
{
public int division(int a,int b)
{
if(b<0)
throw new FushuException("负数异常",b);
return a/b ;
}
}
class ExceptionDemo5
{
public static void main(String[] args)
{
Demo d=new Demo();
int x=d.division(3,-1);
System.out.println("x="+x);
//System.out.println();
//System.out.println("传进去的负数是");
System.out.println("over");
}
}
这样ok,编译赶赶的,因为我们一定能在运行阶段打倒它。
浙公网安备 33010602011771号