1.异常是什么?
第一、异常模拟的是现实世界中”不正常的”事件
第二、java中采用”类”来模拟异常
第三、异常类也是可以创建对象的
NullPointException e=0x1234;
e是引用,e中保存的内存地址指向堆中的”对象”
这个对象一定是NullPointException类型
这个对象就表示真实存在的异常事件
NullPointException是一类异常
2.异常机制的作用?
java语言为我们提供一种完善的异常处理机制
作用是:程序员发生异常事件之后,为我们输出详细的信息
程序员通过这个信息,可以对程序进行一些处理,使程序更加健壮
3.处理异常的两种方式
第一、声明抛出 throws
第二、捕捉 try…catch…
声明抛出:在方法声明的位置上使用throws关键字向上抛出异常
使用throws处理异常不是真正的处理异常而是推卸责任
谁调用异常就会抛给谁,直到异常被抛给JVM或者用try…catch…处理,
如果异常抛给JVM,JVM遇到这个异常就会退出JVM
捕捉 :
异常的捕获和处理需要采用try 和catch来处理,具体格式如下:
try{可能出现异常的代码}
catch(异常类型1 变量){
处理异常的代码;
}
catch(异常类型2 变量){
处理异常的代码;
}…
1.catch语句块可以写多个
2.但是从上到下catch,必须从小类型异常到大类型异常进行捕捉
3.try…catch…中最多执行一个catch语句块,执行结束之后try…catch…就结束了
4.取得异常对象具体信息的两种方法
getMessage();//取得异常描述信息
printStackTrace();//取得异常的堆栈信息,比较适合程序员调试程序,一般将采用此方法
5.关于finally语句
第一、finally语句块可以直接和try语句连用try{}finally{}
第二、try{}catch{}…finally{}也可以
第三、在finally语句块中的代码一定会执行,可以用于释放资源
第四、只有在执行finally语句块之前退出了JVM,finally语句块不执行
try{System.exit(0);}finally{}//该finally语句块不会执行
面试题:
public class Test{
public static void main(String [] args){
int i=m1();
System.out.println(i);
}
public static void m1(){
int i=10; /*//return i;的执行原理
*int temp=i;
try{ *return temp;
return i; */ //i=? i=10
}finally{
i++;
System.out.println("m1中的i="+i); //i=? i=11
}
}
}
final、finalize、finally?
final关键字修饰的类无法被继承
final关键字修饰的方法无法被覆盖
final关键字修饰的局部变量一旦赋值不能重新赋值
final关键字修饰的成员变量需要手动赋值
final关键字修饰的成员变量和static连用称为常量,常量名要大写
finalize是一个方法名,垃圾回收器在回收java对象之前,会先自动调用java对象的finalize方法
finally是异常处理机制的finally语句块
如何自定义异常,并手动抛出提示信息?
1.自定义编译异常,直接继承Exception
2.自定义运行时异常,直接继承RuntimeException
注意:自定义异常一般提供两个构造方法:一个是无参的构造方法,
另一个是带参数的构造方法,用于传入异常提示信息
要手动抛出异常提示信息要用throw关键字:
throw new 自定义异常名(异常提示信息);