黑马程序员_异常

来源:互联网 发布:科隆质量流量计be数据 编辑:程序博客网 时间:2024/05/21 21:01

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------




语法结构:


try{

     可能引发异常的语句


}catch(可能出现的异常现象){
      针对异常现象的处理语句

}finally{


(清理现场)

}


try语句块用于包裹可能引发异常的语句


try语句块中的语句不是一定会引发异常现象的


try语句块中的语句一旦引发异常,程序执行流程将自动跳转到对应的处理代码中,
   则从引发异常的语句向后直到try语句块结束大括号处的代码将不再运行


catch语句块定义了针对try语句块中所引发的异常进行分门别类的处理


     一个try语句块可以携带一个或多个catch语句块,但是只能引发其中任意一个处理方案,
     不可能执行一种以上的处理方法


catch语句块超过一个时,需要对其层次进行自上而下由小到大的层级排列,
    相互之间没有层级关系的语句可以随意排列顺序,不做要求
finally语句块定义了一段总是被运行的代码,无论try语句块中是否出现异常现象


finally语句块通常用于做现场清理的工作,例如try语句块中打开了一个文件,
       但是由于运行过程中出现了异常,转入到catch执行处理代码后,文件并没有被正常关闭,
       此时需要利用finally语句块来进行处理,将文件正常关闭


异常处理器中的catch与finally可以共存,一个try语句可以携带一到多个catch语句块,
但是只能携带一个finally语句块
异常处理器可以选择只携带catch语句块或finally语句块


catch语句块中针对出现的异常现象根据Java面向对象的原则,将出现的问题包装成一个对象,
       该对象中包含了异常现象对应的所有信息
异常对象抛出throw
针对某种异常现象可以指定抛出何种异常,在抛出异常时,
使用throw指令抛出具体的异常对象
throw 异常对象
抛出异常对象后,JVM将检测抛出的异常是否被处理,
此时可以通过下列两种形式来进行处理
对抛出的异常进行捕获
对抛出的异常不进行捕获,继续向上层调用者抛出


方法抛出异常throws
方法抛出异常是对方法的定义进行声明,明确方法执行过程中可能引发异常现象,
提醒调用者要对其进行处理
方法抛出异常要求调用者强制处理,除非抛出的异常为RuntimeException的子类
,否则必须对其进行处理。可以利用此特点,设计自定义异常类的对象


异常现象在编程过程中及其常见,在开发过程中,如果调用了可能引发异常的语句,
最常见的处理方案是针对对应的语句使用tcf结构对其进行处理,
并打印错误的异常堆栈信息,然后针对错误信息进行分析,制作对应的异常处理方案
在开发调试期间,
打印的异常信息可以作为编程人员的参考性信息,
但是在实际运行期间,此类信息必须要屏蔽掉,以更友好的形式展示给最终用户




是可以的。
Java的异常处理是通过5个关键字来实现的:try,catch,throw,throws,finally。
throw和throws都是抛出异常的,但塔门有区别:
throws关键字通常被应用在声明方法时,用来指定可能抛出的异常。多个异常可以使用逗号隔开。
throw关键字通常用在方法体中,并且抛出一个异常对象。程序在执行到throw语句时立即停止,它后面的语句都不执行。通过throw抛出异常后,如果想在上一级代码中来捕获并处理异常
,则需要在抛出异常的方法中使用throws关键字在方法声明中指明要跑出的异常;
如果要捕捉throw抛出的异常,则必须使用try—catch语句。可见,throw可以主动抛出异常,也就是可以在try中抛出异常。
===================================================================================================================================================================
 6. 异常的复习
   |-- 编译时期异常
     |-- 调用了抛出异常的方法,调用者,没有处理这个异常,就出现编译失败
     |-- 方法内部抛出异常,必须要在方法定义上声明出来 throw方法里面,后面写异常对象
         throws写在方法的声明上,后面写的是异常类
     |-- 对于调用者,可以选择,继续抛出(写在方法声明上),使用try...catch处理掉


      public static void main(String[] args){
          method(1);
      }
     public static void method(int x)throws Exception{
       if(x==1){
         sop("打印一个随便的内容");
       }else{
          throw new Exception("");
       }
     }


          public static void method(int x){
     try{
       throw new Exception("");
     }fianlly{
        sop("----------");
     }
 }




   |-- 运行时期异常
      |-- RuntimeException类,和它的所有子类,都属于运行时期异常
      |-- 一旦程序抛出了运行时期异常,java的工程师(Oracle),希望程序停止运行,修改源码
          这个异常,是不允许发生的,一旦发生,程序必须停止,程序人员修改源代码  
  Person p = new Person();
  p.age = 10;


  p = null;
  p.age = 20;//空指针异常 NullPointerException
  p.name = "ss";
  p.address = "北京市";


  int[] arr = {3,4,5};
  arr[6] = 10;//ArrayIndexOutOfBoundsExcepction
  sop(arr[6]);
     |-- 在方法内部,抛出运行时期异常 ,方法声明不需要写throws,调用者也不需要处理,不能处理,改代码