java中的组合技术,只需要将一个对象引用置于一个新类之中即可,对于非基本类型的对象,必须将其引用置于新的类中;对于基本类型我们可以直接在类中定义他。
实例代码——组合技术
class WaterSource{
private String wname;
WaterSource(){
System.out.println("WaterSource");
wname="长白山";
}
@Override
public String toString() {
return wname;
}
}
class SpinkLerSytem {
//基本类型数据,直接定义
private String value1,value2,value3,value4;
private int i;
private float f;
private WaterSource waterSource=new WaterSource();//非基本类型数据
@Override
public String toString() {
return "SpinkLerSytem{" +
"value1='" + value1 + '\'' +
", value2='" + value2 + '\'' +
", value3='" + value3 + '\'' +
", value4='" + value4 + '\'' +
", i=" + i +
", f=" + f +
", waterSource=" + waterSource +
'}';
}
public static void main(String[] args) {
SpinkLerSytem spinkLerSytem = new SpinkLerSytem();
System.out.println(spinkLerSytem);
}
}
那么我们可以去思考,对于这些数据类型我们都可以在代码中的什么地方进行初始化呢?
1.在定义对象的地方进行初始化 。
2.在类的构造器中
3.在使用对象的时候进行初始化——惰性初始化
4.实例初始化————?(什么是实例初始化呢?)
对于上面四种初始化的方式,我们通过下面的代码一一展示
实例——四种初始化方式
class Soap {
String str;
Soap(){
System.out.println("soap()");
str="Soap====";//构造器初始化
}
@Override
public String toString() {
return str;
}
}
public class Bath {
private String str1="Tom",//1.定义对象时初始化
str2;//2.惰性初始化,先不对str2赋值,
private int i;
private Soap soap;
Bath(){
soap=new Soap();//3.构造器初始化
}
{//4.实例初始化,即在new 出对象的实例后执行的,new 一次执行一次
int i=47;
}
@Override
public String toString() {
if (str2==null)//此处对str2进行判断为空则赋值
str2="Tom2";
return "str1='" + str1 + '\'' +
", str2='" + str2 + '\'' +
", i=" + i +
", soap=" + soap;
}
public static void main(String[] args) {
Bath b = new Bath();
System.out.println(b);
}
}
OutPut:
soap()
str1='Tom', str2='Tom2', i=0, soap=Soap====
普通代码块和静态代码块的区别:
静态代码块只执行一次
普通代码块new 一次执行一次