班级中场地位置的影响?

时间:2013-05-26 09:14:18

标签: java class compiler-construction constructor compiler-optimization

在java中为以下类生成的代码是否存在任何差异:

class A_noConstructor
{
    public static int par1;
    public static int par2;

    void method1(){
    }
    void method2(){
    }

}

class A_wConstructor 
{
    public static int par1;
    public static int par2;

    public A_wConstructor(){
    }

    void method1(){
    }

    void method2(){
    }

}

class B_noConstructor 
{
    void method1(){
    }
    void method2(){
    }

    public static int par1;
    public static int par2;

}


class C_noConstructor 
{
    public static int par1;
    void method1(){
    }
    public static int par2;
    void method2(){
    }

}

如果我直接用B_noConstructor或C_noConstructor替换说类A_noConstructor,par1和par2在所有情况下都会有相同的内存地址吗?由于编译器将以不同的方式为这些类解析源,编译器为这些类生成的符号表是否会有任何差异?

编辑:void A_wConstructor()更改为public A_wConstructor();

2 个答案:

答案 0 :(得分:0)

答案很大程度上取决于编译器。可以有很多方法在机器代码中表示相同的源代码,然后编译器可以有例如优化选项也有所作为。因此,仅仅因为在特定情况下生成的代码可能相同,所以您不能依赖于始终为真的代码。

答案 1 :(得分:0)

您创建的类(只有没有参数的构造函数)或没有构造函数的类没有区别。无论如何,编译器会为你创建一个构造函数 SYNTHESIZED DEFAULT CONSTRUCTOR

但订单可能会有所不同(但不明确;对我们没有区别) 符号表将按解析顺序更新(添加文字,变量......)。

单独的订单将会有所不同,内存地址可能会发生变化但与表条目相关联。所以它对于单独调用函数很有用。我认为这不会导致任何性能问题或差异。