异常
程序中一些程序处理不了的特殊情况
异常类 Exception
见过的异常: NullPointerException ArrayIndexOutOfBoundsException
异常的分类:
检查型异常(编译异常):在编译时就会抛出的异常(代码上会报错)
需要在代码中编写处理方式(和程序之外的资源访问)直接继承Exception
运行时异常:在代码运行阶段可能会出现的异常,可以不用明文处理,可
以通过代码避免异常的发生,继承Exception
当程序中出现异常就会中断程序,代码不会继续运行
处理异常两种方式:
try…catch…finally…
声明抛出throws
try{
try块尝试捕捉异常 其中可能是会抛出异常的代码
}catch(异常参数){
捕捉到异常后要处理的代码
}finally{
无论是否出异常,都会执行的代码块
一般用在关闭资源
}
例:
声明一个文件对象和字节流输入流对象时会有FileNotFoundException异常,是检查型异常
通过try-catch-finally处理异常
当需要处理多种异常时,有以下几种处理方式
例:
12/0会出现ArithException异常
将Object strA=""强制转换成Integer类型会出现ClassCastException异常
获取FileInputStream对象会出现FileNotFoundException异常
需要处理多种异常
1.try处理多种异常
try{
}catch(异常参数1){
}catch(异常参数2){
}catch(异常参数3){
}finally{
}
2.catch合并处理
一个catch块捕捉多种异常
使用|声明多种异常
try{
}catch(异常参数1|异常参数2|异常参数3){
}
3.catch块声明父类异常,捕捉所有子类异常
try{
}catch(Exception e){
}
当catch捕捉多个异常时,其异常捕捉的顺序:子类异常有限处理,父类异常后置处理
例如:
出现IndexOutOfBounds异常、ArrayIndexOutOfBounds异常和StringIndexOutOfBounds
异常时要先捕捉后两者
因为ArrayIndexOutOfBounds异常和StringIndexOutOfBounds异常都继承于 IndexOutOfBounds异常
如果catch块抛出了异常:如果没有finally就会中断程序
如果有finally,就会运行finally,并且正常返回,此方法正常运行结 束
try块不能单独存在,必须有其他语句块
try块中没有检查型异常,不能在catch块中随意捕捉
自定义异常
继承Exception或RuntimeException
两个构造方法
throws 声明方法中可能抛出的异常
throws 声明抛出多种异常
运行时异常可以不throws
方法重写:子类对父类中继承过来的方法进行重新定义
约束:返回值类型 方法名 参数列表都不能变
访问权限只能更开放
抛出的异常只能更精确(范围更小),不能扩大
File
java中对文件的处理 java.io包
声明文件
方法
exists() | f.exists() 搜索计算机是否存在该文件,存在返回true,不存在返回false |
createNewFile() | f.createNewFile() 在f的路径上创建文件,创建成功返回true,失败返回false |
delete() | f.delete() 删除f文件,删除成功返回true,失败返回false |
isFile() | f.isFile() 获取f是否是文件,是返回true,不是返回false |
isDirectory() | f.isDirectory() 获取f是否是文件夹,是返回true,不是返回false |
mkdir() | f.mkdir() 根据相对路径创建目录,只会在原有的目录里面创建,如果上面一级的目录xxdir不存在,则这次创建便会失败返回false, 报xxxdir这个目录找不到的异常 |
mkdirs() | f.mkdirs() 根据绝对路径新建目录,如果上一级目录不存在,则会将上一级目录创建完后,再创建后面一级的目录 |
length() | f.length() 返回f文件的内容的长度,返回值是long类型 |
使用createNewFile()方法时需要处理IOException异常
I/O流
输入流/输出流
流动的是数据 二进制数据
流的分类:
根据流动的方向不同:输入流、输出流
根据流动的介质(单位)不同:字符流、字节流
字符流只能读取文本 .txt .xml .properties .html
字节流可以读取所有的文件类型
根据功能不同或根据作用不同:节点流、工具流(打印流、数据流、对象流)
D:\\easy.txt
字节输出流
字节输入缓冲流
字节输入流
将内存对象转换成序列(流)的过程叫作序列化
这个对象必须是可序列化的
该对象必须实现Serializable接口
序列化
将对象序列读入程序,转换成对象的方式叫反序列化
反序列化会创建新的对象
反序列化
总结创建对象的方式
1.new
2.克隆
3.反序列化
4.反射