异常机制和File类

异常

1、异常就是"不正常"的含义,在Java语言中主要指程序执行中发生的不正常情况。
2、java.lang.Throwable类是Java语言中错误(Error)和异常(Exception)的超类。其中Error类主要用于描述Java虚拟机无法解决的严重错误,通常无法编码解决,如:JVM挂掉了等。
3、其中Exception类主要用于描述因编程错误或偶然外在因素导致的轻微错误,通常可以编码解决,
如:0作为除数等。

异常的分类

1、java.lang.Exception类是所有异常的超类,主要分为以下两种:
RuntimeException - 运行时异常,也叫作非检测性异常
IOException和其它异常 - 其它异常,也叫作检测性异常,所谓检测性异常就是指在编译阶段都能
被编译器检测出来的异常。
2、其中RuntimeException类的主要子类:
ArithmeticException类 - 算术异常
ArrayIndexOutOfBoundsException类 - 数组下标越界异常
NullPointerException - 空指针异常
ClassCastException - 类型转换异常
NumberFormatException - 数字格式异常
3、注意:
当程序执行过程中发生异常但又没有手动处理时,则由Java虚拟机采用默认方式处理异常,而默认
处理方式就是:打印异常的名称、异常发生的原因、异常发生的位置以及终止程序。
在这里插入图片描述

异常的捕获

1、语法格式:
try {
编写可能发生异常的代码;
}catch(异常类型 引用变量名) {
编写针对该类异常的处理代码;
}finally {
编写无论是否发生异常都要执行的代码;
}
2、注意事项
a.当需要编写多个catch分支时,切记小类型应该放在大类型的前面;
b.懒人的写法:
catch(Exception e) {}
c.finally通常用于进行善后处理,如:关闭已经打开的文件等。
3、执行流程
try {
a;
b; - 可能发生异常的语句
c;
}catch(Exception ex) {
d;
}finally {
e;
}
当没有发生异常时的执行流程:a b c e;
当发生异常时的执行流程:a b d e;

手动处理异常和没有处理异常的区别:代码是否可以向下执行
笔试考点:

 	// 笔试考点
    public static int test() {
        try {
            int[] arr = new int[5];
            System.out.println(arr[5]);
            return 0;
        } catch (ArrayIndexOutOfBoundsException e) {
            e.printStackTrace();
            return 1;
        } finally {
            return 2; // 提交结束方法并返回数据,返回2
        }
    }

异常的抛出

1、在某些特殊情况下有些异常不能处理或者不便于处理时,就可以将该异常转移给该方法的调用者,
这种方法就叫异常的抛出。当方法执行时出现异常,则底层生成一个异常类对象抛出,此时异常代
码后续的代码就不再执行。
2、方法重写的原则
a.要求方法名相同、参数列表相同以及返回值类型相同,从jdk1.5开始支持返回子类类型;
b.要求方法的访问权限不能变小,可以相同或者变大;
c.要求方法不能抛出更大的或者是与其平行关系(可以抛出相同)的异常;
3、注意:
子类重写的方法不能抛出更大的异常、不能抛出平级不一样的异常,但可以抛出一样的异常、更小
的异常以及不抛出异常。
4、经验分享
a.若父类中被重写的方法没有抛出异常时,则子类中重写的方法只能进行异常的捕获处理。
b.若一个方法内部又以递进方式分别调用了好几个其它方法,则建议这些方法内可以使用抛出
的方法处理到最后一层进行捕获方式处理。

自定义异常

1、当需要在程序中表达年龄不合理的情况时,而Java官方又没有提供这种针对性的异常,此时就需要
程序员自定义异常加以描述。
2、实现流程
a.自定义xxxException异常类继承Exception类或者其子类。
b.提供两个版本的构造方法,一个是无参构造方法,另外一个是字符串作为参数的构造方法。
3、异常的产生
throw new 异常类型(实参);
如: throw new AgeException(“年龄不合理!!!”);

File类

方法声明功能介绍
File(String pathname)根据参数指定的路径名来构造对象
File(String parent, String child)根据参数指定的父路径和子路径信息构造对象
File(File parent, String child)根据参数指定的父抽象路径和子路径信息构造对象
boolean exists()测试此抽象路径名表示的文件或目录是否存在
String getName()用于获取文件的名称
long length()返回由此抽象路径名表示的文件的长度
long lastModified()用于获取文件的最后一次修改时间
String getAbsolutePath()用于获取绝对路径信息
boolean delete()用于删除文件,当删除目录时要求是空目录
boolean createNewFile()用于创建新的空文件
boolean mkdir()用于创建目录
boolean mkdirs()用于创建多级目录
File[] listFiles()获取该目录下的所有内容
boolean isFile()判断是否为文件
boolean isDirectory()判断是否为目录
File[] listFiles(FileFilter filter)获取目录下满足筛选器的所有内容
public class FileTest {
    public static void main(String[] args) {
        // 1、构造File类型的对象与d:/a.txt文件关联
        File file = new File("d:/a.txt");
        // 2、若文件存在则获取文件相关信息并打印然后删除
        if (file.exists()) {
            System.out.println("文件名:" + file.getName());
            System.out.println("文件长度:" + file.length());
            System.out.println("文件最后一次修改时间:" + file.lastModified());
            // 绝对路径: 主要指以根目录开始的路径信息,如:c:/  d:/   /..
            // 相对路径: 主要指以当前目录所在位置开始的路径信息,如:./(当前目录)  ../(当前目录的上级目录)   
            System.out.println("文件绝对路径信息:" + file.getAbsolutePath());
            file.delete();
        }else {
            // 3、若文件不存在则创建
            try {
                boolean newFile = file.createNewFile();
                if (newFile){
                    System.out.println("文件创建成功");
                }
            } catch (IOException e) {
                System.out.println("文件创建失败");
                e.printStackTrace();
            }
        }
        
        // 4、创建单级目录和删除目录
        File file1 = new File("d:/目录");
        if (file1.exists()) {
            System.out.println("目录的名称:" + file1.getName());
            System.out.println(file1.delete()? "目录删除成功" : "目录删除失败");
        } else {
            System.out.println(file1.mkdir()? "目录创建成功" : "目录创建失败");
        }

        // 5、创建多级目录
        File file2 = new File("d:/爷爷/爸爸/儿子");
        System.out.println(file2.mkdirs()? "创建多级目录成功" : "创建多级目录失败");
        
		// 6.实现目录中所有内容获取的同时进行过滤
        // 匿名内部类的语法格式:接口/父类类型 引用变量名 = new 接口/父类类型() { 方法的重写 };
        /*FileFilter fileFilter = new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                // 若文件名是以.avi为结尾,则返回true表示保留   否则返回false就是表示丢弃
                return pathname.getName().endsWith(".avi");
            }
        };*/
        // Lambda表达式的格式:(参数列表) -> {方法体}
        FileFilter fileFilter = (File pathname) -> {return pathname.getName().endsWith(".avi");};
        File[] filesArray2 = f3.listFiles(fileFilter);
        for (File tf : filesArray2) {
            System.out.println(tf);
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值