• [Effective Java 读书笔记] 第7章 方法


    第39条 必要时进行保护性拷贝

    对于可变类,如果作为参数传入到自己的类里,并作为自己类的数据使用存储时,需要进行保护性拷贝,比如Date是可变的,如果传入一个Date类,最好做一个保护性拷贝,以免在调用完Period后,外面将传入的参数start进行更改,影响自己类的this.start:

    public Period(Date start)
    {
        this.start = new Date(start.getTime());        
    }

    同理,如果是作为返回对象,也需要做返回的保护性拷贝

    public Date start()
    {
         return new Date(this.start.getTime());  
    }

     第41条 慎用重载

    类中方法的重载,如果只是参数类型不同,其他都相同,那么可能出现问题。因为重载方法是在编译时决定调用哪一个的,而编译时不能像运行时那样向下转型获得真实的对象类型:

    public class CollentionClassifier{
    public static String classify(Set<?> s){
    }
    public static String classify(Collections<?> s){
    }
    public static void main(String[] args){
        
    Collection<?> cll = new HashSet<String>();
    classify(cll);//因为编译时决定重载方法的调用,而编译时只知道Collection,不知道它是Set类型,所以会走到Collection参数的方法中
    }

    而方法的覆盖就是动态的,就是子类覆盖父类的方法,使用对应的对象实例调用方法,会调用到自己类中的方法。

    安全的方法,是不要使用两个具有相同参数数目的重载方法,甚至可以尽量避免重载方法的使用,使用readBoolean(),readInt()这样的方法

  • 相关阅读:
    Java核心技术(初阶)知识点复习——[2]面向对象思想
    Java核心技术(初阶)知识点复习——[1]Java的类结构和main函数
    printStream与printWriter
    java反射的初步探索
    JDKJREJVM的关系
    树链剖分模板
    树状数组模板2
    树状数组模板1
    树状数组+欧拉降幂
    线段树模板二
  • 原文地址:https://www.cnblogs.com/jiangz222/p/4934700.html
Copyright © 2020-2023  润新知