黑马程序员--异常

来源:互联网 发布:局域网添加网络打印机 编辑:程序博客网 时间:2024/06/04 23:34

------- android培训、java培训、期待与您交流! --------

1. 异常概述
 
 异常:程序中,在运行的时候出现的不正常现象。Java是面向对象的语言,异常也是一种对象,因此每次出现异常的时候,看到XXX.XXX.XXXException异常类,告诉你发生了什么情况 ArithmeticException 算术异常。异常类描述对象的
 
 
 
2. 异常继承体系
 
  java.lang.Throwable类,所有异常和错误的父类
 
     Error类
 
        所有错误的父类
 
     Exception类
 
        所有异常的父类
 
        RuntimeException
 
             NullPointerException
 
             ClassCastException
 
             IndexOutOfBoundsException
 
 错误,比较严重的问题,一旦出现了错误,程序根本不能运行,必须修改源代码。
 
 错误,相当于,非典,艾滋
 
 异常,比较轻微的问题,一旦出现了异常,程序可以处理掉异常,继续运行
 
 异常,相等于,感冒发烧流鼻涕
 
 
 
 Throwable类中的方法
 

 

 构造方法 空参数
 
 构造方法 Throwable(String message)异常信息
 
 
 
 String getMessage()返回异常信息的详细字符串
 
 String toString()返回异常信息的简短描述
 
 void printStackTrace()将异常信息直接输出在控制台
 

 
 
3. 异常的第一种处理方式
 
  try  catch 代码块处理
 
 标准格式:
 
     try{
 
      被检测的代码,可能出现异常的代码
 
     }catch(异常类 变量){
 
         异常的处理方式
 
         变量.调用Throwable类的三个方法
 
     }
 
 
 
4. 异常的第二种处理方式抛出异常
 
 如果程序运行的时候,由于用户或者调用非法传递参数,导致程序出现问题,假如调用者真的传递了非法的数据,需要手动抛出异常。在方法中,使用关键字throw 写异常对象,new 出来的.
 
 错误: 未报告的异常错误Exception;程序中,有异常没有处理
 
方法内部抛出异常,不处理这个异常,交给调用者处理,谁调用我这个函数,谁处理这个异常。必须在方法的声明上,声明出来,我这个方法有异常,谁调用谁处理。
 
在方法的定义上,使用throws关键字,把异常声明出来,告诉调用者,如果你调用处理我的异常  throws 异常类
 
 throw : 只能写在方法内部,后面必须写 new 异常()
 
 throws: 只能写在方法声明上,后面必须写 异常类
 
 
 
 
 
5. 编译时期异常和运行时期异常
 
  编译时期异常:调用了一个抛出异常的方法,不处理,编译失败
 
  运行时期异常:RuntimeException类,和他所有的子类都属于运行时期异常
 
  特点:如果方法内部用throw 抛出的是一个运行时期异常,此时方法声明上,不需要使用throws声明异常,调用者不需要处理这个异常,Java工程师们设计运行时异常的初衷,运行时期异常一旦发生,程序必须停下来修改源代码,运行时期异常,是不能发生的
 
   Person p = new Person();
 
   p.show();
 
   p =null;
 
   p.show();空指针异常
 
   int[] arr = {1,2,3};
 
   arr[10] = 100;
 
   if(arr[50] < arr[90])
 
 今后如果我们写一个程序让别人去用,如果别人乱传递参数导致程序后面的计算,无法运行,抛出运行时期异常,结束程序,要求用户传递参数必须合法!
 
   数组越界,字符串越界,空指针异常,类型转换异常
 
 
 
6. 自定义的异常
 
 Java原有异常体系中,很多的现象进行异常的封装,越界,类型转换,JDK中也有想不到的异常,所以自定义异常
 
  第一步,入伙  继承 Exception 或者继承RuntimeException
 
  第二步,传递异常信息,将异常信息传递给Exception的构造方法
 
  注意:异常必须是Exception或者RuntimeException的子类,具备可抛性
 
 
 
 
 
7. finally代码块
 
try{} catch(Exception e){} finally{}
 
try{} finally{}
 
finally代码块中的程序,必须要执行,不管程序有没有异常方法,finally中的程序必须执行
 
finally代码块,一般用于释放资源使用

public class Demo19 {public static void main(String[] args) {try{System.out.println(17/0);}catch(Exception e){//e.printStackTrace();System.out.println("程序错误,请修正!");}finally{System.out.println("这是finally代码块!");}}}


运行结果是:

程序错误,请修正!这是finally代码块!


 

 

8. final finally 和finalize的区别
 
final 修饰符,类,方法,变量
 
finally 代码块跟随异常处理,必须执行
 
finalize方法,收垃圾
 
 
 
 
 
9. 子类继承父类后的异常细节
 
子类继承后,重写父类的方法:
 
 父类的方法不抛出异常,子类的方法不能抛出异常。如果子类的重写方法,调用了一个抛出异常的方法,子类只能try catch处理异常
 
 如果父类的方法,抛出异常,子类的方法可抛可不抛,但是如果子类抛异常,抛出的异常不能大于父类方法抛出的异常
 
 方法中可以不可以,抛出多个异常,每个异常需要在方法声明上throws声明出来,调用者写多个catch处理
 
 多catch处理异常过程中,注意,最高的异常父类,写在最后

 

 

 

 

 

0 0