Java异常与文件总结

异常与文件小结

一.异常:

1.概述与分类:

1.1.概述:

 所谓异常就是指程序运行过程中出现的错误,异常的所有对象都是派生于Throwable类的实例。

1.2.继承体系:

在这里插入图片描述

1.3.分类:

RuntimeException:

1.错误的强制类型转换
2.数组访问越界
3.访问null指针

不是派生于RuntimeException的异常包括:

1.试图超越文件末尾继续读取数据
2.试图打开一个不存在的文件
3.试图给根据给定的字符串查找class对象,而这个字符串表示的类并不存在

2.抛出异常:

2.1步骤总结:

1.找到合适的异常类
2.创建这个类的一个对象
3.将对象抛出

一旦方法抛出了异常,该方法就不会返回到调用者,即不用担心建立一个默认的返回值或错误码
举个例子:

public class Test2 {
    public static void main(String[] args) {
        new Test2().test(1,0);
    }
    //假设这个方法中,处理不了这个异常,方法上抛出异常
    public void test(int a,int b) throws ArithmeticException{
        if(b==0){
            throw new ArithmeticException();//主动的抛出异常,一般在方法中使用
        }
    }
}

2.2.创建异常类:

 代码可能会遇到任何标准异常都无法描述清楚的问题,所以我们可以创建自己的异常类,只需要定义一个派生于Exception的类,或其子类
举个例子:

//自定义异常类
public class MyException extends Exception {

    //传递数字>10
    private int datail;

    public MyException(){

    }
    public MyException(int a){
        this.datail = a;
    }

    //toString : 异常的打印信息

    @Override
    public String toString() {
        return "MyException{" +
                "datail=" + datail +
                '}';
    }
}

注意:
如果调用了一个抛出检查型异常的方法,就必须处理这个异常,或者继续传递这个异常。注意:传播异常必须在方法的首部添加一个throws说明符,提醒调用者这个方法可能会抛出异常。
Trowable中的常见方法:

Throwable() :构造一个新的Throwable对象,但没有详细的描述信息
Throwable(String message) :构造一个新的Throwable对象,带有指定的详细描述信息
String getMessage():获得Throwable对象的详细描述信息

3. 异常的捕获:

3.1.捕获异常:

 想要捕获一个异常,需要设置try…catch语句

基本格式:

try
{
	//监视代码的执行过程,若有异常则会跳转至catch语句
	//若无异常,则执行完改代码块后,会跳过catch
}
catch(报错原因)
{
	//出现异常直接跳转至改代码块,将异常处理或者抛出
}

3.2.捕获多个异常

 在一个try语句中,可以捕获多个异常类型,需要对不同的类型做出不同的处理,可以使用多个catch语句,且当捕获异常类型彼此之间不存在子类关系
语法:

try{
// 可能会出现问题的语句
}catch(报错原因){
//catch中要将小的异常放在前面,大的异常放在后面,否则大的会将所有子类全部接受,子类的存在就毫无意义
}catch(报错原因){

}

3.3.再次抛出异常与异常链

 当希望改变异常类型的时候,可以在catch子句中抛出一个异常。

3.4.finally子句

 当代码中抛出一个异常时,会停止处理这个方法中剩余的代码,并退出这个方法。但若这个方法已经获得了一些只有自己知道的资源,且这个资源必须得到处理,如果退出就会产生一些问题。所以使用finally子句,无论是否有异常被捕获,都会执行finally子句中的代码。
finally一般用于释放资源
举个例子:

public static void main(String[] args) {
        int a = 1;
        int b = 1;

        //注意捕获异常时,要从小到大
        try {   //  try监控区域
            System.out.println(a/b);
        }catch(ArithmeticException e){  //  catch捕获异常 (捕获异常类型)
            System.out.println("程序出现异常,变量b不能为0");
        }finally{  //处理善后工作,处理IO流,资源等,可关闭。此处可不要,
            System.out.println("finally");
        }

    }

注意:

1、try语句后面的catch,finally可以没有,但不能同时没有。
当没有catch语句的时候,,程序会先执行完try中所有的语句,直至抛出异常位置,跳过try语句语块中剩余的代码,然后执行finally子句中的语句,并将异常抛出给方法的调用者

2.当catch与finally同时存在的时候:finally必须使用在所有catch的最后位置,常用来处理一些后续的工作

4.补充:

4.1.throw与throws的区别:

throw : 在功能方法内部出现某种情况,程序不能继续运行,需要进行跳转时,用throw将对象抛出一个具体的异常类型

1.在方法体类,跟异常对象名
2.只能抛出一个对象名
3.表示抛出异常,由方法体内的语句处理

throws : 用来声明一个方法可能产生的所有异常,不做任何异常处理而是将异常往上传,抛给调用者

1.方法声明后,跟在异常类名
2.跟多个异常类名时,用逗号隔开
3.抛出异常,由该方法的调用者来处理

throws表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某种异常

4.2.在子类继承父类的时候:

1.出现异常:子类的异常小于等于父类
2.被重写的方法没有异常抛出,那么子类的方法绝不可以抛出异常,如果子类的方法内有异常发生,那么子类只能try,不能throws.

一般就是捕获知道该如何处理的异常,继续传播不知道怎么处理的异常

4.3 finally与return:

1.即使在finally执行之前已经return返回值,finally也会执行。

2.当try或catch中return已经返回值,会将值保存在局部变量中,再去执行finally中的语句,最后返回局部变量中的值。

3.当try、catch中有return语句,且finally中也有return语句时:先执行try,catch中return语句,最后finally中return会覆盖局部变量中try或catch的return值。

二.File类:

1.构造方法:

File (String pathname):根据一个路径得到file对象
File (String parent,String child):根据一个目录和一个子目录/文件得到file对象
File (File parent,String child):根据一个父类file对象,和一个子文件/目录得到File对象

2.创建功能:

public boolean creatNewFile()//创建文件,如果文件存在就不创建;文件创建成功则返回true,否则false
public boolean mkdir()//创建文件夹,如果存在就不创建,返回类型同上
public boolean mkdirs()//创建文件夹,如果父文件夹不存在,则创建

在创建文件与文件夹时,如果忘记添加盘符路径,则默认在该项目路径下

3.文件的重命名和删除:

public boolean renameTo(File dest)//文件重命名为指定的文件路径
public boolean delect()//删除文件或者文件夹

在重命名时,若路径相同,则是改名,否则是改名并剪切;
在文件或者文件夹删除时,该文件内不能包含文件或者文件夹

4.文件的判断:

public boolean isDirectory()//判断是否是目录
public boolean isFile()//判断是否是文件
public boolean exists()//判断是否存在
public boolean canRead()//判断是否可读
public boolean canWrite()//判断是否可写
public boolean Hidden()//判断是否隐藏

5.获取功能:

public String getAbsolutePath()//获取绝对路径
public String getPath()//获取路径,构造方法里传入路径
public String getName()//获取名称,文件或者文件夹的名称
public long length()//获取长度或者字节数
public long lastModified()//获取最后一次修改时间
public String[] list()//获取指定目录下所有文件或者文件夹的名称数组
public File[] listFiles()//获取指定名录下所有文件或者文件夹的File数组

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值