java异常的详解

java的异常可分为两大类:Checked ExceptionUnchecked Exception(又名Runtime Exception)两者都继承自java.lang.Exception类

java中所有的异常都是一个类或者说是一个对象。

之所以分类是因为:系统对于这两大类的异常有不一样的处理方式。

java.lang.Object

                java.lang.Throwable

                                java.lang.Exception

                                                   RuntimeException

                                                  ……………………

                                java.lang.Error

Unchecked Exception(运行时异常):java中所有的运行时异常都直接或间接继承自RuntimeException类,

java对于运行时异常可以处理也可以不做任何处理,并建议最好不做处理。

处理异常与不处理的区别:如果对于异常不作处理(没有try……catch……),程序将不会继续往下执行


处理异常的方法:

public class Exception1
{
	public static void main(String[] args)
	{
		int c = 99;
		try
		{
			int a = 9;
			int b = 0;
			c = a / b;  //会出现异常,即产生一个异常对象(new ArithmeticException())
			System.out.println("after ArithmeticException");//不会被执行
		} catch (ArithmeticException e)
		{
			e.printStackTrace();
			System.out.println("catch block ");
		}finally
		{
			System.out.println("finally block");//无论是否发生异常总会执行
		}
		System.out.println(c);//只有捕获了异常,才会执行

	}
}

执行顺序:执行try代码块的语句,如果发生异常则产生一个相应的异常对象,执行catch语句,然后是finally语句,最后程序继续执行。 如果未发生异常,跳过catch块,执行finally语句,最后程序继续执行。

对于异常捕获也可以没有catch代码块,但不推荐不做任何的处理。也可以有多个catch块,但要注意异常之间的关系。



Checked Exception:对于非运行时异常必须对其进行处理,处理方式有两种:捕获处理和调用的方法处抛出

public class Exception1
{
	public static void main(String[] args)  //也可以在此处抛出异常
	{
		try
		{                              //捕获处理
			int c =  divide(12,3);
		} catch (Exception e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 

	}
	
	public static int divide(int a,int b) throws Exception
	{
		if(b == 0)
		{
			throw new Exception();
		}
		
		return a/b;
	}
}

自定义异常:自定义异常一般继承自Exception类的子类。在开发中自定义的异常一般都继承Exception而非RuntimeException。

public class Exception1
{
	public static void main(String[] args) 
	{
		
			try
			{
				int c =  divide(12,3);
			} catch (MyException e)
			{
				e.printStackTrace();
			}
			
	}
	
	public static int divide(int a,int b) throws MyException
	{
		if(b == 0)
		{
			throw new MyException("除数不能为0");
		}
		
		return a/b;
	}
}


class MyException extends Exception
{
	
	MyException(String message)
	{
		super(message);
	}

}

注意:如果在try代码块中有return语句,而语句未发生异常,则必须在执行完finally后才执行。
            如果在try代码块中有System.exit(0)语句,则不会执行finally语句,因为System.exit(0)语句会终止当前的java虚拟机。

         



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值