异常机制
1.异常就是Java程序在运行过程中出现的错误:
2.异常的继承体系:
异常的基类: Throwable
严重问题: Error:不予处理,因为这种问题一般是很严重的问题,比如: 内存溢出
非严重问题: Exception
编译时异常: 非RuntimeException
运行时异常: RuntimeException
3.运行期异常的处理方式:
(1)默认处理:是抛给了JVM去处理,JVM的默认处理方式就是打印异常的堆栈信息,然后退出虚拟机;
(2)自己捕获处理:如果认为JVM处理的不好,自己去捕获处理;使用关键字:
try{
有可能出现的异常代码,一旦出现异常,就会执行catch里面的代码
}catch(类型){
1.可以并列写多个,捕获不同的异常;
2.尽量明确;
3.尽量父类放在最后,平级无所谓。
}
4.在catch后面加了fially{},代码仍然执行,一般情况里面加一些善后工作。
(释放资源)
eg:fianlly{
scanner.close(); //释放资源
}
5.编译期异常:
非RuntimeException及其子类,必须处理,不处理程序不运行;
处理方式:
1.抛给调用者处理,谁调用谁处理——>甩锅;(ctrl+Alt+T)
2.捕获处理:try{}catch()
6.throws和throw区别:
throws用在方法声明上;抛出多个异常类型;抛出的只是一种发生的可能性,
并不会一定发挥。
throw用在方法内部;只能抛出一个异常类型;抛出的是一个具体的异常对象,
一旦抛出,说明发生了这个异常。
7.finally:
特点:
被finally控制的语句体一定会执行(前提 jvm没有停止);
特殊情况:在执行到finally之前jvm退出了(比如System.exit(0));
作用:
用于释放资源,在IO流操作和数据库操作中会见到;
区别如下:
final: 是一个状态修饰符, 可以用来修饰类 , 变量 , 成员方法.;
被修饰的类不能被子类继承;
修饰的变量其实是一个常量不能被再次赋值;
修饰的方法不能被子类重写;
Finally:用在try...catch...语句中,作用: 释放资源,
特点: 始终被执行(JVM不能退出)
Finalize:Obejct类中的一个方法,用来回收垃圾
8.自定义异常:
需要将我们自定义的异常类纳入到我们的异常体系中
继承自Exception
继承自RuntimeException
PS:
异常注意事项(针对编译期异常):
a:子类重写父类方法时,子类的方法必须抛出相同的异常或父类异常的子类,
或者子类不抛出异常也是可以的。(父亲坏了,儿子不能比父亲更坏);
b:如果父类抛出了多个异常,子类重写父类时,只能抛出相同的异常或者是他
的子集,子类不能抛出父类没有的异常,或者子类不抛出异常也是可以的。
c:如果被重写的方法没有异常抛出,那么子类的方法绝对不可以抛出异常,
如果子类方法内有异常发生,那么子类只能try,不能throws。
如何使用异常处理:
原则:如果该功能内部可以将问题处理,用try,如果处理不了,交由调用者处理,
这是用throws。
区别:
后续程序需要继续运行就try;
后续程序不需要继续运行就throws。
File
1.可以用来表示文件,也可以用来表示目录;
2.文件名称过滤器过滤器:
public String[] list(FilenameFilter filter)
public File[] listFiles(FilenameFilter filter)
需求:判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出该文件名称
分析:
a: 把E:\\demo这个路径封装成一个File对象;
b: 获取所有的以.jpg结尾的文件数组(相当于过滤);
c: 遍历数组。
例如:
File file = new File("D:\\img");
File[] files = file.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
File file2 = new File(dir, name);
if (file2.isFile()&&file2.getName().endsWith(".jpg")){
return true;
}else{
return false;
}
}
});
for (File file1 : files) {
System.out.println(file1);
file1.delete();
}