问题十七:什么是不可修改对象(Immutable Object)?你能否写一个例子?
不可修改对象是那些一旦被创建就不能修改的对象。对这种对象的任何改动的后果都是会创建一个新的对象,而不是在原对象本身做修改。例如Java中的String类就是不可修改的。大多数这样的类通常都是final类型的,因为这样可以避免自己被继承继而被覆盖方法,在覆盖的方法里,不可修改的特性就难以得到保证了。你通常也可以通过将类的成员设置成private但是非final的来获得同样的效果。
另外,你同样要保证你的类不要通过任何方法暴露成员,特别是那些可修改类型的成员。同样地,当你的方法接收客户类传入的可修改对象的话,你应该使用一个复制的对象来防止客户代码来修改这个刚传入的可修改类。比如,传入java.util.Date对象的话,你应该自己使用clone()方法来获得一个副本。
当你通过类函数返回一个可修改对象的时候,你也要采取类似的防护措施,返回一个类成功的副本,防止客户代码通过此引用修改了成员对象的属性。千万不要直接把你的可修改成员直接返回给客户代码。
问题十八:如何在不使用任何分析工具的情况下用最简单的方式计算某个方法的执行所花费的时间?
在执行此方法之前和之后获取一个系统时间,取这两个时间的差值,即可得到此方法所花费的时间。
需要注意的是,如果执行此方法花费的时间非常短,那么得到的时间值有可能是0ms.这时你可以在一个计算量比较大的方法上试一下效果。
long start=System.currentTimeMillis();method();long end=System.currentTimeMillis();System.out.println(“Time taken for execution is ”+(end-start));
问题十九:当你要把某个类作为HashMap的key使用的话,你需要重写这个类的哪两个方法?
为了使类可以在HashMap或Hashtable中作为key使用,必须要实现这个类自己的equals()和hashCode()方法。具体请参考问题十四。
问题二十:你如何阻止客户代码直接初始化你的类的构造方法?例如,你有一个名为Cache的接口和两个具体的实现类MemoryCache和DiskCache,你如何保证这两个类禁止客户代码用new关键字来获取它们的实例?
以上就是烟台软件培训给大家做的内容详解,更多关于编程课程的学习,请继续关注烟台软件培训。