------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
一、异常
A:概述
异常:程序在运行过程中发生由于硬件设备问题、软件设计错误等导致的程序异常事件。说白了,就是程 序的非正常情况。
在Java等面向对象的编程语言中,异常本身是一个类,产生异常就是产生了一个异常对象。
B:继承体系结构
C:分类
严重错误:无法通过处理的错误。
运行时异常:运行时可能会报错,可以不处理。如数学异常。
编译时异常:编译时无法编译通过。如日期格式化异常
D:异常处理
jvm的默认处理方式:
默认情况下,jvm会采用默认处理方案:
把异常的全路径名称,原因,及位置等信息显示出来。
注意:
如果是jvm的默认处理方式,那么,它会在出问题的地方结束。
异常处理步骤:
1、创建异常对象(JDK已定义的异常会自动创建对象,自定义异常需要手动创建)
2、抛出异常(JDK已有定义的异常会自动过抛出异常,自定义异常需手动抛出)
3、处理异常
将异常捕获并处理
try...catch...finally
基本格式:
try {
可能有问题的代码;
}catch(异常对象) {
对问题的处理;
}finally {
释放资源;
}
变形格式:
try...catch
try...catch...catch
try...catch...catch...finally
try...finally
多异常捕获处理:
分别捕获分别处理,每个try对应一个catch
集中捕获分别处理,一个try对应所有catch
注意:大的异常不能在前边捕获
一次捕获共同处理
注意:不能同时捕获大的异常与小的异常
声明抛出异常与抛出异常
throws:用于声明函数抛出异常。用于函数声明。是异常对象的处理方式之一。
多个异常可以同时声明抛出,用逗号分隔。
throw:用于抛出异常对象。用于函数内容。
当出现JDK异常对象时,JVM会自动创建一个异常对象并抛出。
自定义异常对象可以先创建异常对象,再使用throw抛出。抛出后再进行处理:或使用捕获或使用声明抛 出。
自定义异常
如果涉及其他需求,JDK没有提供相应的异常对象,则可以自己定义异常。
定义格式:继承Exception或者RuntimeException。同时需要带参的构造方法,用于接收异常信息。
class MyException{
public MyException(String message){
super(message);
}
}
异常常见方法
重写了toString方法
public String getMessage()
public void printStackTrace()
public void printStackTrace(PrintStream s)
异常处理注意细节
如果多个异常,有子父关系,父异常一定要放在最后。
如果多个异常,是平级关系,它们存在的位置没有顺序关系。
执行顺序:
在try里面的代码会按照从上往下执行,一旦发生问题,
就会产生一个异常对象,去和catch里面进行匹配。
有对应的匹配,就走对应的处理方案。
没有,就找父匹配,有就走对应的处理方案。
如果找不到,那么就由jvm采用默认处理方案。
JDK7的新特性:在处理多个平级的异常的时候
catch(ExceptionA | ExceptionB | ExceptionC ... e) {
}
E:面试题:
A:Exception和RuntimeException的区别?
Exception:分为编译期异常和运行期异常。编译期异常是必须处理的。否则,代码不能编译通过。
RuntimeException:运行期异常,不需要编写异常处理代码,但是可能需要修正程序参数或者逻辑代码。
B:throws和throw的区别?
throws:在方法声明上,后面跟的是异常类名。
throws声明后面如果是一个运行时期异常,调用者不需要处理。这种方式没有意义。
throws声明后面跟的是一个编译期异常,调用者是必须处理的。
throw:在方法体中,后面跟的是异常对象名。
throw后面如果抛出的是运行时期异常对象,那么方法上是不需要进行声明的。
throw后面如果抛出的是编译时期异常对象,那么,一般在方法声明上都是要用throws声明该方法有 异常。
C:finally的面试题
a:final,finally,finalize的特点及区别?
b:如果catch里面有return,请问finally里面的代码还执行吗?
如果执行,是在return前,还是后呢?
c:写一个程序,测试finally里面的操作对结果没有影响。
finally一般只用于释放资源。
D:jvm的默认处理方式?
F:怎么选择
A:能够自己处理的时候,尽量自己处理。
B:在main方法里面尽量不要抛。
C:将来在实际开发中,我们会把不同的异常给出不同的界面进行显示给用户。
G:子父关系中的异常处理
class Fu {
public void show() throws Exception{
}
}
class Zi extends Fu {
public void show() throws RuntimeException{
}
}
class Demo {
public static void main(String[] args) {
}
}
子的重写方法中不能抛出比父更大的异常。
二、File
(1)File概述:
将文件路径或者文件夹路径封装成的类。实际代表该路径下的文件或者文件夹。方便对文件与文件夹的属性信息进行 操作。
(2)理解
因为硬盘上对数据的存储基本上都是以文件存在。为了方便对文件或者文件夹进行操作。java就提供了一个类File 供我们使用。本质上是对路径的封装。
(3)File类构造方法:
A:File file = new File("d:\\a.txt");
B:File file = new File("d:\\","a.txt");
C:File file = new File("d:");
File file2 = new File(file,"a.txt");
以上三种格式等价。
(4)File类的功能:
A:创建功能
创建文件:createNewFile()
创建文件夹:mkdir(),mkdirs()
注意:仅仅根据后缀名并不能判断是文件还是文件夹。
B:删除功能
删除文件或者文件夹:
delete()
注意:
A:删除一个带内容的目录,必须先删除内容,在删除目录。
B:java中的删除不走回收站。
C:判断功能
判断file是否存在:exists()
判断file是否是文件:isFile()
判断file是否是文件夹:isDirectory()
D:重名名功能
把旧名称改变为新名称:renameTo()
注意:路径问题。
重命名涉及两个File对象。
将File1重命名成File2
在同一目录下:
file2文件已经存在,重命名失败
file2文件不存在,重命名成功
在不同目录下:
file2文件已经存在,重命名失败
file2文件不存在,剪切成功
E:获取功能
基本获取
获取绝对路径:getAbsolutePath()
获取定义的路径:getPath()
获取名称:getName()
获取大小:length()
获取最后修改时间:lastModified()
高级获取
获取指定目录下所有文件或者文件夹的名称数组:list()
获取指定目录下所有文件或者文件夹的File数组:listFiles()
返回所有盘符:listRoots()
文件过滤器:
接口 FilenameFilter 重写accept()方法 dir:文件所在的目录 name:文件名称
方式1,定义类实现FilenameFilter,list(这个类的实例对象)
方式2,匿名内部类
注意:File对象可以作为参数传递给流的构造函数。
三、递归
(1)在函数内调用函数本身,即方法定义中调用方法本身的现象。
(2)递归注意事项:
A:要有出口,否则就是死递归。
B:次数不能太多,否则内存溢出。
特殊事项:构造方法不能递归定义。
(3)案例:(面试可能见到)
A:递归求阶乘
B:递归求兔子问题(斐波那契数列)
C:递归遍历目录(带内容的目录)
D:递归删除目录(带内容的目录)
(4)递归注意事项:
必须在函数内调用该函数本身。
递归算法所在函数内,必须有函数出口。
递归次数不能过多,否则会导致内存溢出。
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------