专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 常见问题 学Java编程中哪些问题容易忘记?

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

更新时间:2019-04-12 10:35:10 来源:动力节点 浏览2053次

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

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

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>