API–IO流
异常(Exception)
异常概述和分类
1 异常: 程序出现了不正常的情况.
2 程序的异常:Throwable
(1) 严重问题:Error(我们不处理 因为这种问题一般都是很严重的,比如说内存溢出)
(2) 问题:Exception
编译期问题:不是RuntimeException的异常(必须进行处理的,因为你不
处理,编译就不能通过)
运行期问题:RuntimeException(这种问题我们也不处理,因为是你的问
题,而且这个问题出现肯定是我们的代码不够严谨,需要修正代码的)
3 如果程序出现了问题,我们没有做任何处理,最终jvm会做出默认的处理.
把异常的名称,原因及出现的问题等信息输出在控制台.
同时会结束程序.
4 我们自己处理异常,java给我们提供了异常的处理方案
A try...catch...finally
B throws
5 try...catch...finally的处理格式:
a try{
可能出现问题的代码;
}catch(异常名 变量){
针对问题的处理
}finally{
释放资源;
}
b 变形格式:
try{
可能出现问题的代码;
}catch(异常名 变量){
针对问题的处理
}
c 注意:
i try里面的代码越少越好
ii catch里面必须有内容,哪怕是给出一个简单的提示
6 多个异常处理
a 每一个写一个try...catch
b 写一个try,多个catch
try{
...
}catch(异常类名 变量名){
...
}catch(异常类名 变量名){
...
}
...
注意事项:
i 能明确的尽量明确,不要用大的来处理.
ii 平级关系的异常谁前谁后无所谓,如果出现了子父关系,父必须在后面.
c 注意:
一旦try里面出了问题,就会在这里把问题给抛出去,然后和catch里面的问题进
行匹配,一旦匹配成功的,就执行catch里面的处理,然后结束了try...catch
继续执行后面的语句
7 JDK7出现了一个新特性的异常处理方案:
try{
}catch(异常名1 | 异常名2 | ... 变量){
...
}
注意事项:这个方法虽然简洁,但是也不够好.
i 处理方式是一致的.(实际开发中,好多时候可能就是针对同类型的
问题,给出同一个处理)
ii 多个异常间必须是平级关系.
8 编译期异常和运行期异常的区别:
编译期异常:JAVA程序必须显示处理,否则程序就会发生错误,无法通过编译
运行期异常:无需显示处理,也可以和编译时异常一样处理
9 异常中的几个方法:Throwable
public String getMessage():异常的消息字符串
public String toString():返回异常的简单信息描述
此对象的类的name(全路径名)
": "(冒号和一个空格)
调用此对象getLocalizedMessage()方法的结果(默认返回的是
getMessage()的内容)
(掌握)printStackTrace() 获取异常类名和异常信息,以及异常出现在程序中的位置.
返回值void.把信息输出在控制台
Throws
1 throws 定义功能方法时,需要把出现的问题暴露出来让调用者去处理.那么就通过throws在
方法上标识
2 有些时候,我们可以对异常进行处理,但是又有些时候,我们根本就没有权限去处理某个异常.
或者说,我处理不了,我就不处理了.
为了解决出错问题,Java针对这种情况,就提供了另一种处理方案:抛出
格式:
throws 异常类名
注意:这个格式必须跟在方法的括号后面.
注意:
尽量不要在main方法上抛出异常.
小结:
编译期异常抛出,将来调用者必须处理
运行期异常抛出,将来调用者可以不用处理
3 throw
概述:在功能内部出现某种情况,程序不能继续运行,需要进行跳转时,就用throw把异
常对象抛出.
4 **throws和throw的区别**
throws:
用在方法声明后面,跟的是异常类名
可以跟多个异常类名,用逗号隔开
表示抛出异常,由该方法的调用者来处理
throws表示出现异常的一种可能性,并不一定会发生这些异常
throw:
用在方法体内,跟的是异常对象名
只能抛出一个异常对象名
表示抛出异常,由方法体内的语句处理
throw则是抛出了异常,执行throw则一定抛出了某种异常
5 finally
被finally控制的语句体一定会执行
注意:
如果在执行到finally之前jvm退出了,就不能执行了
作用:用于释放资源
File类
File概述
File就是文件和目录(文件夹)路径名的抽象表现形式
File的构造方法
File(String pathname):根据一个路径得到File对象
File(String parent, String child):根据一个目录和一个子文件/目录得到File对象
File(File parent, String child):根据一个父File对象和一个子文件/目录得到File对象
File的成员方法
创建功能
public boolean createNewFile():创建文件 如果存在这样的文件,就不创建了
public boolean mkdir():创建文件夹 如果存在这样的文件夹,就不创建了
public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来
删除功能
public boolean delete()
重命名功能
public boolean renameTo(File dest)
如果路径名相同,就是改名。
如果路径名不同,就是改名并剪切。
路径以盘符开始:绝对路径 c:\\a.txt
路径不以盘符开始:相对路径 a.txt
判断功能
public boolean isDirectory():判断是否是目录
public boolean isFile():判断是否是文件
public boolean exists():判断是否存在
public boolean canRead():判断是否可读
public boolean canWrite():判断是否可写
public boolean isHidden():判断是否隐藏
获取功能 1
public String getAbsolutePath():获取绝对路径
public String getPath():获取相对路径
public String getName():获取名称
public long length():获取长度。字节数
public long lastModified():获取最后一次的修改时间,毫秒值
获取功能 2
public String[] list():获取指定目录下的所有文件或者文件夹的名称数组
public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组
递归
递归概述
递归:方法定义中调用方法本身的现象
注意事项:
A:递归一定要有出口,否则就是死递归
B:递归的次数不能太多,否则就内存溢出
C:构造方法不能递归使用:
实现步骤:
A:写一个方法
B:出口条件
C:规律