空指针异常是不是低级错误:掌握这四种避免空指针异常的方法
空指针异常是导致Java程序运行中断最常见的原因,相信每个程序猿都碰见过,也就是NullPointException,我们通常简称为NPE,本文告诉大家如何优雅避免NPE。
1.数据准备
UML类关系图:
ADDRESS
2.实战:获取用户所在的城市
2.1.直接获取;容易出现空指针异常。
2.2.使用if-else判断;避免了出现空指针的问题,但是代码结构层次嵌套多,不美观
2.3.使用工具类美化一下if判断代码
2.4.使用Optional解决了层次多的问题也避免了空指针的问题,当我们配合使用orElse时,会先执行orElse方法,然后执行逻辑代码,不管是否出现了空指针。
2.5.使用断言处理接口入参,检查假设和前置条件是否满足,以及检查空值情况,提前捕获空指针异常并进行处理
2.6.使用@Nullable注解,标识变量或方法参数和返回值是否可以为 null,以便在编译期或开发工具中提示可能的 NullPointerException 风险
/** * 使用注解 @Nullable * @author 百里 */public class BaiLiNonNullDemo { public static void printString(@Nullable String str) { System.out.println(str.toString()); } @Nullable public static String getString() { RETURN null; } public static void main(String[] args) { String str = null; printString(str); getString().toString(); User user = new User(); user.getAddress().getCity(); }}CALL TO 'TOSTRING(' IS REDUNDANTON 'TOSTRING' MAY PRODUCE 'NULLPOINTEREXCEPTION'METHOD INVOCATION 'TALT ENTER ASSERT'STR ! NULL'ALT SHIFT ENTERMORE ACTIONS..JAVA.LANG.STRING@NOTNULL@CONTRACT(PURE 三 TRUE) PUBLIC STRING TOSTRING(THIS OBJECT (WHICH IS ALREADY A STRING!) IS ITSELF ROOMRETURNED.NG IN INTERFACE CHARSEQUENCESPECIFIED BY: TOSTRING INOVERRIDES: TOSTRING IN CLASS OBJECTTHE STRING ITSELF.RETURNS:< 1.8>(RTJAR)000
2.7.额外补充
JDK17优化了空指针异常信息(Helpful NullPointerExceptions) 通过精确描述哪个变量为空来提高JVM生成的空指针异常信息的可用性。 即,以前的空指针异常信息不会告诉你具体是哪个对象为null,当运行的语句是对一个嵌套结构的对象做连续的方法调用(如"a.getb().getc().xxx()")时,就需要进一步分析或调试才能判断出谁是null。而该特性加入以后则直接在异常信息中说明值为null的对象是哪个。
Java复制代码
/** * @author 百里 */public class BaiLiNpeDemo { public static void main(String[] args) { Address myAddress = new Address("123 Main St", null, "CA"); User myUser = new User("John Doe", 35, myAddress); System.out.println(myUser.getAddress().getCity().trim()); }}
执行结果:
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.trim()" because the return value of "npe.Address.getCity()" is null at npe.BaiLiNpeDemo.main(BaiLiNpeDemo.java:16)
- 02-21沃尔沃xc40什么时候上市?售26.98-35.48万元全系换2.0T
- 01-30放弃一段感情会有什么感觉?是什么会让你放弃一段感情呢
- 03-06月薪8000买什么二手车合适有面子?月薪8000内,新车二手车哪个值得买
- 02-25林立树和白花花吻戏:这对双生花的吻戏看得我头皮发麻
- 05-27300英雄是个成功的游戏吗?6周年庆典现已盛大开启
- 05-29天龙八部荣耀版代币怎么最划算?天龙八部荣耀版活动暴击
- 05-09用眉粉怎么画出自然好看的眉毛?眉里目间怎么样用眉粉画眉毛
- 01-20杭州亚运会如何体现新发展理念?杭州亚运会落幕承载美好向往
- 01-27西游记第五十回独角兕大王:精读西游记95回假合真形擒玉兔
- 05-19看透人世繁华世态炎凉:世态炎凉,看淡就好
- 10-15为什么黄金身高是一米六八?研究表明人类黄金身高低于1.8米
- 05-02dnf武极二档技能详情,武极落火还可以这样柔
- 04-13首句不入韵的七言绝句:绝句首句不入韵首联要对仗吗
- 11-28春暖花开最美不过人间四月天,人间三月,春暖花开一路繁花相伴
- 04-02蝴蝶吃什么食物?蝴蝶的一生
- 05-13开通微信视频号的流程:教你如何开通微信视频号
热门
推荐
- 1男性长期憋尿有什么危害362
- 2物业经理就职演讲稿373
- 3享受包饺子的快乐周记277
- 4白色金鱼草的花语寓意及传说故事144
- 5会计类个人简历范文参考380
- 6小学英语教师支教总结范文195
- 7“创建卫生村计划”卫生工作计划256
- 8南山南吉他弹唱教学简谱156