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进行处理,要么继续往上抛,抛给调用这个方法的方法或者主函数,如下例:
奇妙商场嘉年华最新版本(改名奇妙故事创造家)下载v9.82.63.00 安卓版
其它手游 192.9M
下载天天爱消除官方下载v2.34.0.0Build13 安卓手机版
休闲益智 341.9M
下载爱玩信阳黑七游戏下载v10.50.208 安卓最新版
其它手游 96.1M
下载掌上英雄联盟ios版下载v10.12.2 iphone版
其它手游 346M
下载咪咕快游云游戏ios版下载v10.2.59 iphone版
其它手游 397M
下载罗布乐思roblox国际服最新版ios下载v2.651.836 iphone版
其它手游 258M
下载傲世西游ios版下载v2.116 iPhone版
其它手游 282M
下载宝宝甜品店宝宝巴士免费版下载v9.82.59.01 安卓版
其它手游 140.9M
下载最强NBA官方版下载v1.51.621 安卓版
下载
蛋仔派对4399版下载v1.0.168 安卓游戏盒版
下载
跑跑卡丁车官方竞速版手游下载v1.34.2 安卓版
下载
宝宝巴士世界国际版下载v10.00.75.21 官方安卓最新版
下载
王者荣耀体验服下载v10.11.13.1 安卓2024最新版
下载
2024王者荣耀前瞻版下载v10.11.13.1 安卓版
下载
宝宝奇妙世界游戏手机版(宝宝巴士世界)下载v10.00.75.21 安卓最新版
下载
nba直播ios版下载v7.17.0 iphone版
下载