这里只是用于演示catch块捕获的顺序。捕获多个异常时,可以使用catch(Exception1 | Exception2| Exception3)的形式来优化捕获异常的代码结构。
将声明异常、抛出异常和捕获异常综合在一起。
例如:
public static void main(String[] args) {
for(int i = 2; i < 100; i++) {
//对运行时异常,可以选择捕获也可以不选择捕获
if(isPrime(i)) {
System.out.print(i + " ");
}
}
} //检测是否为质数
public static boolean isPrime(int num) throws IllegalArgumentException{
//抛出一个运行时异常
if(num < 2) throw new IllegalArgumentException(“质数不能小于2”);
for(int i = 2; i < num; i++) {
if(num % i == 0) {//若能被1和本身之外的数整除,则非质数
return false;
}
}
return true;
}
因为抛出的是运行时异常,可以选择捕获或者不捕获。但如果抛出检查异常,在编译时就必须选择捕获或者声明。
- finally语句块
无论是否有异常,finally块中的代码总是会被执行的。 finally语句在执行关闭资源的语句时非常有用。
//第一种形式 式
try {
//执行程序代码,可能会出现异常
}catch(Exception e) {
//捕获异常并处理
}finally {
//必执行的代码
}
//第二种形
try {
//执行程序代码,可能会出现异常
}finally {
//必执行的代码
}
- try-catch-finally的执行流程
try块中引起异常,异常代码之后的语句不再执行,若被catch块捕获,执行匹配的catch块,然后执行finally语句。若catch块不能捕获异常,则执行finally语句,之后将异常传递给这个方法的调用者。
Scanner sc = new Scanner(System.in);
int a = 0; //保证局部变量a在各个块中可用
try {
a = sc.nextInt();
if(a < 0) throw new IllegalArgumentException();
System.out.println(“执行完try语句。a:” + a);
}catch(IllegalArgumentException e){
System.out.println(“执行catch语句”);
System.out.println(“数值小于0,不符合。已设为默认值 1”);
a = 1;
}finally {
System.out.println(“执行finally语句。a:” + a);
}
输出并分析:
//未引发异常 //引发异常并捕获
5 -5
执行完try语句。a:5 执行catch语句
执行finally语句。a:5 数值小于0,不符合。已设为默认值 1
执行finally语句。a:1
- try-finally的执行流程
try块中引起异常,异常代码之后的语句不再执行,直接执行finally语句。 try块没有引发异常,则执行完try块就执行finally语句。
try-finally可用在不需要捕获异常的代码,可以保证资源在使用后被关闭。例如IO流中执行完相应操作后,关闭相应资源;使用Lock对象保证线程同步,通过finally可以保证锁会被释放;数据库连接代码时,关闭连接操作等等。
例如:
//以Lock加锁为例,演示try-finally
ReentrantLock lock = new ReentrantLock();
try {
//需要加锁的代码
}finally {
lock.unlock(); //保证锁一定被释放
}
finally遇见如下情况不会执行:
1、在前面的代码中用了System.exit()退出程序。
2、finally语句块中发生了异常。
3、程序所在的线程死亡。
4、关闭CPU。
- try、catch、finally、throw和throws使用归纳
try、catch和finally都不能单独使用,只能是try-catch、try-finally或者try-catch-finally。
try语句块监控代码,出现异常就停止执行下面的代码,然后将异常移交给catch语句块来处理。
finally语句块中的代码一定会被执行,常用于回收资源 。
throws:声明一个异常,告知方法调用者。
throw :抛出一个异常,至于该异常被捕获还是继续抛出都与它无关。
- Java编程思想一书中,对异常的总结。
在恰当的级别处理问题。(在知道该如何处理的情况下了捕获异常。)
解决问题并且重新调用产生异常的方法。
进行少许修补,然后绕过异常发生的地方继续执行。
用别的数据进行计算,以代替方法预计会返回的值。
把当前运行环境下能做的事尽量做完,然后把相同的异常重抛到更高层。
把当前运行环境下能做的事尽量做完,然后把不同的异常抛到更高层。
终止程序。
进行简化(如果你的
异常模式使问题变得太复杂,那么用起来会非常痛苦)。
让类库和程序更安全。
===================================================================
通过继承Exception类来定义一个异常类。Java已经提供了很多异常类,尽量使用这些异常类而不要创建自己的异常类。除非Java的异常类不能很好地描述问题时,才自定义异常来进行准确描述。对于自定义异常,不需要太多功能,类名能准确描述问题是关键。
例如:
//判断长度是否合法的自定义异常
public class LengthException extends Exception {
public LengthException() {}
public LengthException(String s) {
super(s);
}
@Override
public String getMessage() {
return super.getMessage();
}
}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
总结
机会是留给有准备的人,大家在求职之前应该要明确自己的态度,熟悉求职流程,做好充分的准备,把一些可预见的事情做好。
对于应届毕业生来说,校招更适合你们,因为绝大部分都不会有工作经验,企业也不会有工作经验的需求。同时,你也不需要伪造高大上的实战经验,以此让自己的简历能够脱颖而出,反倒会让面试官有所怀疑。
你在大学时期应该明确自己的发展方向,如果你在大一就确定你以后想成为Java工程师,那就不要花太多的时间去学习其他的技术语言,高数之类的,不如好好想着如何夯实Java基础。下图涵盖了应届生乃至转行过来的小白要学习的Java内容:
请转发本文支持一下
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
,那就不要花太多的时间去学习其他的技术语言,高数之类的,不如好好想着如何夯实Java基础。下图涵盖了应届生乃至转行过来的小白要学习的Java内容:
请转发本文支持一下
[外链图片转存中…(img-mAN7tIuU-1712793952164)]
[外链图片转存中…(img-gUWlkbDY-1712793952165)]
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-FNMOvBak-1712793952165)]