首先申明一个实体类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行会发生异常,因为对父集合进行修改会导致,将会导致返回的子集合失效:

异常问题集锦

 

本文借鉴于:http://www.cnblogs.com/mafly/p/trap.html

相关文章:

  • 2022-12-23
  • 2022-01-08
  • 2021-05-01
  • 2021-05-18
  • 2021-11-17
  • 2021-07-04
  • 2021-12-26
猜你喜欢
  • 2022-01-18
  • 2022-12-23
  • 2021-08-29
  • 2022-12-23
相关资源
相似解决方案