在下面的java程序中,我不了解执行流程和“this”关键字执行情况?

时间:2015-12-11 13:18:39

标签: java

class This
{
    This()
    {
        System.out.println(this);
    }
    public static void main(String [] raja)
    {
        new This();
        System.out.println(new This());
    }
}


output:
This@470285d8
This@76a14c53
This@76a14c53

为什么程序的输出被打印3次?这个关键字指的是当前的类实例,但这里为什么引用不同,即第一个引用与其他两个引用不同?

通过创建引用来改变相同的代码:

class This
{
    This()
    {
        System.out.println(this);
    }
    public static void main(String [] raja)
    {
        This t = new This();
        System.out.println(t);
    }
}

output:
This@76a14c53
This@76a14c53

这只打印两行,但为什么上面的程序打印3次,为什么这里的引用没有改变。

3 个答案:

答案 0 :(得分:5)

您的构造函数打印一行,所以:

new This();
System.out.println(new This());

在这里你调用构造函数两次,System.out.println()也打印一行,所以你得到三行。 此外,您正在创建两个不同的This个对象。

在你的第二个例子中,构造函数只被调用一次,所以你只得到两行。 此示例仅创建一个 This对象:

This t = new This();
System.out.println(t);

答案 1 :(得分:0)

在第一种情况下,您创建了2个对象,因为构造函数和main具有@Override public void onReceive(Context context, Intent intent) { context.startService(new Intent(context, MainService.class)); context.startActivity(new Intent(context, AlertActivity.class)); } 。程序打印3次。

在第二种情况下,你只在构造函数和主运行中创建了一个对象System.out.println(this)并打印了对象System.out.println(this)结果2次

答案 2 :(得分:0)

class This
{
    This() // This is the constructor. It gets called automatically everytime a new instance is created
    {
        System.out.println(this);
    }
public static void main(String [] raja)
{
    new This(); // Second instance
    System.out.println(new This()); // Third instance
}

首次运行程序时会生成第一个实例。因此,你得到3个输出。

在第二个代码中,您创建一个This对象,然后调用它。总共有两个实例:首先是你运行的那个实例。其次,您创建的那个:This t = new This();。因此,在这种情况下有两个输出。