异常
1. 异常都是从类Throwable类派生出来的,而Throwable类是直接从Object类继承而来,Error:系统内部错误,这类错误由系统进行处理,程序本身无需捕获处理;
Exception(可以处理的异常)
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 抛出
6. 异常处理的原则:
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);也是就虚拟机退出才不会执行。
7. 子类覆盖父类时对异常处理的注意事项:
a) 如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者该异常的子类。
b) 如果父类方法抛出多个异常,那么子类再覆盖该方法时,只能抛出父类异常的子集。(也就是父类如果抛多个异常,那么我们不能直接抛Exception异常。) (如果抛一个异常的时候,是可以抛父类异常的)
c) 如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常。
d) 如果子类方发发生了异常,就必须要进行try处理,绝对不能抛。
e) 如果在子类的覆盖方法确实需要抛出非父类的异常或者该异常的子类,则必须在内部解决。
8. Throwable常用方法
a) Throwable(String message) 构造带指定详细消息的新 throwable。
b) String getMessage() 返回此 throwable 的详细消息字符串。
c) StackTraceElement[] getStackTrace() 提供编程访问由 printStackTrace() 输出的堆栈跟踪信息。
d) void printStackTrace(PrintStream/PrintWriter s) 将此 throwable 及其追踪输出至标准错误流/输出流/PrintWriter。
9. 定义类继承Exception或者RuntimeException
a) 为了让该自定义类具备可抛性 extends Exception/RuntimeException
b) 让该类具备操作异常的共性方法
c) 当要自定义异常的信息时,可以使用父类已经定义好的功能,异常信息传递给父类的构造函数。super(message)
10. 包(package) Object类
a) 对类文件进行分类管理
b) 给类提供多层命名空间
c) 写在程序的第一行
d) 类名的全称是 包名.类名
e) 包也是一种封装形式
11. import 关键字:可以导入要使用的包
12. 包与包之间进行访问,被访问的包中的类以及类中的成员,需要public修饰。
13. 不同包中的子类还可以直接访问父类中被protected权限修饰的成员
14. Object类 : 所有类的根类。
a) Equals指示其它某个对象是否与此对象“相等”。
b) equals和==的区别:==比较运算符用来比较两个基本数据类型的数值是否相同或者二个对象的内存地址值是否相同
c) hashCode方法:返回该对象的哈希码值
d) getClass方法:返回对象的运行时类
e) toString方法: 返回该对象的字符串表示。
i. Java默认的toString方法:
public String toString(){
return getClass().getName() +”@” +Integer.toHexString(hashCode());
}
|