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字符串转换为数字异常类
SecurityExceptionApplet试图执行浏览器的安全设置不允许的动作
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:抛出的一个异常对象
  在语句体中抛出的,由语句体进行处理
  它表示抛出异常的肯定性
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值