java中的组合技术,只需要将一个对象引用置于一个新类之中即可,对于非基本类型的对象,必须将其引用置于新的类中;对于基本类型我们可以直接在类中定义他。
实例代码——组合技术
class WaterSource{private String wname;WaterSource(){System.out.println("WaterSource");wname="长白山";}@Overridepublic String toString() {return wname;}}class SpinkLerSytem {//基本类型数据,直接定义private String value1,value2,value3,value4;private int i;private float f;private WaterSource waterSource=new WaterSource();//非基本类型数据@Overridepublic 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====";//构造器初始化}@Overridepublic 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;}@Overridepublic 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 一次执行一次
