学Java编程中哪些问题容易忘记?


  在写代码的过程中,我们很容易忽略一些问题,针对这些问题小编汇总了以下几点,希望可以帮助到大家:


学Java编程中哪些问题容易忘记?.jpg


  纠结的同名


  现象


  很多类的命名相同(例如:常见于异常、常量、日志等类),导致在import时,有时候张冠李戴,这种错误有时候很隐蔽。因为往往同名的类功能也类似,所以IDE不会提示warn。


  解决


  写完代码时,扫视下import部分,看看有没有不熟悉的。替换成正确导入后,要注意下注释是否也作相应修改。


  启示


  命名尽量避开重复名,特别要避开与JDK中的类重名,否则容易导入错,同时存在大量重名类,在查找时,也需要更多的辨别时间。


  不要影响彼此


  现象


  在释放多个IO资源时,都会抛出IOException,于是可能为了省事如此写:


  publicstaticvoidinputToOutput(InputStreamis,OutputStreamos,booleanisClose)throwsIOException{BufferedInputStreambis=newBufferedInputStream(is,1024);BufferedOutputStreambos=newBufferedOutputStream(os,1024);….if(isClose){bos.close;bis.close;}}


  假设bos关闭失败,bis还能关闭吗?当然不能!


  解决办法


  虽然抛出的是同一个异常,但是还是各自捕获各的为好。否则第一个失败,后一个面就没有机会去释放资源了。


  启示


  代码/模块之间可能存在依赖,要充分识别对相互的依赖。


  忘设初始容量


  现象


  在JAVA中,我们常用Collection中的Map做Cache,但是我们经常会遗忘设置初始容量。


  cache=newLRULinkedHashMap<K,V(maxCapacity);


  解决


  初始容量的影响有多大?拿LinkedHashMap来说,初始容量如果不设置默认是16,超过16×LOAD_FACTOR,会resize(2*table.length),扩大2倍:采用EntrynewTable=newEntry[newCapacity];transfer(newTable),即整个数组Copy,那么对于一个需要做大容量CACHE来说,从16变成一个很大的数量,需要做多少次数组复制可想而知。如果初始容量就设置很大,自然会减少resize,不过可能会担心,初始容量设置很大时,没有Cache内容仍然会占用过大体积。其实可以参考以下表格简单计算下,初始时还没有cache内容,每个对象仅仅是4字节引用而已。


  启示


  不仅是map,还有stringBuffer等,都有容量resize的过程,如果数据量很大,就不能忽视初始容量可以考虑设置下,否则不仅有频繁的resize还容易浪费容量。


  在Java编程中,除了上面枚举的一些容易忽视的问题,日常实践中还存在很多。相信在不断的实践中自己就可以发现并改正。


  


  


上一篇:大学计算机毕业生和IT培训毕业生有什么区别?
下一篇:Java面试题系列之Java基础类库(三)

开班信息