异常体系
Java把异常也封装成了一个对象
NullPointerException 空指针异常
ClassCastException 类型转换异常
ArrayIndexOutOfBoundsException 数组下标越界异常类
关键字throw 和throws
1.throw的作用与return很像
return的作用是方法返回,并且可以根据返回值类型返回相应的变量
throw的作用也是方法返回,但是只能返回异常对象,也就是说throw后面跟的对象必须是Throwable的子类创建的
调用方的代码处于上层,被调用方的代码处于下层
上层代码调用下层代码的时候,下层可以同时有正常返回和异常返回两种返回方式,
下层可以没有任何返回,
下层可以只有正常返回,
下层也可以只有异常返回
下层方法中正常返回用return,
下层异常返回(抛出)用throw
上次接收下层正常返回的结果的语法是:
数据类型 变量 = 方法();
1.变量用于接受下层方法的返回值,它的数据类型必须与下层方法中的返回值类型一样或者兼容
2.
上层接收下层异常抛出的对象的语法是:
try{
数据类型 变量 = 方法{};
}catch(数据类型 变量){
}
上层代码接收下层代码的返回值
上层代码捕捉下层代码的异常
正常返回 异常返回
下层是返回 下层是抛出
上层是接收 下层是捕捉
异常对象中有什么?
1.异常信息
下层代码构造异常对象的时候,可以在构造方法中传入一个String类型的异常信息,这个异常信息会存储在Throwable中的detailMessage成员变量中,上层代码在捕捉到异常对象后可以使用getMessage()读取到下层返回的异常信息
2.打印异常的追踪栈信息
当下层代码构造异常对象的时候,会创建一个栈,存储本次代码执行过程中所涉及到的所有的方法的信息,这些信息包括:
1.方法入栈执行的先后顺序2.出异常的代码在哪个类中的哪一行
final 修饰符 - 最终的
修饰变量,称为常量,值不可修改
修饰方法,称为最终方法,方法不可以被子类重写
修饰类,称为最终类,类不可以被继承
abstract关键字是否可以与final同时出现
例如:能不能同时用abstract和final修饰类或者方法
答案:不能,原因是
1.abstract修饰的类称为抽象类,抽象的类不能被实例化,只能被继承,而final是阻止类被继承
2.abstract修饰的方法称为抽象方法,抽象方法必须让子类重写,而final是阻止子类重写
final修饰的变量真的不能改变吗
如果final修饰的变量是基本数据类型,指向常量池,那么值不可以修改
如果final修饰的变量是引用数据类型,指向堆,那么指针不可以修改,但是指针指向的对象内的成员可以修改