Effective Java(51~55)

本文探讨了Java中字符串连接的性能问题,建议使用StringBuilder或StringBuffer替代String以提升效率。此外,还讨论了通过接口而非具体实现类来引用对象的重要性,以及在何种情况下优先考虑接口、类和本地方法的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第51条 当心字符串连接的性能

public class Test {
    public static void main(String[] args) {
        //String
        String a = "";
        long startTime=System.currentTimeMillis();
        for (int i = 0;i<100000;i++){
            a= a+i;
        }
        long endTime=System.currentTimeMillis();
        float excTime=(float)(endTime-startTime)/1000;
        System.out.println("String执行时间:"+excTime+"s");

        //StringBuilder
        StringBuilder b = new StringBuilder("");
        long startTime1=System.currentTimeMillis();
        for (int i = 0;i<100000;i++){
            b.append(i);
        }
        long endTime1=System.currentTimeMillis();
        float excTime1=(float)(endTime1-startTime1)/1000;
        System.out.println("StringBuilder执行时间:"+excTime1+"s");

        //StringBuffer
        StringBuffer c = new StringBuffer("");
        long startTime2=System.currentTimeMillis();
        for (int i = 0;i<100000;i++){
            c.append(i);
        }
        long endTime2=System.currentTimeMillis();
        float excTime2=(float)(endTime2-startTime2)/1000;
        System.out.println("StringBuffer执行时间:"+excTime2+"s");
    }
}

第52条 通过接口引用对象

适合于用类来引用对象的情形:
1.如果没有合适的接口存在,可以用类来引用对象。
例如,考虑值类(String、BigInteger)很少用多个实现编写,他们通常是final的,并且很少有对应的接口。使用这种值类作为参数、变量、域或者返回值类型就比较合适。
2.对象属于一个框架,而框架的基本类型是类,不是接口。(对象属于基于类的框架)
例如java.util.TimerTask抽象类。应该用相关的基类(往往是抽象类)来引用对象,而不是它的实现类。
3.类实现了接口,但是它提供了接口中不存在的额外方法。
例如LinkedHashMap,程序依赖于这些额外的方法,这种类就应该只被用来引用它的实例。

总结:给定的对象是否具有适当的接口应该是很明显的。如果是,用接口引用对象就会使程序更加灵活;如果不是,则使用类层次结构中提供了必要功能的最基础的类。

第53条 接口优先于反射机制

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。

反射机制是一种功能强大的机制,对于特定的复杂系统编程任务,它是非常必要的,但它也有一些缺点。如果你编写的程序必须要与编译时未知的类一起工作,如有可能,就应该仅仅使用反射机制来实例化对象,而访问对象时则使用编译时已知的某个接口或者超类。

第54条 谨慎地使用本地方法

本地方法是指用本地程序设计语言(比如C或者C++)来编写的特殊方法。本地方法在本地语言中可以执行任意的计算任务,并返回到Java程序设计语言。

在使用本地方法之前务必三思。极少数情况下会需要使用本地方法来提高性能。如果你必须要使用本地方法来访问底层的资源,或者遗留代码库,也要尽可能少用本地代码,并且要全面进行测试。本地代码中的一个Bug就有可能破坏整个应用程序。

第55条 谨慎地进行优化

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值