如何写好代码----java代码优化

1. 什么是好的代码?
高效正确
便于维护
简洁清晰

2. 如何做?
让代码比你来时更干净
做有意义的命名
别重复自己
注意代码工整

记住:不要把自己当程序员,要把自己当成艺术家,出自你手的代码都是一件艺术品,尽量让她优雅。

3.原则
第一条,关于注释和文档
好的代码不需要注释和文档(不包括设计文档)。

我们要做的,尽量让你的代码简单易懂,如果实在做不到,一定添加简单易懂的注释文字。不要繁琐的长篇大论。

记住:代码里一切注释和文档都是浮云。

第二条,关于代码结构

不要为了实现需求不停的堆代码,讲究下技巧

多用面向对象和面向接口编程,以提高代码的扩展性和可维护性

多用用设计模式,以提高代码的可阅读性和灵活性,避免重复你的代码

记住:简单,优雅,清晰的代码是最能减轻工作量和减少出现问题的方法。

第三条,关于测试
如果可能,尽量让你所有的方法都有测试代码

如果可能,应用测试驱动开发

如果可能,尽量在发布程序的之前运行测试用例并保证没有问题

记住:没有测试的代码都是浮云

4. Tips
1.避免重复初始化。

test1
    HashMap map = new HashMap();
    
    public Test1(){
    //    map = new HashMap();
    }

    public static void main(String[] args) {
        int TT = 1000000;
        long t1 = System.currentTimeMillis();
        for(int i=TT; i>=0; --i) {
            Test1 t = new Test1();
        }
        System.out.println(System.currentTimeMillis()-t1);
        
    }

重复初始化时间:187 172
正常初始化时间: 94 93

test2
    public final static int max(int a, int b) {
        return (a>b)? a:b;
    }

    public static void main(String[] args) {
        final int TT = 1000000;
        int a = 5, b=10;
        int c;
        long t1 = System.currentTimeMillis();
        for(int i=TT; i>=0; --i) {
            c = max(a, b);
        }
        System.out.println(System.currentTimeMillis()-t1);
        long t2 = System.currentTimeMillis();
        for(int i=TT; i>=0; --i) {
            c = (a>b)? a:b;
        }
        System.out.println(System.currentTimeMillis()-t2);
        
    }

final 方法会使用内联方式进行编译,这样会提高性能,不过貌似新的JVM做了优化,第一次运行时会慢一些,以后非final和final性能差不多。

test3
NewObject object=new NewObject();
int value;
if(i>0) {
    value=object.getValue();
}
优化后:
int value;
if(i>0){
    NewObject object = new NewObject();
    Value = object.getValue();
}
就近原则,尽量采用Lazy loading策略,减少内存开销

test4

List?alist=uSvr.getUserinfoList();
for(int i=0;i<alist.size();i++){
。。。
}

优化后:
for(int i=0,p=alist.size();i<p;i++){
。。。
}
循环操作时,尽量使用局部变量,减少内存寻址时间
15 16
0  0


test5
    long t1 = System.currentTimeMillis();
    for (int i = 0; i < 10000000; i++) {
        Test1 t = new Test1();
    }
    System.out.println(System.currentTimeMillis() - t1);
        
    long t2 = System.currentTimeMillis();
    Test1 t = null;
    for (int i = 0; i < 10000000; i++) {
        t = new Test1();
    }
    System.out.println(System.currentTimeMillis() - t2);

减少循环New变量的操作,这种做法会在内存中保存N份这个对象的引用,会浪费大量的内存空间,增加GC
64 63
47 47

test6
避免在做最终条件比较时采用方法返回值的方式进行判断,这样做将增大系统开销,降低性能

while(isTrue()) {
...
}
优化后:
boolean isTrue= isTrue();
while(isTrue) {
...
}

test7
尽量避免在循环体中使用try-catch块,最好在循环体外进行try-cache以提高性能
do{
    try{
        ...
    } catch(Exception e){ }
}while(isTrue)
优化后
try{
    do {
        ...
    }while(isTrue)
}catch(Exception e){}

test8
在多重循环中,如果有可能,尽量将最他的循环放在最内层,最短循环放在最外层,以减少循环切换次数。
for (int i=0; i<100000; i++) {
    for(int j=0; j<10; j++) {
        ...
    }
}
优化后:
for (int j=0; j<10; j++) {
    for(int i=0; i<100000; i++) {
        ...
    }
}

test9
循环内有If-else类逻辑,最好将if-else逻辑判断移到循环体外,以提高性能。
for(int i=0; i<100000; i++)
    if(isTrue){
        doThis
    } else {
        doThat
    }
}
优化后:
if(isTrue) {
    for(int i=0; i<100000;i++) {
        doThis
    }
} else {
    for(int i=0; i<100000;i++) {
        doThat
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值