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,编译赶赶的,因为我们一定能在运行阶段打倒它。

 

posted on 2015-11-26 12:42  piano1900  阅读(350)  评论(0)    收藏  举报

导航