Java异常简介

阻止当前方法或作用域,称之为异常

RuntimeException会由java虚拟自动抛出,并自动捕获,运行时异常的出现,绝大部分情况下说明了代码本身有问题,要从逻辑上去改进代码

检查异常可能是:文件不存在、连接错误

这种异常需要手动的添加捕获以及处理语句

 

 

处理异常

try-catch以及try-catch-finally

try{

              //一些会抛出异常的方法

}catch(Exception e){

              //处理该异常的代码块

}

 

如果try抛出异常将会发生什么呢?

首先,抛出异常的方法会终止执行

然后,程序的控制权将被交给catch块中的异常处理程序

 

如果try会抛出很多种类型的异常,该怎么办?

如果所有的异常都使用同一个catch块去处理,那么这个处理就会变的含糊不清,其实就相当于没有处理

这时候就要用到多重catch块语法

编写多重catch语句块注意事项

顺序问题

一定要按照先小后大,也就是先子类,后父类的顺序来编写

 

try-catch语句块处理完异常之后,还需要进行一些善后工作,比如说关闭连接,关闭一些已经打开的文件

这时候就要用finally语句块来进行善后工作

finally语句块是在try块和catch块中的return语句执行完之后,返回到调用者之前去执行的

 

如果try-catch-finally语句块之内没有任何的return语句,则会调用这三个语句块之外的return语句

 

实际应用中的经验与总结

1.处理运行时异常时,采用逻辑去合理规避同时辅助try-catch处理

2.在多重catch块后面,可以加一个catchException)来处理可能会被遗漏的异常

3.对于不确定的代码,也可以加上try-catch,处理潜在的异常

4.尽量去处理异常,切忌只是简单的调用printStackTrace()去打印输出

5.具体如何处理异常,要根据不同的业务需求和异常类型去决定

6.尽量添加finally语句块去释放占用的资源,尤其是在有网络连接和连接数据库的情况下

 

 

1.List<String> names = Arrays.asList(strs);
使用Arrays.asList方法转换的集合不能使用其修改方法
如:add,remove,clear
上面方法会抛出UnsupportOperationException异常


异常
分为两种:
Error和Exception都继承自Throwable

Error:
严重的系统错误,不需要我们处理
OutOfMemoryError:内存溢出
StackOverFlowError:栈溢出


Exception:
分为以下两种:
java.lang.RuntimeException 运行时异常
    java.lang.NullPointerException    空指针异常,当对象为null时,对其操作发生的异常
    java.lang.ArithmeticException 数学运算异常
    java.lang.ClassCastException 类转换异常
    java.lang.NumberFormatException 数字格式化异常
    java.lang.ArrayIndexOutOfBoundsException 数组下标越界
    java.lang.StringIndexOutOfBoundsException 字符串下标越界


checkedException 检查时异常
    ClassNotFoundException 类找不到异常
    IOException io流异常
    FileNotFoundException
    SqlExceptoin

系统报错的格式:

异常的类型:异常的描述
    异常的定位
如:
    Exception in thread "main" java.lang.ArithmeticException: / by zero
    at com.woniu.exceptionTest.ExceptionTest.main(ExceptionTest.java:20)

处理异常的方式:
一、使用关键字throws 异常名抛出异常
    方法名() throws ClassNotFoundException

    调用此方法的地方需要二次处理
    以此类推,可以选择继续抛或者处理
二、使用try catch关键字捕获异常
    try {
        test();//调用抛出异常的方法
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
catch的异常可以是抛出的异常,也可以是它的父类
异常处理后,下面的代码可以接着继续运行

可以通过Exception捕获异常
catch多个异常时,异常的范围由小到大排列,否则报错
catch多个异常简写方式:
        try {
            test();
        } catch (ArithmeticException | ClassNotFoundException e) {
            e.printStackTrace();
        }


finally只能跟到捕获异常的最后位置
try{

}catch(Exception e){

}finally{
 //除了System.exit(0);外一定会执行到这里    
}


catch可以省略
try{

}finally{
 
}

三、主动抛出异常
throw new 异常名称

    public static void divide(int a,int b) {
        if (b==0) {
            throw new ArithmeticException("除数为0");
        } else {
            System.out.println("商为:"+a/b);
        }
    }


自定义异常:
1.创建一个自定义异常类继承Exception或者具体的系统异常类
2.通过构造方法传入自定义的异常信息
3.使用throw new 自定义异常主动抛出

File

1.实例化一个文件对象
File file = new File("");//参数为路径或文件详细地址
file.exists();//判断文件是否存在
file.mkdir();//创建文件夹,directory
file.createNewFile();//创建文件

RandomAccessFile是Java输入/输出流体系中功能最丰富的文件内容访问类
void seek(long pos):将文件记录指针定位到pos位置

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值