日期:2014-05-20  浏览次数:20788 次

关于初始化引用的疑问
小弟最近在读think in java 里面复用类的一段代码及说明,我想知道这段代码在哪体现了初始化的这4种方式 请各位帮忙讲解下

编译器并不是简单地为每一个引用都创建默认对象.这一点是很有意义的.因为若真要那样做的话,就会在许多情况下增加不必要的负担。
如果想初始化这些引用,可以在代码中的下列位置进行:

1、在定义对象的地方。这意味着它们总是能够在构造器被调用之前被初始化。
2、在类的构造器中。
3、就在正要使用这些对象之前.这种方式称为惰性初始化。在生成对象不值得及不必每次都生成对象的情况下,这种方式可以减少额外的负担。
4、使用实例初始化。
以下是这四种方式的示例:


Java code




class Soap{
    private String s;
    Soap(){
        System.out.println("Soap");
        s = "Constructed";
    }
    public String toString(){
        return s;
    }
}

public class Chushihua {
    
    private String s1 = "happy" , 
                   s2 = "happy" ,
                   s3,s4;
    private Soap castille;
    private int i;
    private float toy;
    public Chushihua(){
        System.out.println("Inside bath");
        s3 = "Joy";
        toy = 3.14f;
        castille = new Soap(); 
    }
    {
        i = 47;
    }
    public String toString() {
        if(s4 == null)
            s4 = "Joy";
        return 
           "s1 = " + s1 + "\n" + 
           "s2 = " + s2 + "\n" +
           "s3 = " + s3 + "\n" +
           "s4 = " + s1 + "\n" +
           "i = " + i + "\n" +
           "toy = " + toy + "\n" +
           "castille = " + castille ;
    }
    public static void main(String args[]){
        
        Chushihua b = new Chushihua();
        System.out.println(b);
    }
}






Output: 
  Inside bath
  Soap
  s1 = happy
  s2 = happy
  s3 = Joy
  s4 = happy
  i = 47
  toy = 3.14


------解决方案--------------------
Java对象及其引用

初学Java时,在很长一段时间里,总觉得基本概念很模糊。后来才知道,在许多Java书中,把对象和对象的引用混为一谈。可是,如果我分不清对象与对象引用,那实在没法很好地理解下面的面向对象技术。把自己的一点认识写下来,或许能让初学Java的朋友们少走一点弯路。

为便于说明,我们先定义一个简单的类:

 
Java code
      class Vehicle {

int passengers;       

int fuelcap;

int mpg;

}

------解决方案--------------------
楼主看书不仔细。我现在也在看这本书。书中,明明很清楚的注释出了各种初始化方式出现的地方。你再去看下吧。。。