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();的区别.
这个得到的是A的一个对象实例的属性name的值B.getName();
这里的name不属于任何的对象实例,属于B这个类。
A.getInstance().getName()
对象实例是分配在堆区B.getName();
这里的name是static,因此分配在方法区,也就是所谓的非堆区
class A
{
public static A instance=null;
private A()
{
}
public static A getInstance()
{
if(instance==null)
{
return new A();
}
return instance;
}
}
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;
}
}
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());
}
}
return instance;
}应该要加个static吧。
第一种情况是:这个得到的是A的一个对象实例的属性name的值
第二种情况时:属于B这个类。
INSTANCE;
// OHTER public METHODS
}使用起来就是A.INSTANCE.method