7、异常处理

1、Java中捕捉异常语法结构如下:
   try
   {
       //语句
   }
   catch(异常类型 名称)  
   {
       //异常处理
   }
   finally
   {
       //一定会处理的区块
   }
   try区块可以搭配多个catch区块,如果设定了catch区块,则finally区块可有可无;
   如果没有设定catch区块,则一定要有finally区块。
 
2、异常一旦丢出,就不会再回到异常的丢出点了。
  
3、可控式异常是指某些情况下异常的发生是可预测的,编译器会要求必须处理。
   例如在使用java.io.BufferedReader的readLine()方法时,编译器要求明确告知如何处理java.io.IOException,否则报错。
   
4、执行时异常是指异常发生在程序执行期间,并不一定可预测它的发生,编译器不要求一定要处理。
   对于执行时异常若没有处理,则异常会一直往外丢,最后由JVM来处理,JVM所做的就是显示异常堆栈信息。
 
5、throw 和 throws
   当程序发生错误而无法处理时,会丢出对应的异常,除此之外,还有两种情况:
   1)想要自行丢出异常,例如在捕捉异常并处理结束后,再丢出,让下一层异常处理区块捕捉;
   2)重新包装异常,将捕捉到的异常以自己定义的异常对象加以包装丢出。
   
6、若想要自行丢出异常,可以使用throw关键词,并生成指定的异常对象。例如:
   throw new ArithmeticException(); 
   
   举例说明:浮点数除以零
   public class Main
   {
	  public static void main(String[] args)
	  {
		  try
		  {
			  double data = 100/0.0;


			  System.out.println("浮点数除以零:" + data);


			  if(String.valueOf(data).equals("Infinity"))
			     throw new ArithmeticException("除零异常");
		  }
		  catch (ArithmeticException e)
		  {
		      System.out.println(e);
		  }	
	  }
  }
7、如果在方法中会有异常的发生,但并不想在方法中直接处理,而想由异常方法的调用者来处理,
   则可以使用throws关键词来声明这个方法将会丢出这个异常。例如:
   java.io.BufferedReader的readLine()方法就声明会丢出java.io.IOException。
   
   使用throws声明丢出异常的时机,通常是工具类的某个工具方法。如货币转换,日期。。。
   因为作为被调用的工具,本身并不需要将处理异常的方式给定义下来,所以在方法上使用throws声明会丢出异常,
   由调用者自行决定如何处理异常时比较合适的。
   
   可以这样使用throws来丢出异常:
   private void someMethod(int[] arr) throws ArrayIndexOutOfBoundsException,ArithmeticException
   {
      //实现
   }
   注意:方法上若会丢出多种可能的异常时,中间是使用逗点分隔;
         当方法上使用throws声明丢出异常时,意味着调用者必须处理这些异常。
   
   简单示例:
   public class Main
   {
	   public static void main(String[] args)
	   {
		   try
		   {
			   throwsTest();
		   }
		   catch (ArithmeticException e)
		   {
			   System.out.println("捕捉异常");
		   }
	   }


	   private static void throwsTest() throws ArithmeticException
	   {
		   System.out.println("这只是一个测试");


		   //程序处理过程中假设发生异常
		   throw new ArithmeticException();
	   }
   }

8、简单的说,要么在方法中直接处理异常,要么就在方法上声明该方法会丢出异常,由调用者处理。

9、Java所处理的异常主要分为两大类:
   一类是严重的错误,例如硬件错误或内存不足,相关的类是java.lang下的Error类及其子类,这类错误程序无力自行恢复;
   另一类是非严重的错误,代表可以处理的状况,程序有机会恢复正常,相关类是java.lang下的Exception类及其子类。
   
10、Error类与Exception类都继承自Throwable类,该类的几个取得相关异常信息的方法:
    1)getLocalizedMessage()
  取得异常对象的区域化信息描述
2)getMessage()
  取得异常对象的信息描述
3)printStackTrace()
  显示异常的堆栈信息,这个方法在追踪异常发生的根源是相当有用。例如:
  A方法调用B方法,B方法调用C方法,C方法产生异常,则在处理异常时调用printStackTrace()可以得知
  整个方法调用的过程,由此得知异常是如何被层层丢出的。
4)也可调用toString()方法取得异常的简单信息描述。

11、下面列出一些重要的异常继承架构:
    Throwable
	   Error(严重的系统错误)
	      LinkageError
		  ThreadDeath
		  VirtualMachineError
		  ...
	   Exception
	      (可控式异常)
		  ClassNotFoundExceptioon
		  CloneNotSupportedException
		  IllegalAccessException
		  ...
		  RuntimeException(执行时异常)
		     ArithmeticException
			 ArrayStoreException
			 ClassCastException
			 ...
12、在捕捉异常对象时,如果父类异常对象在子类异常对象之前被捕捉,则catch子类异常对象的区块将永远不会
    被执行,事实上编译器也会检查这个错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值