更新时间:2019-04-12 10:35:10 来源:极悦 浏览2164次
在写代码的过程中,我们很容易忽略一些问题,针对这些问题小编汇总了以下几点,希望可以帮助到大家:
纠结的同名
现象
很多类的命名相同(例如:常见于异常、常量、日志等类),导致在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还容易浪费容量。
在中,除了上面枚举的一些容易忽视的问题,日常实践中还存在很多。相信在不断的实践中自己就可以发现并改正。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习