通读了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();
未完待续