为了账号安全,请及时绑定邮箱和手机立即绑定

关于在本类定义中实例化本类对象的问题

代码

package com.antique;

public class Test {

    private String s = "123";

    public String getS() {
        return s;
    }

    public static void main(String[] args){

        System.out.println(new Test().getS());
    }

}

背景

在一个类中有实例化本类对象的行为,我的理解如下:Java程序分为编译与运行两部分,在编译的时候使用javac,这个时候把`Test.java`编译成`Test.class`,在执行到以上程序的`new Test()`时,JVM把该指令传递给CPU,CPU在堆空间才开辟一个具体的内存空间用来存放一个Test对象。

问题:存放在对空间中的Test对象,其中也有一个本身自己的实例化的代码,该代码会不会执行,造成类似于迭代效果的后果?

正在回答

2 回答

不会,堆中的test对象的默认值是个空值

0 回复 有任何疑惑可以回复我~
#1

Antique 提问者

默认是个空值?这个不能理解
2017-08-27 回复 有任何疑惑可以回复我~
#2

慕粉095609116 回复 Antique 提问者

建议你看一下类加载原理,我也是初学者,有不对的地方欢迎指正,类加载时,虚拟机会在堆中开辟一块内存用于存放new Test()对象,这个对象的引用在栈中开辟,也可以看做是这个对象的地址值,本代码中通过类调用方法把s的值赋给这个对象,相当于覆盖了这个值
2017-08-30 回复 有任何疑惑可以回复我~

什么叫类似迭代效果的后果?

0 回复 有任何疑惑可以回复我~
#1

Antique 提问者

堆中的对象Test中又有一个构造函数,如此往复会不会一直构造下去
2017-08-27 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

关于在本类定义中实例化本类对象的问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信