预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共11页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

Java编程中最容易忽略的问题Java编程中最容易忽略的问题在Java编码中,我们容易犯一些错误,也容易疏忽一些问题,下面内容由小编为大家介绍Java编程中最容易忽略的问题,供大家参考!1.纠结的同名现象很多类的命名相同(例如:常见于异常、常量、日志等类),导致在import时,有时候张冠李戴,这种错误有时候很隐蔽。因为往往同名的类功能也类似,所以IDE不会提示warn。解决写完代码时,扫视下import部分,看看有没有不熟悉的。替换成正确导入后,要注意下注释是否也作相应修改。启示命名尽量避开重复名,特别要避开与JDK中的类重名,否则容易导入错,同时存在大量重名类,在查找时,也需要更多的辨别时间。2.想当然的API现象有时候调用API时,会想当然的通过名字直接自信满满地调用,导致很惊讶的一些错误:示例一:flag是true?booleanflag=Boolean.getBoolean("true");可能老是false。示例二:这是去年的今天吗(今年是2012年,不考虑闰年)?结果还是2012年:Calendarcalendar=GregorianCalendar.getInstance();calendar.roll(Calendar.DAY_OF_YEAR,-365);下面的才是去年:calendar.add(Calendar.DAY_OF_YEAR,-365);解决办法问自己几个问题,这个方法我很熟悉吗?有没有类似的API?区别是什么?就示例一而言,需要区别的如下:Boolean.valueOf(b)VSBoolean.parseBoolean(b)VSBoolean.getBoolean(b);启示名字起的更详细点,注释更清楚点,不要不经了解、测试就想当然的用一些API,如果时间有限,用自己最为熟悉的API。3.有时候溢出并不难现象有时候溢出并不难,虽然不常复现:示例一:longx=Integer.MAX_VALUE+1;System.out.println(x);x是多少?竟然是-2147483648,明明加上1之后还是long的范围。类似的经常出现在时间计算:数字1×数字2×数字3…示例二:在检查是否为正数的参数校验中,为了避免重载,选用参数number,于是下面代码结果小于0,也是因为溢出导致:Numberi=Long.MAX_VALUE;System.out.println(i.intValue()>0);解决让第一个操作数是long型,例如加上L或者l(不建议小写字母l,因为和数字1太相似了);不确定时,还是使用重载吧,即使用doubleValue(),当参数是BigDecimal参数时,也不能解决问题。启示对数字运用要保持敏感:涉及数字计算就要考虑溢出;涉及除法就要考虑被除数是0;实在容纳不下了可以考虑BigDecimal之类。4.日志跑哪了?现象有时候觉得log都打了,怎么找不到?示例一:没有stacktrace!}catch(Exceptionex){log.error(ex);}示例二:找不到log!}catch(ConfigurationExceptione){e.printStackTrace();}解决替换成log.error(ex.getMessage(),ex);换成普通的log4j吧,而不是System.out。启示API定义应该避免让人犯错,如果多加个重载的log.error(Exception)自然没有错误发生在产品代码中,使用的一些方法要考虑是否有效,使用e.printStackTrace()要想下终端(Console)在哪。5.遗忘的Volatile现象在DCL模式中,总是忘记加一个Volatile。privatestaticCacheImplinstance;//losevolatilepublicstaticCacheImplgetInstance(){if(instance==null){synchronized(CacheImpl.class){if(instance==null){instance=newCacheImpl();}}}returninstance;}解决毋庸置疑,加上一个吧,synchronized锁的是一块代码(整个方法或某个代码块),保证的是这”块“代码的可见性及原子性,但是instance==null第一次判断时不再范围内的。所以可能读出的是过期的null。启示我们总是觉得某些低概率的事件很难发生,例如某个时间并发的可能性、某个异常抛出的`可能性,所以不加控制,但是如果可以,还是按照前人的“最佳实践”来写代码吧。至少不用过多解释为啥另辟蹊径。6.不要影响彼此现象在释放多个IO资源时,都会抛出IOException,于是可能为