账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    java创建对象是否会出现部分初始化情况?
    40
    0
    class Singleton {
        private static Singleton instance;
        
        public int f1 = 1;   // 触发部分初始化问题
        public int f2 = 2;
            
        private Singleton(){}
        
        public static Singleton getInstance() {
            if (instance == null) { // 当instance不为null时,可能指向一个“被部分初始化的对象”
                synchronized (Singleton.class) {
                    if ( instance == null ) {
                        instance = new Singleton();
                    }
                }
            }
            return instance;
        }
    }

    如上,在多线程并发的情况下,会导致getIntance()获取到一个部分初始化的对象吗?

    我看博文说初始化大致分成3个过程:
    1)分配空间
    2)初始化对象
    3)将对象指向空间

    而这3个过程会重排序,导致对象先指向空间,在判断instance==null时返回false,则实际上对象并未初始化值

    难道java没有保证实例化对象的原子性?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 在Java中,如果一个类声明了多个构造函数,那么它会默认为多个构造函数。当一个对象实例化时,它会被自动调用这些构造函数,而不需要手动指定哪个构造函数应该被调用。

      例如,假设我们有一个名为Person的类,它有两个构造函数:Person(String name, int age)Person(double weight, int height)。当我们创建一个Person对象时,Person类会自动调用Person(String name, int age)构造函数,以及Person(double weight, int height)构造函数。

      如果需要手动指定哪个构造函数应该被调用,可以在创建Person对象时指定Person(String name, int age)。但是,这并不是一个良好的编程习惯,因为这会增加代码的复杂性,并且可能使代码难以理解和维护。因此,通常建议尽可能使用默认的构造函数。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部