---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
1. 异常都是从类Throwable类派生出来的,而Throwable类是直接从Object类继承而来,Error:系统内部错误,这类错误由系统进行处理,程序本身无需捕获处理;
Exception(可以处理的异常)
1.编译期间:我们需要处理;
2.RuntimeException运行时异常(编译时不检测)::可以捕获,也可以不捕获的异常。 (在运行时出现的异常如数组越界)如果有这个异常则需要修改代码,一般报错错误
继承Exception的其他类为编译时异常:必须被捕获的Exception
2. 问题也是现实生活中一个具体的事物,也可以通过Java的类的形式进行描述。并封装成对象。
3. 异常的好处
a) 将问题进行封装
b) 将正常流程代码和问题处理代码相分离,方便于阅读。
4. Throwable: Throwable及其所有的子类都具有可抛性。
5. 处理异常(Exception)的几种格式:
a) try{
可能发生异常的代码;
}
catch(接收捕获异常类的对象 异常类引用变量){
处理代码;
}
b) try{
可能发生异常的代码;
}
fianlly{
一定要执行的语句;(通常用于关闭资源)
}
c) try{
可能发生异常的代码;
}
catch(捕获异常类的对象 异常类引用变量){
处理代码;
}
finally{
一定要执行的语句;(通常用于关闭资源)
}
d) 或者不处理直接throws 抛出:在方法名称后面跟一个关键字throws 异常类名
i. 对于运行时异常抛出和不抛出效果一样
ii. 对于编译时的异常抛出后必须要处理或再次抛出
6. RunTimeException异常不需要抛出也不需要处理,系统会直接停止,Exception下非RunTimeExceprion异常则必须处理或抛出
7. 面试题:final和finally和finalize的区别:
a) Finalize是Object中的释放资源用的方法
8. Finally里的代码会永远执行,但在虚拟机退出时后面的代码不会被执行
9. 在catch中有return语句时finally会在return前执行,但返回路径还是之前的路径
10. 异常处理的原则:
a) 函数内容如果抛出需要检测的异常,那么函数上必须要声明。 否则必须在函数内用try catch捕捉,否则编译失败。
b) 如果调用到了声明异常的函数,要么try catch要么throws,否则编译失败。 (如果调用的函数抛出异常,那么调用者可以try catch也可以throws) (如果调用的是复写父类的函数抛出异常,那么调用者只能抛出父类同样的异常,或者父类异常的子集)
c) 什么时候catch,什么时候throws 呢? 功能内容可以解决,用catch。 解决不了,用throws把异常告诉调用者,由调用者解决 。
d) 一个功能如果抛出了多个异常,那么调用时,必须有对应多个catch进行针对性的处理。 内部有几个需要检测的异常,就抛几个异常,抛出几个,就对应有几个catch。
e) fianlly 特殊之处: finally语句中定义的是一定要执行的语句,通常用于关闭资源。(因为资源必须释放)
f) finally除非遇到System.exit(0);也是就虚拟机退出才不会执行。
class Test {
public static void main(String[] args) {
int[] arr = { 1, 3, 5, 7, 9 };
try {
System.out.println(arr[5]);
}
catch (Exception e) {
System.out.println("数组角标越界");
}
finally {
System.out.println("return 之前必须执行");
return;
}
}
}
11. 一个代码中出现了对个问题,应该怎么解决?
a) 一个一个进行处理
b) 针对所有问题写一个try,多个chath()处理多个异常
c) 如果是平级关系就没有顺序问题
d) 如果存在着子父关系父类一定要放到后面
12. JDK1.7异常的新特性:
a) 多个catch使用一个catch代替:
i. Catch( 异常1 | 异常2 | 异常3 | 异常4 ... E)
13. 标准处理方式: printStackTrace()
StackTraceElement[] getStackTrace()
提供编程访问由 printStackTrace() 输出的堆栈跟踪信息。
String toString()
返回此 throwable 的简短描述。异常的类名:消息字符串
String getMessage()
返回此throwable 的详细消息字符串。
14. 子类覆盖父类时对异常处理的注意事项:
a) 如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者该异常的子类。
b) 如果父类方法抛出多个异常,那么子类再覆盖该方法时,只能抛出父类异常的子集。(也就是父类如果抛多个异常,那么我们不能直接抛Exception异常。) (如果抛一个异常的时候,是可以抛父类异常的)
c) 如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常。
d) 如果子类方发发生了异常,就必须要进行try处理,绝对不能抛。
e) 如果在子类的覆盖方法确实需要抛出非父类的异常或者该异常的子类,则必须在内部解决。
15. 自定义异常:
a) throw
16. Throwable常用方法
a) Throwable(String message) 构造带指定详细消息的新 throwable。
b) String getMessage() 返回此 throwable 的详细消息字符串。
c) StackTraceElement[] getStackTrace() 提供编程访问由 printStackTrace() 输出的堆栈跟踪信息。
d) void printStackTrace(PrintStream/PrintWriter s) 将此 throwable 及其追踪输出至标准错误流/输出流/PrintWriter。
17. 定义类继承Exception或者RuntimeException
a) 为了让该自定义类具备可抛性 extends Exception/RuntimeException
b) 让该类具备操作异常的共性方法
c) 当要自定义异常的信息时,可以使用父类已经定义好的功能,异常信息传递给父类的构造函数。super(message)
/*
对教师进行描述
教师属性姓名(name),电脑(comp)
教师行为讲课(prelect())如果出现异常,教师还可以布置练习方法(Test())
*/
class Teacher{
private String name;
private Computer comp;
Teacher(String name){
this.name=name;
comp=new Computer();
}
public void prelect()throws NoPlanException{
try{
comp.run();
System.out.println(name+"老师讲课");
}
catch(LanPingException e){
System.out.println(e.toString());
comp.reset();
prelect();
}
catch(MaoYanException e){
System.out.println(e.toString());
test();
/*
*
*对异常进行了转换,本人是电脑冒烟故障,但是会影响到教师的课程,所以又对异常进行了封装,把电脑的问题转换成教材课程无法继续的问题,
*这就是异常的异常转换。
*/
throw new NoPlanException("课时进度无法完成,原因:"+e.getMessage());
}
}
public void test(){
System.out.println("大家练习");
}
}
18. 包(package) Object类
a) 对类文件进行分类管理
b) 给类提供多层命名空间
c) 写在程序的第一行
d) 类名的全称是 包名.类名
e) 包也是一种封装形式
19. import 关键字:可以导入要使用的包
20. 包与包之间进行访问,被访问的包中的类以及类中的成员,需要public修饰。
21. 不同包中的子类还可以直接访问父类中被protected权限修饰的成员
22. Object类 : 所有类的根类。
a) Equals指示其它某个对象是否与此对象“相等”。
b) equals和==的区别:==比较运算符用来比较两个基本数据类型的数值是否相同或者二个对象的内存地址值是否相同
c) hashCode方法:返回该对象的哈希码值
d) getClass方法:返回对象的运行时类
e) toString方法: 返回该对象的字符串表示。
i. Java默认的toString方法:
public String toString(){
return getClass().getName() +"@" +Integer.toHexString(hashCode());
}
---------------------- ASP.Net+Unity开发、 .Net培训、期待与您交流! ----------------------