首先申明一个实体类User
1.自动解箱抛 NPE
编写一个简单的调用方法
结果就跑抛出了异常:
返回值为int类型,但是在获取ID实际值的时候,ID值是为NULL值所以会报空指针异常。
2.级联调用产生的异常
异常情况:
第27行报错,联级调用时,user.getUsername为空,故调用toString()方法报出NULL Pointer Exception
3.Map集合下的NPE问题
需要注意的是,Map集合中每种集合是不是都允许存储空键值对。
集合类 | key | value | super | 说明 |
---|---|---|---|---|
Hashtable | 不允许为Null | 不允许为Null | Dictionary | 线程安全 |
ConcurrentHashMap | 不允许为Null | 不允许为Null | AbstractMap | 分段锁技术 |
TreeMap | 不允许为Null | 允许为Null | AbstractMap | 线程不安全 |
HashMap | 不允许为Null | 不允许为Null | AbstractMap | 线程不安全 |
直接上图片,图中分别向两种集合(HashMap以及ConcurrentHashMap)中添加数据:
第38行抛出异常
4.foreach 遍历集合删除元素
说明:在遍历集合时对元素进行 add/remove 操作要使用 Iterator,如果使用ForEach可能会产生异常情况
(1)使用ForEach遍历集合
出现异常,48行报错
(2)使用Iterator遍历集合
可见运行正常
5.Arrays.asList() 数组转换集合
说明:Arrays.asList()
把数组转换成集合时,不能使用其修改集合相关的方法,它的 add/remove/clear 方法会抛 出 UnsupportedOperationException
异常。
直接上代码图片:
运行异常,出现UnsupportedOperationException
异常,因为asList()
的返回对象是一个 Arrays 内部类,并没有实现集合的修改方法。异常图片:
6.toArray() 集合转换数组
说明:当我们需要把一个集合转换为数组时,往往会调用 toArray()
方法,如果直接进行类型强制转换,会发生类型转换异常。
直接上代码图片:
出现类型转换异常:ClassCastException,具体如下图:
7.subList 的使用
关于SubList的介绍:
1,该方法返回的是父list的一个视图,从fromIndex(包含),到toIndex(不包含)。fromIndex=toIndex 表示子list为空。
2,父子list做的非结构性修改(non-structural changes)都会影响到彼此:所谓的“非结构性修改”,是指不涉及到list的大小改变的修改。相反,结构性修改,指改变了list大小的修改。
3,对于结构性修改,子list的所有操作都会反映到父list上。但父list的修改将会导致返回的子list失效。
直接上代码图片:
第97行会发生异常,因为对父集合进行修改会导致,将会导致返回的子集合失效: