[心得] Effective Java心得笔记

通读了Java编程思想,发现是个书呆子。还是不会写代码啊。。
所以别光看不练,看千本书不如练熟一本!

学习编程艺术,首先要学会基本的规则。
然后才知道什么时候打破这些规则。

Java支持4种类型:
接口interface
类calss
数组arrayList
基本类型primitive

前3种类型通常称为引用类型。
类实例和数组都是对象,而基本类型的值则不是对象。

签名不包含它的返回类型。

public static Boolean valueof(Boolean b) {
  return b?Boolean.TRUE:Boolean.False;

静态工厂方法与构造器相比,优势:
调用可以起有含义的名称;
不必在每次调用时实例化新对象;
它们可以返回原返回类型的任何子类型的对象。

缺点如下:
类如果不含有公有的或受保护的构造器,就不能被子类化。它与其它静态方法无本质区别。

builder模式不直接调用构造函数,而是很巧妙地返回builder对象本身,从而支持级联式初始化。

package com.test;

/**
 * Created by tangchen on 2016/11/11.
 */
public class NutritionFacts {
    private final int servingSize;
    private final int servings;
    private final int calories;
    private final int fat;
    private final int sodium;
    private final int carboydrate;

    public static class Builder {
        private final int servingSize;
        private final int servings;

        private int calories = 0;
        private int fat = 0;
        private int carbohydrate = 0;
        private int sodium = 0;

        public Builder(int servingSize, int servings) {
            this.servingSize = servingSize;
            this.servings = servings;
        }

        public Builder calories(int val) {
            calories = val;
            return this;
        }

        public Builder fat(int val) {
            fat = val;
            return this;
        }

        public Builder carbohydrate(int val) {
            carbohydrate = val;
            return this;
        }

        public Builder sodium(int val) {
            sodium = val;
            return this;
        }

        public NutritionFacts build() {
            return new NutritionFacts(this);
        }
    }

    private NutritionFacts(Builder builder) {
        servingSize = builder.servingSize;
        servings = builder.servings;
        calories = builder.calories;
        fat = builder.fat;
        sodium = builder.sodium;
        carboydrate = builder.carbohydrate;
    }
}

usage:
//builder的setter方法返回builder本身,以便可以把调用链接起来
NutritionFacts cocaColca= new NutritionFacts.Builder(240,8).calories(100).sodium(35).carbohydrate(27).build();

未完待续

你可能感兴趣的:(Java)