Java基础-类的复用(1)-组合语法

Java中最基础的代码复用就是组合语法,只需要将一个对象置于一个新类中作为一个成员对象即可。例如我们在定义一个台式机的组成类里,需要一个CPU的对象,该CPU对象里也具有多个String对象或者基本数据类型。对于这种非基本类型的对象,我们必须将其引用至新增的类中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
class CPU{
private String brand;
public String toString(){
return "Brand:"+brand;
}
public CPU(String brand){
this.brand=brand;
}
}
public class Computer{
private CPU cpu=new CPU("AMD YES!");
private int i;
private float f;
private String s1,s2,s3,s4;
public String toString(){
return
"CPU:"+cpu+"\n"+
"s1:"+s1+"\n"+
"s2:"+s2+"\n"+
"s3:"+s3+"\n"+
"s4:"+s4+"\n"+
"i:"+i+"\n"+
"f:"+f+"\n";
}

public static void main(String[] amdYes){
Computer computer=new Computer();
System.out.println(computer);
}
}
/*
输出:
CPU:Brand:AMD YES!
s1:null
s2:null
s3:null
s4:null
i:0
f:0.0
*/

上面的两个类均含有一个特殊的方法toString()。每个非基本类型的对象都会有一个toString()方法,当编译器需要一个String但只有一个对象时,该方法会被调用。在System.out.println(computer);的代码里,编译器会首先调用computer对象的toString()方法,后面的"CPU:"+cpu+"\n"编译器会调用cpu对象的toString()方法,将其转换成String。
在输出结果中可知,类中域为基本类型时会被自动初始化为零。但是对象引用如String对象,则会被初始化为null。
编译器并不是简单地为每一个引用都创建默认的对象,否则就会在很多情况下增多系统的负担,如果想初始化这些引用,可以在代码的下列未知进行:
1.在定义对象的地方
2.在类的构造器中
3.在使用这些对象前,在不必每次都生成对象的情况下,可以减小负担
4.实例初始化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Computer(){
//1.在定义对象的地方
private String s1="s1";
private String s2;
private String s3;
private String s4;
public Computer(){
//2.在类的构造器中
this.s2="s2";
}
public String toString(){
//3.在使用这些对象前
if(s3==null){
s3="s3";
}
}
{
//4.实例初始化
s4="s4";
}

}