`

如何写好代码----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
    }
}

分享到:
评论

相关推荐

    google-java-format一个重新格式化Java源代码以符合GoogleJavaStyle的程序

    - **编译好的二进制文件**:可以直接运行在不同操作系统上,对Java代码进行格式化。 - **文档**:介绍如何安装、配置和使用`google-java-format`,以及与其他工具的集成方法。 - **测试用例**:验证`google-java-...

    snappy-java-1.1.8.2-API文档-中文版.zip

    赠送源代码:snappy-java-1.1.8.2-sources.jar; 赠送Maven依赖信息文件:snappy-java-1.1.8.2.pom; 包含翻译后的API文档:snappy-java-1.1.8.2-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.xerial.snappy:...

    mysql-connector-java-8.0.23.zip

    JDBC是Java平台的一部分,允许Java程序通过Java代码来访问和操作数据库。MySQL Connector/J提供了一个接口,使得Java应用程序能够执行SQL语句,处理结果集,管理事务,并实现其他数据库交互功能。 在"mysql-...

    mysql-connector-java-5.1.47 jar包

    MySQL Connector/J是MySQL数据库与Java应用程序之间的重要桥梁,它是一个实现了Java Database Connectivity (JDBC) API的驱动程序,使得Java开发者能够通过编写Java代码来访问和操作MySQL数据库。`mysql-connector-...

    MySQL-connector-java-8.0.28

    MySQL-connector-java-8.0.28 是MySQL数据库与Java应用程序之间通信的重要组件,它是一个JDBC(Java Database Connectivity)驱动程序,使得Java开发者能够通过编写Java代码来访问和操作MySQL数据库。在这个版本中,...

    mysql-connector-java-5.1.7-bin.jar

    在上述代码中,我们连接到本地的MySQL服务器(假设其正在3306端口上运行),并访问名为"mydatabase"的数据库。我们还执行了一个简单的SELECT查询,并打印出结果集中的数据。 值得注意的是,随着时间的推移,MySQL ...

    mysql-connector-java-5.1.40-bin.jar连接器

    MySQL Connector/J是MySQL数据库系统与Java应用程序之间的重要桥梁,它是一个实现了JDBC(Java Database Connectivity)规范的驱动程序,使得Java开发者能够通过编写Java代码来访问、操作MySQL数据库。在这个特定的...

    mysql-connector-java-8.0.29.jar

    MySQL Connector/J 8.0.29 是MySQL数据库与Java应用程序之间通信的重要桥梁,它是一个实现了Java Database Connectivity (JDBC) API的驱动程序,使得Java开发者能够方便地在Java应用中连接并操作MySQL数据库。...

    mysql-connector-java-5.1.22-bin.jar

    MySQL Connector/J是MySQL数据库与Java应用程序之间的重要桥梁,它是一个实现了Java Database Connectivity (JDBC) API的驱动程序,使得Java开发者能够通过编写Java代码来访问和操作MySQL数据库。标题中的"mysql-...

    mysql-connector-java-5.1.45

    2. **MySQL Connector/J的角色**:作为MySQL的JDBC驱动,它实现了JDBC接口,使得Java代码可以通过标准的JDBC调用来连接、查询和操作MySQL数据库。例如,使用`Class.forName()`加载驱动,然后通过`DriverManager.get...

    mysql-connector-java-8.0.24

    - 提供更好的性能,优化了网络通信和数据传输。 - 增强的SSL/TLS支持,确保数据在传输过程中的安全性。 - 对Java 8及更高版本的全面支持,包括Lambda表达式和Stream API的使用。 - 更好的线程安全性和并发处理能力,...

    mysql-connector-java-5.1.45-bin.jar

    1. **加载驱动**:在Java代码中通过`Class.forName()`方法加载`com.mysql.jdbc.Driver`类,注册驱动。 2. **建立连接**:使用`DriverManager.getConnection()`方法,传入数据库URL、用户名和密码,创建数据库连接。 ...

    mysql-connector-java-5.1.37-bin.jar

    随着 MySQL 的发展,新的版本提供了更多的特性,如更好的性能优化、对新特性的支持,以及安全性改进等。因此,对于新项目或升级项目,通常建议使用更现代的驱动版本。 在实际开发中,我们还可以通过配置文件(如 `...

    java代码-使用java解决抓取当前屏幕信息的源代码

    java代码-使用java解决抓取当前屏幕信息的源代码 ——学习参考资料:仅用于个人学习使用!

    sonar-java-plugin-5.12.1.17771.rar

    总的来说,"sonar-java-plugin-5.12.1.17771.rar"是一个强大的Java代码质量检查工具,它通过FindBugs插件增强了SonarQube的分析能力,是构建高效、安全代码审查体系的重要组成部分。对于注重代码质量和安全性的公司...

    mysql-connector-java-5.1.30

    MySQL是世界上最受欢迎的关系型数据库管理系统之一,而`mysql-connector-java-5.1.30`是MySQL官方为Java开发者提供的数据库连接驱动包。这个驱动包使得Java应用程序能够与MySQL数据库进行无缝通信,执行SQL查询,...

    eclipse-java-2023-09-R-linux-gtk-aarch64.tar.gz

    Eclipse Java是Eclipse IDE的一个重要组件,专为Java开发者设计,提供了丰富的代码编辑、调试、构建和测试工具。它支持Java SE、Java EE和Java ME应用程序的开发,同时兼容最新的Java语言特性,如模块化系统...

    taobao-sdk-java

    源代码的提供对于开发者来说非常有价值,因为它提供了更多的透明度,帮助开发者更好地理解和定制SDK的功能。 使用"taobao-sdk-java"时,开发者需要先注册成为淘宝开放平台的开发者,获取到API密钥(AppKey和App...

    java代码优化大全

    ### Java代码优化技巧详解 #### 一、引言 在软件开发过程中,为了提升应用程序的性能,我们需要对Java代码进行优化。这是因为计算机系统的资源(如内存、CPU时间、网络带宽等)是有限的,而优化的目标就是使程序...

    mysql-connector-java-5.1.37jar包和源码

    它提供了一组接口和类,使得Java开发者可以编写数据库无关性的代码,从而轻松地与不同数据库系统交互。MySQL Connector/J实现了这些JDBC接口,使得Java应用能够连接、查询、更新MySQL数据库。 MySQL Connector/J ...

Global site tag (gtag.js) - Google Analytics