Java 基础 - Java核心类库 - 异常机制&File类
Java 基础 - Java核心类库 - 异常机制&File类
目录
1 异常机制
1.1 异常机制的概念
异常就是"不正常"的含义,在Java语言中主要指程序执行中发生的不正常情况
1.2 Throwable 异常类
java.lang.Throwable类是Java语言中错误(Error)和异常(Exception)的超类
1.2.1 Error 和 Exception 的区别
- Error类主要用于描述Java虚拟机无法解决的严重错误,通常无法编码解决,如:JVM挂掉了等
- Exception类主要用于描述因编程错误或偶然外在因素导致的轻微错误,通常可以编码解决, 如:0作为除数等
1.2.2 异常的分类
java.lang.Exception类是所有异常的超类,主要分为以下两种:
- RuntimeException - 运行时异常,也叫作非检测性异常
- IOException和其它异常 - 其它异常,也叫作检测性异常,所谓检测性异常就是指在编译阶段都能 被编译器检测出来的异常
RuntimeException类(运行时异常)的主要子类:
- ArithmeticException类 - 算术异常
- ArrayIndexOutOfBoundsException类 - 数组下标越界异常
- NullPointerException - 空指针异常
- ClassCastException - 类型转换异常
- NumberFormatException - 数字格式异常
默认处理异常的方式
- 当程序执行过程中发生异常但又没有手动处理时,则由Java虚拟机采用默认方式处理异常,而默认 处理方式就是:打印异常的名称、异常发生的原因、异常发生的位置以及终止程序
如何避免异常的产生
- 在以后的开发中尽量使用if条件判断来避免异常的发生
- 但是过多的if条件判断会导致程序的代码加长、臃肿,可读性差
1.2.3 异常的捕获
格式:
try {
编写可能发生异常的代码;
}
catch(异常类型 引用变量名) {
编写针对该类异常的处理代码;
}
...
finally {
编写无论是否发生异常都要执行的代码;
}
异常捕获的注意事项:
- 当需要编写多个catch分支时,切记小类型应该放在大类型的前面
- 手动处理异常和没有处理异常的区别在于代码是否可以继续执行下去
try{
代码发生异常
}
catch(){
e.printStackTrace();
retrun 1;
}
finally{
retrun 2;
}
发生异常后返回2并结束程序,不会再返回1
1.2.4 异常的抛出
异常抛出的概念:
- 在某些特殊情况下有些异常不能处理或者不便于处理时,就可以将该异常转移给该方法的调用者, 这种方法就叫异常的抛出
- 当方法执行时出现异常,则底层生成一个异常类对象抛出,此时异常代 码后续的代码就不再执行(抛出方式在产生异常后后续代码不再执行)
- 如果异常发生在创建对象过程给属性赋值的过程中,如果处理异常的方式为抛出,则对象不会创建,该变量为null,如果处理异常的方式为try catch 处理,则对象会新建成功,非法的属性值不会赋值成功使用其数据类型的默认值
异常抛出的语法格式:
访问权限 返回值类型 方法名称(形参列表) throws 异常类型1,异常类型2,...{ 方法体; }
如: public void show() throws IOException{}
方法重写原则:
- 要求方法名相同、参数列表相同以及返回值类型相同,从jdk1.5开始支持返回子类类型
- 要求方法的访问权限不能变小,可以相同或者变大
- 要求方法不能抛出更大的异常
子类重写方法时异常的处理方式:
- 子类重写的方法不能抛出更大的异常也不能抛出平级不一样的异常,但可以抛出一样的异常或更小的异常以及不抛出异常
异常的抛出与捕获如何选择?
- 若父类中被重写的方法没有抛出异常时,则子类中重写的方法只能进行异常的捕获处理(子类不能抛出更大的异常)
- 若一个方法内部又以递进方式分别调用了好几个其它方法,则建议这些方法内可以使用抛出 的方法处理到最后一层进行捕获方式处理
1.2.5 自定义异常
为什么需要自定义异常
- 当需要在程序中表达年龄不合理的情况时,而Java官方又没有提供这种针对性的异常,此时就需要 程序员自定义异常加以描述
自定义异常的实现流程
- 自定义xxxException异常类继承Exception类或者其子类
- 提高序列化版本号和两个版本的构造方法,一个是无参构造方法,另外一个是字符串作为参数的构造方法
- 在业务代码中进行逻辑判断,若有异常则抛出自定义异常类(throw new xxxExceprion("错误信息"))
- 将该异常抛给方法的调用者或者捕捉处理
public void xxx() thorws xxxException {}
或
public void xxx() {
try{
thorw new xxxException("错误信息");
}
catch (xxxException e){
e.printStackTrace();
}
}
1.2.6 异常机制的优点
- Java采用的异常处理机制是将异常处理的程序代码集中在一起,与正常的程序代码分开,使得程序 简洁、优雅,并易于维护
2 File 类
2.1 基本概念
java.io.File类主要用于描述文件或目录路径的抽象表示信息,可以获取文件或目录的特征信息, 如:大小等
2.2 File 类的常用方法
2.2.1 File 类构造放方法
| 方法 | 说明 |
|---|---|
| File(String pathname) | 根据参数指定的路径名来构造对象 |
| File(String parent, String child) | 根据参数指定的父路径和子路径信息构造对象(将完整的路径拆分为父子路径) |
| File(File parent, String child) | 根据参数指定的父抽象路径和子路径信息构造对象 |
2.2.2 File 类文件基本属性操作
| 方法 | 说明 |
|---|---|
| String getName() | 用于获取文件的名称 |
| long length() | 返回由此抽象路径名表示的文件的长度 |
| long lastModified() | 用于获取文件的最后一次修改时间 |
| String getAbsolutePath() | 用于获取绝对路径信息 |
long lastModified() 该方法返回值为long 类型的毫秒数距离1970.1.1
//1. Date 类 和 Instant 的有参构造类创建对象
//2. 使用SimpleDateFormat 类或DateTimeFormatter 类用来转换格式
2.2.3 File 类文件管理操作
| 方法 | 说明 |
|---|---|
| boolean delete() | 用于删除文件,当删除目录时要求是空目录 |
| boolean createNewFile() | 用于创建新的空文件 |
| boolean isFile() | 判断是否为文件 |
2.2.4 File 类目录管理操作
| 方法 | 说明 |
|---|---|
| boolean isDirectory() | 判断是否为目录 |
| boolean mkdir() | 用于创建目录 |
| boolean mkdirs() | 用于创建多级目录 |
| File[] listFiles() | 获取该目录下的所有内容 |
| File[] listFiles(FileFilter filter) | 获取目录下满足筛选器的所有内容 |
File[] listFiles(FileFilter filter) 使用
FileFilter filter = (File file) -> {return file.getName.endsWith("xxx");};

浙公网安备 33010602011771号