package pig;public class Car {
private static Car car;
public static Car getInstance(){
if(car==null){
car=new Car();
}return car;

}

}
package pig;public class Test {
public static void main(String[] args) {
     Car car1=Car.getInstance();
     Car car2=Car.getInstance();
     System.out.println(car1==car2); }}
红色字那部分实在是不理解,car是一个引用类型变量名,为什么要判断car==null呢?
car==new Car()是不是相当于实例化?
return car返回值返回给谁?
明白的麻烦详细点讲,或者语音也可以,qq号149040935

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【QAI0803】截止到2008-07-28 17:46:07的历史汇总数据(不包括此帖):
    发帖的总数量:1                        发帖的总分数:20                       每贴平均分数:20                       
    回帖的总数量:2                        得分贴总数量:0                        回帖的得分率:0%                       
    结贴的总数量:1                        结贴的总分数:20                       
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:100.00%               结分的百分比:100.00%                  
    无满意结贴率:0.00  %               无满意结分率:0.00  %                  
    敬礼!
      

  2.   

    car是一个引用类型变量名,为什么要判断car==null呢?
    引用类型才能和null进行比较判断,看是否指向了对象,如果没指向任何对象,就是null
    car==new Car()是不是相当于实例化?
    是的.
    return car返回值返回给谁? 
    谁调用这个方法就返回给谁
      

  3.   

    谁调用的方法就返回给谁啊你这句什么意思? Car car1=Car.getInstance();    你说返回给谁
      

  4.   

    在这个代码里有可能出现car!=null的时候么?按照我得理解car肯定是null啊,为什么还要判断?
      

  5.   

    return么,应该是谁等于它就给谁的。
      

  6.   

    这是java模式中的单例模式,这个例子的作用是告诉你创建的两个Car对象是相等的,结果会打印出true.这就是说当第一次创建car时因为car是null值,所以会成功创建,但是以后再创建就会因为car!=null而无法创建,因此这个类只能创建一个实例.
      

  7.   

    还有这里的static主要起了什么作用?
      

  8.   

    刚才看了别人的帖子
    String s = "Hello world!"; 许多人都做过这样的事情,但是,我们到底声明了什么?回答通常是:一个String,内容是“Hello world!”。这样模糊的回答通常是概念不清的根源。如果要准确的回答,一半的人大概会回答错误。 
    这个语句声明的是一个指向对象的引用,名为“s”,可以指向类型为String的任何对象,目前指向"Hello world!"这个String类型的对象。这就是真正发生的事情。我们并没有声明一个String对象,我们只是声明了一个只能指向String对象的引用变量。同样的道理static Car car是不是也是一样呢?由于有了static导致car有了固定的地址?所以在实例化时指向了Car(),所以Car car1=Car.getInstance(); Car car2=Car.getInstance();之所以是true是因为car是静态引用变量地址都是一样的而且值也相同所以为true
      

  9.   

    楼主这样理解也可以把,其实这无非就是类变量的问题,如果一个类里某变量声明了static,这个变量叫做类变量,比如说在car类中:static int num;那么如果
    Car car1=new Car();
    Car car2=new Car();
    car1.num=10;
    那么car2.num也就等于10了,就是Car.num=car1.num=car2.num。那private static Car car; 就依此类推了。楼主可以直接baidu搜static类变量。
      

  10.   

    car1=Car.getInstance(); Car car2=Car.getInstance();之所以是true是因为car是静态引用变量地址都是一样的而且值也相同所以为true
      

  11.   

    刚才我又试验了下,如果把if判断去掉,结果就是false,不知道是为什么啊?
    package pig; public class Car { 
    private static Car car; 
    public static Car getInstance(){ car=new Car(); 
    return car; 
    } } 
    package pig; public class Test { 
    public static void main(String[] args) { 
        Car car1=Car.getInstance(); 
        Car car2=Car.getInstance(); 
        System.out.println(car1==car2); } }
      

  12.   

    这个程序static是声明getInstance()方法为静态的,就是说直接用类名就可以访问此方法
    Car car1=Car.getInstance();
    如果没有声明为static的,就得先创建一个Car的实例,如Car car=new Car();
    再调用其getInstance()方法,如car.getInstance();
      

  13.   

    因为每次调用getInstance都返回一个新对象,所以是 false了。
    而用null 判断的时候,只要对象存在了我就不新创建了,这样每次调用得到的是同一个对象。
      

  14.   

    static的作用有两点,第一是保存对象,不让系统自动回收他的地址,当你的对象被创建后,他就一直保存着她,所以你想创建第二个对象car2时,if语句判断car!=null,返回原来创建的对象car1。二是你的getInstance方法是用static修饰,所以变量car也要是静态的。
      

  15.   


    Singletion模式。
    作用是保证在java应用程序中,一个类class只有一个实例存在。
    这个题就是这样了。
    一般这中模式有几种形式,在这和大家分享下。
    1.定义一个类,构造函数为private的,然后定义一个private ,static修饰的类变量。在类初始化时实例化,通过一个getIntance()方法获得对它的引用。
    2.把getiIntance()方法用synchronized修饰,然后判断是否为null,然后每次都new一个对象出来。提高效率。
    不过,一般认为第一种比较安全。
    分享了。
    高手继续往下说。
      

  16.   

    跟这个一样的道理
    code=Java]package pig; 
    public class Car { 
    static int num=0; 
    public static int getnum(){
    num++;
    return num;
    }} 
    package pig; 
    public class Test { 
    public static void main(String[] args) { 
        int num1=Car.getnum();
        int num2=Car.getnum();
        System.out.println(num1);//num1=1;
        System.out.println(num2);//num2=2;
    }}[[/code]
    17楼正解