Java异常( Throwable)的处理以及常见的异常类列表

        异常指Java程序运行中遇到的非致命性错误,而不是编译时期的语法错误,比如0溢出、数组越界、文件找不到等。

        Java面向对象的方式来处理异常,异常也被看成对象,和一般对象也没有什么区别,但异常必须是Throwable的类及其子类所产生的对象的实例。它也像其他对象一样封装了数据和方法。

        Throwable对象在定义中包含一个字符串信息,而这个属性可以被所有的异常类继承,Java程序中,异常处理的机制为:抛出异常、捕捉异常。

当程序出现一些问题的,可以是严重问题,可以是一种异常,将这些通常为Throwable

 Throwable 类是 Java 语言中所有错误或异常的超类
  Throwable
  error
  exception
 
  举例:
   张三去山上旅行

   1)张三骑车去旅行,山路崩塌了,不能前行了----->不可抗力因素error: 属于严重问题   内存溢出了 (加载页面中大量图片的时候,程序会挂掉---使用第三方的框架去处理:ImageLoader)

   2)张三骑车去旅行,骑着发现轮胎没气了------->需要检查的问题。属于编译时期异常:只要出现的不是运行时期异常,统称为编译时期  日期的文本格式---解析    java.util.Date类型:ParseException:解析异常

   编译时期异常:开发者必须处理!

   3)骑着,山路有石子,他就非得往石子上骑,导致车胎没气了---->自己原因造成的,no zuo no die 属于运行时期异常:RuntimeException编译通过了,但是开发者代码不严谨(NullPointerExceptino等等...)

异常的处理分为两种:

  (1)try...catch...finally (标准格式) :捕获异常
  (2)throws ... 抛出异常
 
 变形格式...
                    (1)    try...catch...
                     (2)    try...catch...catch...
                     (3)    catch....
 

变形格式的第一种(1)    try...catch...

                try{

              一些代码
          try里面的代码越少越好
          代码包含了可能会出现问题的代码
               }catch(异常类 异常类对象){
                    try出现异常了,描述的异常刚好就是catch的异常类,就会执行catch里面代码
                      //处理异常 }

如何处理多个异常两个或两个以上的异常的时候怎么办?此时采用变形格式    (2)    try...catch...catch...
           try{
               可能出现问题的代码
               int[] arr = {1,2,3} ;
              Sop(arr[3]);
               int a = 10 ;
                   int b =0 ;
                Sop(a/b) ;

           }catch(异常类名1 对象名1){//异常处理
  
           }catch(异常类名2 对象名2(){//异常处理

                  }

try...catch...finally
  finally语句体是一定会执行的,除非是Jvm退出了 
 问题:如果catch里面有return 语句,finally中的代码还会执行,是在return语句之前执行还是return后执行?

答:finally中代码是一定会执行的,是在return前

程序示范如下:


public static void main(String[] args) {
System.out.println(getInt());
}


private static int getInt() {
int a ;
try {
a = 10 ;
System.out.println(a/0);
a = 20 ;
}catch(Exception e) {
a= 30 ;
return a ;
/**
* try的代码出现问题了,执行catch中的语句,30赋值a,
* return 30(已经形成了一个回路径)finally代码一定会执行(除非Jvm) a = 40 ,在fianlly外面
* 有return a: a记录回路径的那个a,返回30
*/
}finally {
//除非jvm退出了
a = 40 ;

}
return a;//30

}

异常中的注意事项:
 * 子类继承父类的时候的注意事项 
 * 1)子类重写父类的方法的时候,子类的方法的抛出的异常必须要么是父类的方法异常一样,要么是父类方法异常的子类
 * 2)子类重写父类方法的时候,如果父类中的这个方法没有抛出异常,那么子类重写的这个方法也不能抛出异常,只能try...catch
 */

常见的异常类列表
异常类名称 异常原因
ArithmeticException 数学错误,被0除
ArraylndexOutOfBoundsException 数组下标越界
ArrayStoreException 程序试图在数组中存储错误类型的数据
ClassCastException 类型强制转换异常
IndexOutOfBounchsException 当某对象的索引超出范围时抛出异常
NegativeArraySizeException 建立元素个数为负的数组异常类
NullPointException 空指针异常
NumberFormatException 字符串转换为数字异常类
SecurityException Applet试图执行浏览器的安全设置不允许的动作
StringIndexOutBounchsException 程序试图访问字符串中字符不存在的字符位置
OutOfMemoryException 分配给新对象的内存太小
SockedException 不能正常完成Socked操作
ProtocolException 网络协议有错误
ClassNotFoundException 未找到相应的异常类
EOFException 文件结束异常
FileNotFoundException 文件未找到异常
illegalAccessException 访问某类被拒绝时抛出的异常
InstantiationException

试图通过new Instance()方法创建一个抽象

类或抽象接口的实例时出现的异常

IOException 输入、输出异常
NoSuchFileException 字段未找到异常
NoSuchMethodException 方法未找到异常
SQLException 操作数据库异常
throw:表示也是抛出异常,抛出的一个异常对象 (throw new 异常类名() :匿名对象的方式)
throws和throw的区别?
  throws:也是表示抛出异常,它后面跟的异常类名,并且可以多个异常类名中间逗号开
  举例:public void show() throws IoException,ClassNotFoundException{...}
在方法上抛出,由调用者处理
  它表示抛出异常的可能性
  throw:抛出的一个异常对象
  在语句体中抛出的,由语句体进行处理
  它表示抛出异常的肯定性
 

你可能感兴趣的:(Java异常( Throwable)的处理以及常见的异常类列表)