首页 > 代码库 > 7:合成的语法

7:合成的语法

  考虑以下代码:

 1 //: SprinklerSystem.java // 2 class WaterSource {  3     private String s;  4     WaterSource() {  5         System.out.println("WaterSource()");  6         s = new String("Constructed"); 7         }  8     public String toString() { return s; } 9     }10 public class SprinklerSystem { 11     private String valve1, valve2, valve3, valve4; 12     WaterSource source; 13     int i; 14     float f; 15     void print() { 16         System.out.println("valve1 = " + valve1); 17         System.out.println("valve2 = " + valve2); 18         System.out.println("valve3 = " + valve3); 19         System.out.println("valve4 = " + valve4); 20         System.out.println("i = " + i); 21         System.out.println("f = " + f); 22         System.out.println("source = " + source);23 } public static void main(String[] args) { 24     SprinklerSystem x = new SprinklerSystem(); 25     x.print();26 }27 } ///:~

    WaterSource类中的toString方法为我们设置的,但是如果去掉这个方法,输出结果也不会有任何改变。这是因为所有的非基本类型的对象均会有一个toString的方法,每当我们想要一个String类型,却获得非此类型的对象,编译器便会调用这种方法。

    各种实验:1:如果我们将12行改为WaterSource source = new WaterSource();那么运行结果便是:source=Constructed;这是因为当我们new source类的时候,构建器WaterSource中的语句便会执行一次,此时将变量s设置为Constructed,故调用source方法的时候,返回的便是当前s的值。

         2:如果我们去掉toString方法并new source的时候,此时会结果会是类似source=test.WaterSource@15db9742的一行,这个结果是显示source类在内存中的地址。

  

7:合成的语法