public class A {
    private String name;
    private static A instance = new A();    private A(){}    public A getInstance() {
        return instance;
    }    public String getName() {
        return name;
    }
}public class B {
    private static String name;
    
    private B(){}    public static String getName() {
        return name;
    }
}
请问: A.getInstance().getName();与B.getName();的区别.

解决方案 »

  1.   

    A.getInstance().getName();
    这个得到的是A的一个对象实例的属性name的值B.getName();
    这里的name不属于任何的对象实例,属于B这个类。
      

  2.   

    A.getName()返回一个实例化过后的对象A的句柄,B.getName由于没有实例化,返回是个空指针null
      

  3.   


    A.getInstance().getName()
    对象实例是分配在堆区B.getName();
    这里的name是static,因此分配在方法区,也就是所谓的非堆区
      

  4.   

    static修饰的变量又称作“类变量”, 一个类中,一个static变量只会有一个内存空间,虽然有多个类实例,但这些类实例中的这个static变量会共享同一个内存空间。
    class A
    {
    public static A instance=null;
    private A()
    {

    }
    public static A getInstance()
    {
    if(instance==null)
    {
    return new A();
    }
    return instance;
    }
    }
      

  5.   

    单例模式最简的例子:
    public class SingletonTest
    {
    public static void main(String[] args)
    {
    Singleton singleton = Singleton.getInstance();
    Singleton singleton2 = Singleton.getInstance();System.out.println(singleton == singleton2);
    }
    }
    class Singleton
    {
    private static Singleton singleton;private Singleton()
    {}public static Singleton getInstance()
    {
    if(singleton == null)
    {
    singleton = new Singleton();
    }return singleton;
    }
    }
      

  6.   

    单例更灵活。
    public interface Named {
      
      public String getName();
    }public class A implements Named {
      
      private static final String NAME = "A";
      
      public static A getInstance() {
        
        return INSTANCE;
      }
      
      private static final A INSTANCE = new A();
      
      private A() {}
      
      @Override
      public String getName() {
        
        return NAME;
      }
    }public class B {
      
      private static final String NAME = "B";
      
      private B() {}
      
      public static String getName() {
        
        return NAME;
      }
    }public class ClientCode {
      
      public static void main(String[] args) {
        
        ClientCode c = new ClientCode();
        
        c.printName(A.getInstance());
    //    c.printName(B ???);
      }
      
      // ...
      
      public void printName(Named named) {
        
        if( named == null )
          throw new NullPointerException();
        
        System.out.println(named.getName());
      }
    }
      

  7.   

    A.getInstance().getName();这一句可以实现吗?不行吧,getInstance()不是static的啊,先要产生一个对象吧
      

  8.   

     public A getInstance() {
            return instance;
        }应该要加个static吧。
    第一种情况是:这个得到的是A的一个对象实例的属性name的值
    第二种情况时:属于B这个类。
      

  9.   

    B根本就不是单例。私有化构造器字段又私有,这个类完全没作用。A也有问题,上面有讲,什么都取不到。最好的单例应该是这样的public enum A{
     INSTANCE;
     
    // OHTER public METHODS
    }使用起来就是A.INSTANCE.method