at java.util.AbstractMap.put(AbstractMap.java:186)
原因:Collections.emptyMap(); 返回的是一个继承自AbstractMap的EMPTY_MAP类,大部分方法没有实现只抛出异常。
在某些情况下,我们经常需要发挥一个空的集合对象,比如说在数据查询时,并不需要发挥一个NULL或是异常,那么就可以返回一个空的集合对象。
异常:java.util.UnknownFormatConversionException
原因:String.format()/System.out.prinlnt()的第一个参数中存在破坏%s/%d输出格式化的字符。
异常:java.lang.IllegalMonitorStateException
使用Object.wait() /wait()方法时,没有取得Object的锁,应该是Synchronized(obj){ obj.wait(); //do something; obj.notify;}。
异常:java.lang.ArrayStoreException:
往数组中存储不匹配的对象。见《TIJ4》
class Apple extends Fruit {} class Jonathan extends Apple {}class Orange extends Fruit {}
Fruit[] fruit = new Apple[10]; fruit[0] = new Fruit(); fruit[0] = new Orange();
编译通过,运行时报错:ArrayStoreException。
异常:Illegal modifier for the enum constructor; only private is permitted.
Enum类型实例化没有任何意义。enum构造函数只允许private和package两种可见性修饰。
异常:Matcher.find()方法返回值和Eclipse debug时在表达式中看到的不同。
Eclipse表达式中Matcher.find()方法会执行find()里面的代码(即使在find()的实现代码中打了断点,也不会产生中断),该方法中会改变Matcher的nextSearchIndex值。本地函数返回时该值已经修改,所以会有不同的值。
异常:使用File.renameTo修改文件名时,一直返回false。
原因:在使用被修改文件名的文件,在IO流中被使用,并且使用完后没有关闭流,关闭流后使用renameTo方法即可该文件名。
异常:乘法计算溢出
代码中需要计算一百年时间的微秒数。
于是定时了常量 static final long MILLISECOND_100YEARS = 100 * 365 * 24 * 60 * 60 * 1000;
发现常量和当前时间相加后得到的long反而小了。将定义改为
final long MILLISECOND_100YEARS = 100L * 365L * 24L * 60L * 60L * 1000L;
计算结果正常。
原因:对整数计算时默认为int型,int型的值范围是-2G~2G-1,不足以表示这个大数字,计算过程中发生溢出,造成计算结果不正确。加上L后,告诉编译器这是一个long型,需要按long型来处理。