异常Exception
是指Java运行中出现的错误.
异常的继承体系
- Throwable
- error
- Exception
- RuntimeException
异常的分类
编译期异常和运行期异常
运行期异常即代码中出现的错误,是人为导致的异常,RuntimeException中的为运行期异常,不出错不需要捕捉
编译期异常是编译的时候必须给带有throws的方法进行异常捕捉,除了RuntimeException外的异常都为编译期异常,必须要捕捉或者抛出
异常处理的两种方式
方法一
- try … catch…finally
- try…catch
- try…fanally
- try…catch…finally
- try:用来检测异常
- catch:用来捕获异常
- finally:释放资源
try…catch方法处理
try{
//可能出现异常的代码
}catch(Exception e){
//处理方法
}
处理后程序将继续运行。
JDK7之后的处理多个异常的方法
try{
//可能出现异常的代码
}catch(XxxxxException|XxxxException e){
//处理方法
}
方法二
- b: throws 抛出异常
//定义方法时
public void Xxx() throws Exception{ //将异常抛给上一层
throw new Exception(); //抛出异常
}
编译期异常
必须对其进行处理
运行期异常
可以处理也可以不处理
throws 和 throw的区别
- throws:
- 用在方法声明后面,跟的是异常类名;
- 可以跟多个异常类名,用逗号分开;
- 表示抛出异常,由该方法的调用者处理。
- throw:
- 用在方法体内,跟的是异常对象名;
- 只能抛出一个异常对象名;
- 表示抛出异常,由方法体内的语句处理。
Throwable的几个常见的方法
String getMessage(); //获取异常信息
String toString(); //获取异常类名和异常信息
void printStackTrace(); //打印异常类名和异常信息,以及异常在程序中出现的错误。
finally关键词
特点
被finally修饰的的语句一定会被调用
特殊情况:在执行到finally之前jvm退出了(比如System.exit(0)).
作用
用于释放资源,在IO流和数据库操作里会见到
面试题
- final,finally,finalize的区别?
final可以修饰类、方法、变量,final类不能被继承,final方法不能被重写,final变量只能赋值一次。
finally是try语句中的一个语句体,不能单独使用,用于释放资源。
finalize是Object类的一个方法,当垃圾回收器不存在对该对象的更多引用的时候,由对象的垃圾回收器调用此方法。 - 如果catch语句中有return语句,finally还会执行吗?
会,在return之后执行。(不要在finally语句体中写return语句)
自定义异常
目的
异常子类本身是没有任何方法的,异常的目的是通过异常的名字区分出现异常的原因
自定义
class XxxxException extends Exception {
public XxxxException(String message){ //有参构造方法!
super(message);
}
//就好了!!!!
}
异常的注意事项
- 子类重写父类方法时,子类方法必须抛出相同的异常或父类异常的子类;
- 如果父类抛出了多个异常,子类只能抛出相同的异常或者它的子集,无法抛出父类没有的异常;
- 如果父类方法没有异常,子类方法不能抛出异常。如果子类方法内有异常,只能try,不能throws。
Flie类
构造方法
File(String pathName);
File(String parent,String child); //父级路径和子级路径
File(File parent,String child); //父级File和自己路径
常用方法
创建功能
boolean createNewFile(); //创建文件 如果存在就不创建了,就返会false
boolean mkdir(); //创建文件夹,如果存在就不创建了,返回false
boolean mkdirs(); //创建多级目录文件夹,如果父文件夹不存在,也一并创建了
重命名和删除功能
boolean renameTo(File dest); //如果路径名相同,就是改名;不同就是改名并剪切。
boolean delete(); //jafa中删除不走回收站,删除的文件夹中不能包含文件或文件夹(只能删空的)
判断功能
boolean isDirectory(); //判断是否是目录
boolean isFile(); //判断是否是文件
boolean exists(); //判断是否存在
boolean canRead(); //判断是否可读
boolean canWrite(); //判断是否可写
boolean isHidden(); //判断是否隐藏
获取功能
String getAbsolutePath(); //绝对路径
String getPath(); //获取构造方法里的路径
String getName(); //获取文件或者文件夹的名字
long length(); //获取长度(字节个数)
String[] list(); //获取指定目录下所有文件文件夹的名称数组
File[] listFiles(); //获取指定目录下所有文件文件夹的File数组
文件名称过滤器
FilenameFilter接口
不想看了!!!!!!!