`
liuzhaodong89
  • 浏览: 59853 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java编程中写出好代码的建议

阅读更多

最近在做应用的性能优化,在review代码的过程中积累了一些规则和经验。做到这些规则的目的很简单,就是写出“优美”的代码来。

 

1、注释尽可能全面

     对于方法的注释应该包含详细的入参和结果说明,有异常抛出的情况也要详细叙述;类的注释应该包含类的功能说明、作者和修改者。

 

2、多次使用的相同变量最好归纳成常量

     多处使用的相同值的变量应该尽量归纳为一个常量,方便日后的维护。

 

3、尽量少的在循环中执行方法调用

     尽量在循环中少做一些可避免的方法调用,这样可以节省方法栈的创建。例如:

for(int i=0;i<list.size();i++){
  System.out.println(i);
}

     可以修改为:

for(int i=0,size=list.size();i<size;i++){
  System.out.println(i);
}

 

4、常量的定义可以放到接口中

     在Java中,接口里只允许存在常量,因此把常量放到接口中声明就可以省去public static final这几个关键词。

 

5、ArrayList和LinkedList的选择

     这个问题比较常见。通常程序员最好能够对list的使用场景做出评估,然后根据特性作出选择。ArrayList底层是使用数组实现的,因此随机读取数据会比LinkedList快很多,而LinkedList是使用链表实现的,新增和删除数据的速度比ArrayList快不少。

 

6、String,StringBuffer和StringBuilder

     这个问题也比较常见。在进行字符串拼接处理的时候,String通常会产生多个对象,而且将多个值缓存到常量池中。例如:

String a="a";
String b="b";
a=a+b;

    这种情况下jvm会产生"a","b","ab"三个对象。而且字符串拼接的性能也很低。因此通常需要做字符串处理的时候尽量采用StringBuffer和StringBuilder来。

 

7、包装类和基本类型的选择

     在代码中,如果可以使用基本数据类型来做局部变量类型的话尽量使用基本数据类型,因为基本类型的变量是存放在栈中的,包装类的变量是在堆中,栈的操作速度比堆快很多。

 

8、尽早的将不再使用的变量引用赋给null

     这样做可以帮助jvm更快的进行内存回收。当然很多人其实对这种做法并不感冒。

 

9、在finally块中对资源进行释放

     典型的场景是使用io流的时候,不论是否出现异常最后都应该在finally中对流进行关闭。

 

10、在HashMap中使用一个Object作为key时要注意如何区分Object是否相同

     在jdk的HashMap实现中,判断两个Object类型的key是否相同的标准是hashcode是否相同和equals方法的返回值。如果业务上需要对两个数据相同的内存对象当作不同的key存储到hashmap中就要对hashcode和equals方法进行覆盖。

 
分享到:
评论
2 楼 liuzhaodong89 2012-06-13  
mysaber 写道
第3个,是内存换效率吗?本人菜鸟,试了下,依次从10~10万个数据,好像差不多,请问怎么能模拟出不考虑运行时机器性能的情况来比较?还有求原理


嗯,可以理解为内存换效率。实际应用中从性能上讲栈的压入和弹出是很快的,即使你在for循环中使用list.size()这种写法对于程序的真实运行性能也不会有太大的损伤。之所以把这条列出来其实是一种平时工作中总结的很多优秀程序员写代码的风格:要把程序的性能尽最大可能进行提升。有时候同一段代码,一个7年经验的和一个2年经验的写出来性能就是有差距,而不同的地方往往都是一些细节。jvm现在做了很多的优化,但是程序员本身我觉得还是不要完全依赖于这些优化。程序员首先是需要关注自己的代码,其次再依靠jvm的优化帮助自己避免一些问题。
1 楼 mysaber 2012-05-31  
第3个,是内存换效率吗?本人菜鸟,试了下,依次从10~10万个数据,好像差不多,请问怎么能模拟出不考虑运行时机器性能的情况来比较?还有求原理

相关推荐

    如何编出健壮的代码,java编程30条规则

    如何编出健壮的代码,java编程30条规则

    万年历Java程序源代码

    Java实现对万年历的编写和开发,给出了详细的源代码和代码注释文档

    java程序设计阅读程序写结果题22道

    9. 阅读下列程序片段,写出运行结果。 public class Test { public static void main(String[] args) { int percent = 10; tripleValue(percent); System.out.println(percent); } public static void ...

    java写爬虫代码

    超简单的 Web 爬虫程序,不过可以在他基础之上改造一下,写出强大点的爬虫!  谢谢提供程序的 blog 友!  //一直在使用和写PHP spider的爬虫程序。如果用JAVA写的话前台可以加入spider 页面 但是jaxa部分要删去,...

    JAVA上百实例源码以及开源项目源代码

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    利用Java写一段居于聊天室代码

    在Java里写出一段服务器跟客服端的GUI界面聊天程序

    java源码包---java 源码 大量 实例

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    JAVA写的windows记事本源代码

    选择后在记事本中显示出来。 三.保存(ctrl+s)→判断:弹出保存对话框→输入文件名: 1. 如果没有填写后缀名→直接命名在名字后添加未.txt后缀 2. 如果填写了后缀名→则直接以保存为用户要求的后缀名。但是在关闭...

    Java源码包100个设计实例.zip

    HAHA CHAT Java仿QQ聊天程序源代码.rar html 标记大全.rar iCHAT聊天室基于Java.rar IP定位器.rar J2ME优化压缩PNG文件.rar J2ME冒险游戏CASPER源代码.rar J2me月光战机游戏源码.rar J2ME黑白棋游戏手机版 v2.1完整...

    java代码实现词法分析器

    用JAVA语言写出词法分析器程序,程序输出单词编号和单词自身的值!!

    用java写的中国象棋源码

    用java写的中国象棋源码,用java写的中国象棋源码

    java源码包2

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    Java开发技术大全(500个源代码).

    ReadAndWriteFile.java 读入数据写出到文件 Student.java 定义一个用来序列化的类 ThreadIn.java 接收数据用的线程类 ThreadOut.java 发送数据用的线程类 TypeFile.java 显示文件内容的类 useScanner.java 用...

    java实验代码

    同时,因正确的编出程序而带来的成就感让我对编程更加感兴趣。对于在这些实验过程中,请教老师、同学互助、查阅资料等基本的学习方式,使我更加领悟到集体和团队的力量,也树立了敢于攻坚的信心。

    Java写的运动检测代码

    支持USB摄像头,能够检测出运动图像,java编写,对编写类似程序的人可以提供参考

    《Java程序设计》课程实验指导书程序代码(答案)(实验一)

    4. 写出实验报告,要求记录编译和执行Java程序当中的系统错误信息提示,并给出解决办法。 四、实验步骤: 1.从http://java.sun.com 上下载最新版本的JDK,并安装。 2.设置环境变量PATH, CLASSPATH, 使得Java程序...

    JAVA上百实例源码以及开源项目

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    《Java程序设计》课程实验指导书程序代码(答案)(实验四)

    《Java程序设计》课程实验指导书程序代码(答案)(实验四:java继承与多态),个人原创,仅供参考与交流。 希望多多交流,共同进步! 实验四 java继承与多态 一、实验目的: 掌握继承、多态的概念与实现方法; ...

    java源码包4

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    复制文件JAVA源代码

    该小程序是用Java实现的文件复制,即将制定文件从一个文件夹下复制到另一个文件夹下。

Global site tag (gtag.js) - Google Analytics