1, Exception(异常):是程序本身可以处理的异常。Error(错误):是程序无法处理的错误
异常和错误的区别:异常能被程序本身可以处理,错误是无法处理。
Java的异常(包括Exception和Error)分为可查的异常(checked exceptions)和不可查的异常(unchecked exceptions)。
可查异常(编译器要求必须处置的异常): 除了RuntimeException及其子类以外,其他的Exception类及其子类都属于可查异常。
不可查异常(编译器不要求强制处置的异常):运行时异常(RuntimeException与其子类)和错误(Error)。
非运行时异常 (编译异常):是RuntimeException以外的异常,类型上都属于Exception类及其子类。程序就不能编译通过
运行时异常:是RuntimeException类及其子类异常,如NullPointerException(空指针异常),这些异常是不检查异常,程序中可以选择捕获处理
总结:Throwable是基类,两个子类为Error(程序无法解决)和Exception, 后者分为运行时异常(RunnableException)和非运行时异常,
前者可以捕获,后者会让编译无法通过。
2,当在try块或catch块中遇到return语句时,finally语句块将在方法返回之前被执行。在以下4种特殊情况下:
1)在finally语句块中发生了异常。
2)在前面的代码中用了System.exit()退出程序。
3)程序所在的线程死亡。
4)关闭CPU。
2,Throwable类中的常用方法:
getCause():捕获并处理特定的异常。如果 cause 不存在或未知,则返回 null。
getMeage():返回异常的消息信息。
printStackTrace():对象的堆栈跟踪输出至错误输出流,作为字段 System.err 的值。
························
3,把“被检查的异常”转换为“不检查的异常”
4,异常处理的一般原则:1、 能处理就早处理,抛出不去还不能处理的就想法消化掉或者转换为RuntimeException处理。
因为对于一个应用系统来说,抛出大量异常是有问题的,应该从程序开发角度尽可能的控制异常发生的可能。
2、 对于检查异常,如果不能行之有效的处理,还不如转换为RuntimeException抛出。这样也让上层的代码有选择的余地――可处理也可不处理。
3、 对于一个应用系统来说,应该有自己的一套异常处理框架,这样当异常发生时,也能得到统一的处理风格,将优雅的异常信息反馈给用户。
5,RunnnableException异常:可以说代码本身存在bug,控制台一旦报RuntimeException,就必须要处理。。没有例外的。而且,
处理RuntimeException,不是try-catch能解决的。
检查异常: 是怕“天灾”,而不是人祸。,必须声明,必须声明比如访问一个不存在的文件
PS:异常异常跟eclipse的叉叉没啥关系,叉叉是代码写错了
6,函数声明了异常,调用者需要进行处理。也就是调用者可以处理的。因此为检查时异常
而运行时异常,之所以不用函数声明,是因为不需要让调用调用者处理,当然该异常发生,希望程序停止,
因为在运行时,出现了无法继续运算的情况,希望停止运行后,对代码进行修正
7,除了RuntimeException及其子类以外,其他的Exception类及其子类都属于检查异常,当程序中可能出现这类异常,
要么使用try-catch语句进行捕获,要么用throws子句抛出,否则编译无法通过。
8,学会用RunTimeException来包装“被检查的异常”的技术。
9, java的反射机制不但能够在运行时获得对象和类型的信息,而且还能动态加载类,动态访问以及调用目标类型的字段,方法以及构造函数。
10,RTTI(Run-time Type Identification)即运行时, 其实可以说:多态是隐式地利用RTTI,反射则是显式地使用RTTI。
多态(polymorphism)是基于RTTI实现的。RTTI的功能主要是由Class类实现的。
11,类是对象的抽象和集合,Class类就是对类的抽象和集合
12, Java中每个对象都有相应的Class类对象,因此,我们随时能通过Class对象知道某个对象“真正”所属的类。
无论我们对引用进行怎样的类型转换,对象本身所对应的Class对象都是同一个。
当我们通过某个引用调用方法时,Java总能找到正确的Class类中所定义的方法,并执行该Class类中的代码。
由于Class对象的存在,Java不会因为类型的向上转换而迷失。这就是多态的原理。
13,获得Class对象的引用:(1), Class.forName("classname");
(2), 对象.class【后者称为利用类字面常量来获得引用,其中如果是int或数组或接口直接.class, 而如果是基本数据类型的包装类,需要Integer.TYPE】
Class类的方法:
getName() 返回类的名字
getPackage() 返回类所在的包
newInstance()调用默认的不含参数的构建方法。
getFields() 返回所有的public数据成员
getMethods() 返回所有的public方法
14,RTTI是JAVA中的概念,JAVA的JDK中只有反射