首页 > 试题广场 >

下面代码的执行结果是 :

[单选题]
下面代码的执行结果是 :
class Chinese{
private static Chinese objref =new Chinese();
private Chinese(){}
public static Chinese getInstance() { return objref; }
}

public class TestChinese {
public static void main(String [] args) {
Chinese obj1 = Chinese.getInstance();
Chinese obj2 = Chinese.getInstance();
System.out.println(obj1 == obj2);
}
}
  • true
  • false
  • TRUE
  • FALSE
单例模式: 第一步,不让外部调用创建对象,所以把构造器私有化,用private修饰。 第二步,怎么让外部获取本类的实例对象?通过本类提供一个方法,供外部调用获取实例。由于没有对象调用,所以此方法为类方法,用static修饰。 第三步,通过方法返回实例对象,由于类方法(静态方法)只能调用静态方法,所以存放该实例的变量改为类变量,用static修饰。 最后,类变量,类方法是在类加载时初始化的,只加载一次。所以由于外部不能创建对象,而且本来实例只在类加载时创建一次,嘿嘿
编辑于 2018-12-12 18:11:01 回复(15)
单例模式,obj1和obj2其实是一个对象,应该返回true!
发表于 2017-10-13 23:14:26 回复(9)
饿汉式单例模式,在类创建时,就已经实例化完成,在调用Chinese.getInstance()时,直接获取静态对象
编辑于 2018-11-13 15:08:35 回复(7)
饿汉就是类一旦加载,就把单例初始化完成,保证getInstance的时候,单例是已经存在的了,而不是开始初始化 ,评论区很多人别误人子弟。注意:单例是已经存在,而不是才开始初始化单例。你们说的那是懒汉模式。懒汉模式,只有当调用getInstance的时候,才回去初始化这个单例。
发表于 2018-11-06 17:01:12 回复(2)
只想默默问一句true和TRUE的区别
发表于 2019-08-05 18:13:01 回复(6)
单例模式在产生时就已经写好了一个私有对象,被封装在一个方法里,通过该类点方法即可获取到这个对象,不管多少个引用,获取到的对象都是一样的,因此地址都一样
发表于 2019-09-08 16:16:32 回复(0)
编译错误,无法运行
原因:getInstance()是静态方法,无法使用非静态变量
单例:饿汉模式
class Chinese{
   private  static Chinese objref =  new Chinese();
    private Chinese(){}
    public static Chinese getInstance(){
        return objref;
    }

    public static void main(String [] args){
    Chinese obj1 = Chinese.getInstance();
    Chinese obj2 = Chinese.getInstance();
    System.out.println(obj1 == obj2);
    }
}

发表于 2017-09-24 16:57:20 回复(0)
Chinese类是一个单例类,只是在创建对象的时候应该设置为静态成员变量,因为获取实例的方法是静态的.
由于是单例类,所以obj1和obj2其实是一个对象,所以应该返回true!
发表于 2017-09-20 12:59:39 回复(0)
选A
单例模式,所有符号引用都指向了一个实体。
发表于 2018-07-10 09:50:42 回复(0)
单例模式:不让外部调用构造方法创建对象(把构造器私有化),并提供一个方法供外部调用获取实例,且因为没有对象调用,所以此方法要用static修饰为类方法。因为类变量和类方法是在类加载时初始化的且只加载一次,所以实例只在类加载时创建一次。嘤嘤嘤
发表于 2021-04-13 19:21:06 回复(1)

单例的目的是保证某个类仅有一个实例。当有某些类创建对象内存开销较大时可以考虑使用该模式。单例模式又分为 饿汉式 和 懒汉式 。下面分别说明:

1.饿汉式。顾名思义,该模式在类被加载时就会实例化一个对象。具体代码如下:
public class Person {
    //饿汉式单例
    private static Person person = new Person();
    private Person(){}

    public static Person getInstance(){
    return person;
    }
}
该模式能简单快速的创建一个单例对象,而且是线程安全的(只在类加载时才会初始化,以后都不会)。但它有一个缺点,就是不管你要不要都会直接创建一个对象,会消耗一定的性能(当然很小很小,几乎可以忽略不计,所以这种模式在很多场合十分常用而且十分简单)
发表于 2020-01-28 11:25:53 回复(0)
我**了 选了个c....
发表于 2018-05-13 09:58:16 回复(0)
编译错误,如果objref是static,则运行结果为true。
发表于 2017-09-14 12:32:01 回复(0)
看不出来是设计模式也无所谓,只要对类加载机制足够熟悉即可,static是静态的,静态变量先加载,并且只加载一次,所以无论调用多少次调用的都是类加载的那个,至于让人感觉迷惑的new也不要慌,这只是说要开辟内存空间,并不影响静态变量的加载时机!
当然要是直接看出来是饿汉式单例模式直接就解了🤣
运行结果如图:

编辑于 2022-08-13 13:45:27 回复(0)
单例模式: 第一步,不让外部调用创建对象,所以把构造器私有化,用private修饰。 第二步,怎么让外部获取本类的实例对象?通过本类提供一个方法,供外部调用获取实例。由于没有对象调用,所以此方法为类方法,用static修饰。 第三步,通过方法返回实例对象,由于类方法(静态方法)只能调用静态方法,所以存放该实例的变量改为类变量,用static修饰。 最后,类变量,类方法是在类加载时初始化的,只加载一次。所以由于外部不能创建对象,而且本来实例只在类加载时创建一次
发表于 2021-11-02 19:27:26 回复(0)
将构造器私有化,外部不能创建该类对象,所以在类的内部创建一个该类对象为私有的静态的成员变量
随着类加载只加载一次,所以外部通过类名.静态方法获得这个对象是同一个对象
发表于 2021-08-19 11:38:17 回复(1)
饿汉式单例模式,当class加载时,就会被初始化
发表于 2019-03-25 16:33:14 回复(0)

被static修饰之后,属于成员变量,不属于对象,被类的所有对象共享。

发表于 2018-09-09 23:34:50 回复(0)