1. 整理遇到的异常和错误
运行环境
出现原因
解决方案
-- IO讲完 检查,这就是工作经验。
2.异常体系
Throwable 类是 Java 语言中所有错误或异常的超类。
Error -- 严重错误。不需要处理(不需要写捕捉错误的代码)。 需要改代码的。 例如:死循环造成内存溢出。
xxxError(有一个特殊)
Exception
编译期 : 必须写代码处理异常。
运行期 : 也是不需要处理异常,而是需要改代码的。
xxxException
3、Jvm默认处理异常和自己处理
Jvm默认处理: 把详细信息显示在控制台,然后终止。后面的代码就不执行了。
自己捕捉异常处理:
try {
// 可能产生异常的代码(尽可能的定位到异常出现的位置)
} catch (异常类名 变量名) { // Exception
// 异常处理语句
// 以后,返回错误页面等等。暂时显示异常。
}
// 不影响异常后面的代码运行。
世界上最遥远的距离,是我在if里你在else里,似乎一直相伴又永远分离;
世界上最痴心的等待,是我当case你是switch,或许永远都选不上自己;
世界上最真情的相依,是你在try我在catch。无论你发神马脾气,我都默默承受,静静处理。到那时,再来期待我们的finally!
几个名词:
声明异常
抛出异常:方法声明上使用
捕获异常:方法体中使用
嵌套异常:在finally中会出现需要捕获处理的异常
4.多个异常的处理方式
A: 针对每一个异常都进行try...catch
B: 针对所有异常 写一个try 多个 catch。
注意:一定要捕捉到所有的异常。
一旦捕捉到异常了,try下面的语句将不再执行,程序将跳转到catch。
5.多个catch的顺序问题
如果异常同级,没有顺序。
如果异常存在父子关系,父类一定要放在子类的后面。
原则:如果你明确知道是什么异常,就一定要捕捉具体的异常,不建议使用父类。
6.JDK1.7后新特性
多个异常:
catch(异常类名1 | 异常类名2 | ... 变量名)
7.Throwable的三个方法
getMessage() -- 获取异常的消息字符串
toString() -- 全路径异常的类名:消息字符串
printStackTrace() -- 把异常的详细信息打印到控制台
8、加入finally 语句
try {
// 可能产生异常的代码(尽可能的定位到异常出现的位置)
} catch (异常类名 变量名) { // Exception
// 异常处理语句
// 以后,返回错误页面等等。暂时显示异常。
} finally {
// 释放资源
}
finally 有和没有的区别:
假设,如果有必需要执行的程序,放在finally中就一定会执行。
但是如果不放在finally中,假设这个时候出现的异常是没有被捕获到的,那么程序就会死掉,从而导致必须要执行的代码没有被执行到!
9.总结异常处理两种方式:
抛出异常 -- 在方法上声明异常 : throws 异常类名
try...catch 处理
如果知道怎么处理,一般建议处理。不知道了,抛。
10.自定义异常
自定义一个类,继承Exception 或者 RuntimeException 。提供带参(String)构造。
工作中一般都继承自RuntimeException
在可能出现这个异常的代码处,做异常处理时,抛出此异常。 -- 关键字 throw
11. finally 面试题
final,finally,finalize的区别?
final 关键字:
finalize 是Object类中的一个方法,当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。
gc -- 垃圾回收器
finally: 是异常处理机制的一部分。常用用来释放资源。
finally里面的代码总会执行。(除非虚拟机退出了。 -- 在finally代码前执行了exit() 方法 或者恰好断电了)
return前还是后呢? 在return 之间. 也就是说如果程序执行到了return语句。 那么程序就已经找到了返回路径。 再去执行finally 语句。执行完再回到之前的返回路径。
12.IO流
数据传输
分类:
按流向分(站在程序的角度)
输入流
输出流
按操作的文件类型分:
字节流:
字符流:处理文本文件(windows自带记事本可以打开并且不乱码的文件)
13. File
构造方法:
File(String pathname)
通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
File(String parent, String child)
根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
File(File parent, String child)
根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
File创建功能
创建文件:boolean createNewFile() -- 如果存在,则不创建,返回false。要求文件的父目录必须存在。
创建文件夹: boolean mkdir() -- 创建单级目录, 如果存在,则不创建,返回false
boolean mkdirs() -- 创建多级目录。
注意问题:想创建文件还是文件夹,一定要明确。
File的删除一定要注意:删除你新创建的拿来练习的东西。File的删除不走回收站。
删除 delete() -- 删除文件或者文件夹(文件夹下如果有东西,删除失败)
File的判断功能
boolean exists()
boolean isFile()
boolean isDirectory()
boolean isAbsolute()
boolean canRead()
boolean canWrite()
boolean isHidden()
File的获取功能
getAbsolutePath()
getPath() -- 目前咱们的java项目,相对路径到项目的跟路径。
getName() -- 带后缀的文件名
length() -- 文件大小 字节数
lastModified() -- 最后修改时间 -- 毫秒值
重要获取:
static File[] listRoots() -- 系统根目录
String[] list() -- 返回指定目录下的所有文件(夹)的名称数组
File[] listFiles() -- 返回指定目录下的所有文件(夹)的对象数组
文件名称过滤器 FilenameFilter -- accept(File dir, String name)
补充:可变参数:适用于参数个数不确定,类型确定的情况,java把可变参数当做数组处理
|
|