2022-03-24
Throwable(所有error和exception的父类:超类)
Java将错误变成对象交给异常处理机制
一般是环境的问题,JVM的问题,并非程序的问题;最典型的就是虚拟机中运行的程序过多,造成的虚拟机内存溢出,虚拟机错误,还有系统崩溃之类的,应用程序是无法处理此类错误的。Error不在我们调试代码可以处理的范围中。
AWTError
ThreadDeath
... ...
Checked异常(检查时异常),程序必须处理的异常(代码调用,调用方声明有风险)
例如文件调用:I/O 有可能找不到的风险
对于以上的文件读取可能发生的异常我们有两种处理方式:
1. 抛出,继续往上抛
2. 现场处理这个异常对象没有被初始化生成的
NumberFormatException ArrayIndexOutOfBoundsExceptionArithmeticExecption
数学异常(类似除零错误):
try: 执行可能产生异常的代码
Catch: 异常捕获
Finally: 无论是否发生异常总能执行的代码
抛出
Throw: 手动抛出异常
Throws: 声明方法可能要抛出的各种异常
使用try、catch、finally的三种情况:
1.程序正常运行(不经过catch):
2.程序发生异常,经过catch且异常匹配:
3.程序发生异常,但是不能被catch和catch的不匹配:
如果出现不能被catch那么程序就会报错,将异常往上抛,抛给JVM。
上面讲的是一段代码只有一种异常的最简单的情况;更多的时候一段代码不止一种异常:
这里的try中有多行代码,可能出现的异常有多种:数学异常,String字符串的空指针异常,在try中如果出现了异常时,会在catch中寻找对应可以解决的catch块,但是如果将exception放在三个catch的最前面,就会报错,因为exception是所有异常的超类,出现异常必然会进入到exception中,后面的两个catch就会失效了
使用throw和throws:
在java本身的语法中就是对异常执行抛出的动作,java本身的语法 会把异常一层一层的往上抛,方法中出现了异常,则会把异常抛给调用它的主函数,主函数无法解决,就会把异常再次往上抛出,最后抛到JVM导致JVM死掉。
使用throws抛出的运行时异常相当于提示调用者,该方法有风险,至于是否处理该风险,由调用者决定;如果throws抛出的是检查时异常,那么调用者自己就必须在调用的时候进行处理(利用try ... catch),当然通过throws可以同时抛出多个异常.
------------------------------异常案例------------------------------------
package javaexception;
publicclassExceptionTest1{
publicstaticvoidmain(String[]args){
Workerworker=newWorker();
try{
worker.work(11);
}catch(Exceptione){
Doctordoctor=newDoctor();
try{
doctor.cure(worker);
System.out.println("治好了");
}catch(Exceptione1){
System.out.println("die");
}
}
}
}
classWorker{
privatebooleanalive=true;
publicbooleanisAlive(){
returnalive;
}
publicvoidsetAlive(booleanalive){
this.alive=alive;
}
//工作的方法
publicvoidwork(intcount)throwsException{
if(count>10){
thrownewException("生病");
}else{
System.out.println("正常工作");
}
}
}
classDoctor{
publicvoidcure(Workerworker)throwsException{
intt=(int)(Math.random()*10000);
if(t==4512){
worker.setAlive(false);
thrownewException("death");
}else{
worker.setAlive(true);
}
}
}
--------------------------------------------
运行时异常:
捕获:
特别提醒:在try... catch... finally中 finally最好不省略,因为finally是保证程序是否发生异常,都必须执行的代码(即使我们在try块中强行return之后,finally中依然会执行),(例如我们在I/O流里面,必须做的关闭操作就应该放在finally中) ||需要强调的是:唯一能终止finally执行的操作就是 System.exit(0); 及其它相关类似操作,这一类操作是直接终止程序的运行,关闭JVM。
如果在finally中发生异常的话,照样也会程序中断,因为没有人处理这个异常。
抛出:
Throw表示手动抛出一个异常,throws是声明该方法可能会抛出的异常(运行时异常调用者不用必须处理;只是知道这里会抛出这样一个异常)
检查时异常:
捕获:
printStackTrace是打印异常堆栈,但是一般我们不建议打印异常堆栈(IDE工具里JVM默认生成的),具体问题具体处理,一层一层的打印堆栈是比较耗性能的。
抛出:
如果抛出的是检查时异常那么就必须被处理,要么在手动抛出的地方立马用try catch进行处理,要么继续往上抛,抛给调用这个方法的方法或者主函数,如下例:
动漫女孩官方版下载v1.0 安卓版
其它手游 38.4M
下载全民自行车特技手机版下载v1.1 安卓版
其它手游 262.0M
下载机甲勇者变形钢铁人版下载v1.0.1 安卓版
其它手游 10.2M
下载战争堡垒世界现代战争模拟游戏下载v 1.2 安卓版
其它手游 89.3M
下载奇妙小马美容化妆官方版下载v2.3 安卓版
其它手游 60.6M
下载吞噬进化游戏下载v1.0.0 安卓版
其它手游 41.4M
下载恐龙向前冲游戏下载v1.0.0 安卓版
其它手游 110.4M
下载成语拼拼拼红包版2022下载v3.6.4 安卓版
其它手游 32.2M
下载城市道路模拟驾驶游戏下载v300.1.0.3018 安卓版
下载
超级跑车游戏下载v1.0.0 安卓版
下载
真实巴士驾驶模拟器游戏下载v1.0 安卓版
下载
真实模拟地铁驾驶手机版下载v1.0 安卓版
下载
快刀忍者小游戏下载v1.0.0 安卓版
下载
超级万人迷手机版下载v1.0.1 安卓版
下载
转折的球球手机版下载v1.0.3 安卓版
下载
迷你城市大冒险游戏下载v1.0.1 安卓版
下载