JAVA异常

1.异常: 异常是程序运行过程中出现的错误
    目前的主流编程语言如C++、C#、Ruby、Python等,大都提供了异常处理机制。增加了异常处理机制后的程序有更好的容错性,更加健壮
    Java语言语法体系是严密的,语法检查是严格的
    Java不仅在编译时能检查所有的语法错误
    而且在运行时能后捕获到所有的运行时错误
    Java把异常当作对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类。在Java API中已经定义了许多异常类,这些异常类分为两大类,错误Error和异常Exception
    Java异常结构层次图:

   

Java异常分为以下两类:
      1、Error
      2、Exception

1、Error(错误)-- Java.lang.Error是错误类
    指程序运行时遇到的硬件错误、操作系统的错误、其他软件错误或操作错误
    错误对于程序而言是致命的,将导致程序无法运行,而且程序本身不能处理错误,只能依靠外界干预,否则会一直处于非正常状态
    
2、Exception(异常)
    指在硬件和操作系统正常时,程序遇到的运行错。
    异常对于程序而言是非致命的,虽然异常会导致程序非正常终止,但Java的异常处理机制使程序自身能够捕获和处理异常,由异常处理代码调整程序运行方向,使程序仍可继续运行


2、Exception(异常)
    Java.lang.Exception是异常类,Exception对象是Java程序捕获和处理的对象。每一种异常对          
    应于Exception类的一个子类,异常对象中包含错误的位置和特征信息


 非运行异常—指由程序运行环境错误引发的异常,这类异常必须捕获并处理,即编译 时异常
Exception类和Error类都是Throwable类的子类

java.lang.ArithmeticException(算术异常)
java.lang.NullPointerException(空指针异常)
java.lang.ArrayIndexoutofBoundsException(数组越级异常)
java.lang.SecurityException(安全异常)
java.lang.NegativeArraySizeException (数组大小为负)
java.lang.ClassCastException(类转换异常)

ClassNotFoundException(类未找到异常)
CloneNotSupportException(不支持克隆异常)
IllegalAccessException(未发获取异常)
InterruptedException  (线程中断异常)
NoSuchMethodException(没有相应方法异常)
InstantiationException(实例化异常)

异常的捕获处理通过下面五个关键字实现 try – 表示试

试try代码块中的语句是否会产生异常

catch – 捕获,跟在try语句后,专门对try语句中抛出的异常进行处理

finally – 表示无论是否发生异常,finally语句必须执行
throw – 用来抛出一个异常
throws – 一般用在方法定义中,表示该方法会抛出异常
1.异常处理语句语法
try
{
      语句1                //存在潜在异常的代码
}
catch(异常类 异常对象1 e1)
{ // 用于捕获并处理指定类型的异常对象,参数是一个异常对象e1,
      其类型必须是Exception类及其子类。
   语句2       //捕获到异常并进行处理的代码
}
catch(异常类 异常对象2 e2)
{ // 用于捕获并处理指定类型的异常对象,参数是一个异常对象e2,
      其类型必须是Exception类及其子类。
   语句2       //捕获到异常并进行处理的代码
}

finally                      //子句可以省略
{
      语句3           //最后必须执行的代码,无论是否捕获到异常
}
2. try语句执行流程
    
2. try语句执行流程
    (1) 正常情况下(即没有产生异常时)
        
    (2) 捕获异常并处理
            catch子句说明:
     catch语句可以有多个,分别处理不同类的异常。
    (2) 捕获异常并处理




注意:多个catch子句需要按异常类从子类到父类的次序依次排列。

2. try语句执行流程
    (2) 捕获异常并处理
        如果所有catch子句都没有捕获e,则e将由Java虚拟机捕获并处理,导致程序运行终止,就像没有使用try语句。
因此,通常最后一个catch子句的异常类参数声明为Exception,这样能够保证捕获和处理所

有异常对象。

(3) 执行finally子句
   finally子句中的语句系列是最后必须执行的代码,无论是否产生异常。


3. 异常的抛出
任何Java代码都可以抛出异常,如:自己编写的代码、来自Java开发环境包中代码,或者Java运行时系统。无论是谁,都可以通过Java的throw语句抛出异常。从方法中抛出的任何异常都必须使用throws子句
1. throws抛出异常
    如果一个方法可能会出现异常,但没有能力处理这种异常,可以在方法声明处用throws子句来声明抛出异常
throws语句用在方法定义时声明该方法要抛出的异常类型,如果抛出的是Exception异常类型,则该方法被声明为抛出所有的异常。多个异常可使用逗号分割
    throws语句的语法格式为:
        
2. throw抛出异常
    throw总是出现在函数体中,用来抛出一个Throwable类型的异常。程序会在throw语句后立即终止,它后面的语句执行不到,然后在包含它的所有try块中(可能在上层调用函数中)从里向外寻找含有与其匹配的catch子句的try块
    例如:
    



























  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值