笔记-java之不可变集合、异常处理


活动地址:CSDN21天学习挑战赛

学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您:
想系统/深入学习某技术知识点…
一个人摸索学习很难坚持,想组团高效学习…
想写博客但无从下手,急需写作干货注入能量…
热爱写作,愿意让自己成为更好的人…

不可变集合

不可变集合就是不可被修改的集合,集合的数据项在创建的时候提供,并且在整个生命周期中都不可变。否则报错。

为什么要创建不可变集合?
如果某个数据不能被更改,把它防御性的拷贝到不可变集合中是个很好的选择,或者当集合对象被不可信的库调用时,不可变形式是安全的。

如何创建不可变集合?
List、Set、Map接口中,都存在of方法可以创建不可变集合。
在这里插入图片描述

异常处理

什么是异常?
异常是程序在“编译”或者“执行”过程中可能出现的问题,注意:语法错误不算在异常体系中。
常见异常比如:数组索引越界、空指针异常、日期格式异常等。

为什么要学习异常?
异常一旦出现,如果没有提前处理,程序就会退出JVM虚拟机而终止。
研究异常并且避免异常,然后提前处理异常,体现的是程序的安全,健壮性。

异常体系
Throwable包含Error、Exception
Exception包含RuntimeException以及除RuntimeException之外所有的异常

Error:系统级别问题,JVM退出等,代码无法控制
Exception:java.lang包下,称为异常类,它表示程序本身可以处理的问题。
RuntimeException及其子类:运行时异常,编译阶段不会报错。(空指针异常,数组索引越界异常)
除RuntimeException之外的所有异常:编译时异常,编译器必须处理的,否则程序不能通过编译。(日期格式异常)

运行时异常,在编译成class文件不需要处理,在运行字节码文件时可能出现的异常,运行时异常编译阶段不会出错,是运行时才可能出错的,所以编译阶段不处理也可以。建议在最外层调用处集中捕获处理即可。
常见的运行时异常:

数组索引越界异常:ArrayIndexOutOfBoundsException
空指针异常:NullPointerException
数字操作异常:ArithmeticException
类型转换异常:ClassCastException
数字转换异常:NumberFormatException
运行时异常:一般是程序员没有考虑好或者是逻辑不严谨引起的程序错误,程序员水平不行。

编译时异常:是在编译成class文件时必须要处理的异常,也称之为受检异常
编译时异常的作用:担心程序员水平不行,在编译阶段就爆出一个错误,目的在于提醒不要出错。

编译时异常的处理形式:

出现异常直接抛出去给调用者,调用者也继续抛出去
出现异常自己捕获,不麻烦别人
前两者结合,出现异常直接抛出去给调用者,调用者捕获处理

异常处理方式1——throws
throws:用在方法上,可以将方法内部出现的异常抛出去给本方法的调用者处理
这种方式并不好,发生异常的方法自己不处理异常,如果异常最终抛出去给虚拟机将引起程序死亡。

抛出异常格式:
方法 throws 异常1,异常2,异常3…{
}

规范做法:
方法 throws Exception{
}//代表可以抛出一切异常

异常处理方式2——try…catch…
监视捕获异常,用在方法内部,可以将方法内部出现的异常直接捕获处理。
这种方法还可以,发生异常的方法自己独立完成异常的处理,程序可以继续往下执行。

格式:
try{
//监视可能出现异常的代码
}catch(异常类型1 变量){
//处理异常
}catch(异常类型2 变量){
//处理异常
}…

建议格式:
try{
//可能出现异常的代码
}catch(Exception e){
e.printlStackTrace();//直接打印异常栈信息
}
Exception可以捕获处理一切异常类型

异常处理方式3——前两者结合
方法直接将异常通过throws抛出去给调用者,调用者收到异常后直接捕获处理

总结:

在开发中按照规范来说第三种方式是最好的:底层的异常抛出去给最外层,最外层集中捕获处理
实际应用中,只要代码能够编译通过,并且功能完成,那么每一种异常处理方式似乎也都是可以的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值