「JavaDay19」异常与文件

JavaDay19 异常与文件

https://github.com/Philbenzy/Java-question-100/tree/main/day19
(1)异常

(2)File类

1-异常

(1)异常体系

  • Throwable:异常的顶层类
    • Error:严重错误,不进行处理
    • Exception:
      • RuntimeException:运行时期出现的异常,是程序不严谨造成的,可以不处理,也可以处理
      • 非RuntimeException:编译时期出现的异常,必须对问题进行处理,要么抛出,要么使用try-catch进行处理

(2)异常的处理方式

  • JVM的默认处理方式,意味着将出现的问题抛出给了虚拟机
  • 调用者使用try-catch对异常进行处理

(3)编译时期|运行时期异常的区别

  • 编译时期:编译时期出现的异常被归为「非RuntimeException类」,必须要进行处理,处理方式有两种,要么使用throws继续抛出,要么使用try-catch进行处理。
  • 运行时期:运行时期出现的异常被归为「RuntimeException类」,可以不处理。

(4)异常的try-catch-finally处理方式

  • 单个异常处理方式1:
try{
	...;
}catch(异常名称 变量名称){
	针对问题的处理;
}finally{
	释放资源;
}
  • 单个异常处理方式2:
try{
     
	...;
}catch(异常名1 |异常名2|异常名3 变量){
     
	...;
}
// 这样进行处理异常时,如果在try中出现了多个异常,那么在catch中只会处理一个
// 异常之间应该改是平级的关系
  • 多个异常出现时的处理方式1:
// 写多个try-catch
try{
     
	...;
}catch(异常名称 变量名){
     
	...;
}catch(异常名称 变量名){
     
	...;
}

注意:如果捕获的异常是平级关系,那么顺序不重要,但是如果是父子级别类型的异常,父应该出现在最后

(5)throw与throws关键字

throw:

  • 声明在方法体内,使用new关键字创建异常对象
  • 表示抛出异常,可以得到一个实体的异常对象

throws:

  • 声明在方法名称上,表示一种抛出异常的可能性,不一定会出现
  • 后面可以接多个类型异常,异常名称使用逗号隔开
  • 表示向外抛出异常,由方法的调用者处理

(6)finally关键字

finally关键字用于最后的释放资源,被finally修饰的语句一定会执行,但是如果在执行到了finally之间JVM退出了,那么就不能继续执行了;

(7)final、finally、finalize区别

  • final关键字用于修饰成员变量、方法、类
    • 成员变量:变为常量,不可被重新赋值
    • 方法:不可被子类重写
    • 类:不能被继承
  • finally表示最终的意思,属于异常处理的最后一步,用来释放资源
    • 如果catch里有return语句,那么finally里面的代码还会执行吗?例子如下:
public class FinallyDemo2 {
     
   public static void main(String[] args) {
     
      System.out.println(getInt());
   }

   public static int getInt() {
     
      int a = 10;
      try {
     
         System.out.println(a / 0);
         a = 20;
      } catch (ArithmeticException e) {
     
         a = 30;
         return a;
         /*
          * return a在程序执行到这一步的时候,这里不是return a而是return 30;这个返回路径就形成了。
          * 但是呢,它发现后面还有finally,所以继续执行finally的内容,a=40
          * 再次回到以前的返回路径,继续走return 30;
          */
      } finally {
     
         a = 40;
         return a;//如果这样结果就是40了。
      }
      // return a;
   }
}
  • finalize是Object类的一个方法,用于垃圾回收

(8)自定义异常

如果要自定义异常,那么就需要让这个类继承

  • Exception
  • RuntimeException

(9)异常与继承

  • 父类抛出了异常,那么继承父类的子类抛出的异常 >= 父类的异常,子类不能抛出父类没有的异常
  • 父类如果没有异常抛出,那么子类也不能抛出异常,如果还想处理只能使用try-catch-finally处理

2-File类

(1)File类的构造方法

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

(2)File类基本功能

  • 创建功能:public boolean createNewFile():创建文件 如果存在这样的文件,就不创建了
  • 删除功能:public boolean delete():删除不走回收站
  • 重命名功能:public boolean renameTo(File dest):可以做到改名与剪贴
  • 判断功能:
    • public boolean isDirectory():判断是否是目录
    • public boolean isFile():判断是否是文件
    • public boolean exists():判断是否存在
    • public boolean canRead():判断是否可读
    • public boolean canWrite():判断是否可写
    • public boolean isHidden():判断是否隐藏
  • 获取功能
    • public String getAbsolutePath():获取绝对路径
    • public String getPath():获取相对路径
    • public String getName():获取名称
    • public long length():获取长度。字节数
    • public long lastModified():获取最后一次的修改时间,毫秒值
  • 高级获取功能
  • 过滤器功能
    • public String[] list():获取指定目录下的所有文件或者文件夹的名称数组
    • public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组

(3)案例演示

  • 输出指定目录下的指定后缀名文件
    • 获取-遍历-输出:案例演示「GetFilesName.java」
    • 使用FilenameFilter()得到:案例演示:「GetFilesName2.java」

你可能感兴趣的:(Java基础,java,编程基础)