当前位置:网站首页 > Java基础 > 正文

java基础第七章异常



java基础第七章异常# 第七章 异常、断言和日志
7.1处理错误
如果由于错误而使得某些操作没有完成,
程序应该返回到一种安全的状态,并能够让用户执行其他指令
或者,允许用户保存所有工作结果,以妥善的方式终止程序

需要考虑的错误:
用户输入错误
设备错误(硬件)
物理限制(剩余空间不足)
代码错误

7.1.1异常分类
所有的异常都由Throwable继承而来,下一层分解为Error和Exception
Error类是Java运行时系统内部错误和资源耗尽错误,一般无能为力
Exception类分为IOException和RuntimeException,后者属于编程错误

RuntimeException一般包括
错误的强制类型转换
数组方位越界
访问null指针

IOException一般包括
试图打开一个不存在的文件
试图超越文件末尾继续读取数据
查找不存在的Class对象

派生于Error类和RuntimeException类的所有异常称为非检查型异常,其他的称为检查型异常
编译器将检测你是否为所有的检查型异常提供了异常处理器

7.1.2声明检查型异常
```
public FileInputSream(String name) throws FIleNotFindException
```
这个声明表示这个构造器将根据给定的String参数产生一个FileInputStream对象,但也有可能出错而抛出一个FileNotFoundException异常。

下面四种情况会抛出异常
1. 调用了一个抛出检查型异常的方法,例如FileInputStream构造器
2. 检测到一个错误,并利用throw语句抛出检查型异常
3. 程序出现错误,例如a[-1]会抛出一个非检查型异常
4. Java虚拟机或运行时库出现错误

若在子类中覆盖超类一个方法,子类方法声明的检查性异常不能比超类的更通用,只能抛出更特定的。若超类未抛出,子类也不能抛出。
7.1.3如何抛出异常
```
throw new EOFException()//输入过程意外遇到了EOF
```
7.1.4创建异常类
自定义类一般包含两个构造器,一个是默认的,一个是包含详细信息的构造器
```
class FileFormatException extends IOException
{
    public FileFormatException(){}
    public FileFormatException(String gripe){
        super(gripe)
    }
}
String readData(BufferedReader in) throws FileFormatException
{
    ...
    while(...)
    {
        if(ch==-1)//EOF encountered
        {

        }
        if(n<len)
        {
            throw new FileFormatException;
        }
    }
}
```
7.2 捕获异常
```
try{
    ...
    ...
}
catch(ExceptionType e)
{
    ...
}
```
如果try语句块中任何代码抛出了catch子句中指定的一个异常类
1. 语句将跳过说剩余的try语句
2. 执行catch中的语句

如果try没有抛出异常,程序将跳过catch
如果抛出catch未列出的类型,方法将立即退出

如果编写一个方法覆盖超类的方法,超类没有抛出异常,你就必须捕获代码中每一个检查型异常。不允许在子类的throw里抛出超类未列出的异常类
7.2.2 捕获多个异常
```
try{
    ...
}
catch(IOException e)
{
    ...
}
catch(FileNotFoundException e)
{
    ...
}
catch(ExceptionTypeA|ExceptionTypeB e)
{
    ...
}
```
e为final变量,e.getMessage();获得异常详细信息,e.getClass().getName();获得异常类型
7.2.4 finally子句
不管是否有异常被捕获,finally子句都会执行
```
var in=new FileInputStream(...);
try{
    //1
    //code might throw Exception
    //2
}
catch(IOException e)
{
    //3
    //show error message
    //4
}
finally
{
    //5
    in.close();
}
//6
```
上述程序会有3种执行情况,
1. 代码没有抛出异常,1256
2. 代码抛出一个异常并被catch捕获 如果catch没有抛出异常13456,如果catch抛出异常 135
3. 代码抛出异常且未被捕获,15

版权声明


相关文章:

  • java基础编程100例pdf2024-10-18 20:02:06
  • 基础不好可以自学java吗2024-10-18 20:02:06
  • java 开发基础教程 pdf2024-10-18 20:02:06
  • java基础函数代码在哪里找2024-10-18 20:02:06
  • java基础做胎教2024-10-18 20:02:06
  • java程序设置基础第5版2024-10-18 20:02:06
  • Java基础面试题软件2024-10-18 20:02:06
  • java注解开发基础2024-10-18 20:02:06
  • java并发基础教程2024-10-18 20:02:06
  • java基础重要么2024-10-18 20:02:06