Effective java --学习笔记

考虑使用静态工厂方法创建对象

 public static Boolean valueOf(boolean b) {
     return b?Boolean.true:Boolean.false
 }
  • 让开发人员可以根据名称创建对象
  • 创建单例
  • 可以在静态方法中返回原类型对象的任何子对象。

当一个类有好多可选参数时,如何构建

1.使用重叠构造器;重叠构造器虽然可行,当是当有很多参数的时候,客户端代码任然很难阅读
2.javaBeans模式,通过调用默认构造器,然后在调用setXX方法。这样的结果是不能创建不可变类.
3.使用builder模式
package codelife.consumer.controller;
public class Student {
    private final int age;
    private final String name;
    private final int gender;
    private Student(int age,String name,int gender) {
        this.age = age;
        this.name = name;
        this.gender = gender;
    }
    public int getAge() {
        return age;
    }
    public String getName() {
        return name;
    }
    public int getGender() {
        return gender;
    }
    public static class Builder {
        private final int aAge;
        private String name;
        private int gender;
        public Builder(int aAge) {
            this.aAge = aAge;
        }
        public Builder name(String name) {
            this.name = name;
            return this;
        }       
        public Builder gender(int gender) {
            this.gender = gender;
            return this;
        }
        public Student build() {
            Student student = new Student(aAge,name,gender);
            return student;
        }
    }
}

通过私有构造器强化不可实例化的类

避免创建不必要的对象

java中的终结方法

如果一个异常发生在终结方法中,甚至连警告都打印不出来
显示的终止对象的,释放资源通常在try-finally中进行,即时在执行过程中抛出异常,也能释放资源
  try {
  }
  finally {
  }
终结方法的两种用途
  • 可以使用终结方法充当最后的“安全网”,如果用户没有调用FileOutStream的close()方法等。
  • 或是为了终结非关键的本地资源。如果调用了终结方法,那么必须调用super.finalize()

对于所有对象都通用的方法

对象的默认的equals方法默认比较的两个对象的应用是否相同,而不是比较值相同。
instanceof 可以判断对象是否为空
使用equals的注意事项
  • 使用“==”先比较是否是同一个引用对象
  • 使用instanceof 检查对象类型是否是需要比较的类型
  • 把参数转化成正确的类型
  • 对于该类中的每个关键域,检查对象中的域是否与要比较的相同。
  • 当编写了一个类的equals方法时,问自己三个问题:“它是否是对称的”,“传递的”,“一致的”。
覆盖equals时总要覆盖hashcode
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值