是否有方法初始化这样的事情?

时间:2014-09-01 06:30:25

标签: java

根据我的理解,这是变量声明的一个例子:

int variable;

这是变量初始化的一个例子:

variable = 2;

我们可以一起声明和初始化变量:

int variable = 2;

对于方法,我们有类似的结构:

abstract int method(int param);

int method (int param) {
return param;
}

但我们将前者称为方法原型,后者称为声明。

编辑:

另一个例子如下:

static int differentMethod(int param);

public static void main (String[] args) {
...
}

static int differentMethod(int param) {
...
}

编辑2:忽略上面的例子,因为它不支持Java(但C中存在类似的东西)。

是否有方法初始化这样的事情?

4 个答案:

答案 0 :(得分:1)

java中的所有方法都包含在一个类中,因此当加载一个类时,它的方法也会加载到内存中。有一个名为PermGen的部分存储所有方法(静态方法和静态变量),PermGem是Heap的一部分。

您引用的方法原型用于接口和抽象类。 请注意,在具体类中实现这些方法是强制性的,因为conrete类是在其中运行conde的类,当该类将在代码中使用(初始化)时,其方法将被加载到内存中以供执行。

答案 1 :(得分:0)

有趣。从理论上讲,有IS方法初始化。

方法初始化可能意味着将方法视为第一类对象,并且在运行时中,可能会为它们分配特定值。是的,您正在将方法初始化为一个,之后,您将其更改为另一个。就像一个物体。

Objective-C有块。 C有函数指针。

在java中,通过匿名内部类可以获得部分支持。

这是一篇关于它的维基百科文章: http://en.wikipedia.org/wiki/First-class_function

答案 2 :(得分:0)

变量存储在内存中,也就是说,它们有一些值,并且该值存储在某个内存地址中。请注意:我们稍后可能会更改该值。现在让我们看看方法,每个方法也存储在某个地方。当我们调用该方法时,它的地址被解析,然后执行存储在该地址的指令。但是,当我们更改变量的值时,请注意我们不能更改存储方法的地址的值。它是内部处理的。因此,没有方法的初始化。

答案 3 :(得分:0)

您可以使用What's the nearest substitute for a function pointer in Java?

中使用的概念

所以你会得到类似方法指针的东西,可以在以后初始化。你不能在java中拥有指向函数的指针,所以你必须将它包装在一个对象中。

编辑:示例

    interface IntFunction {
        int function(int param);
    }

    public IntFunction method;

    void initializer() {
        method = new IntFunction() {

            @Override
            public int function(int param) {
                return param + 10;
            }
        };
    }


    void use() {
        int b = method.function(50);
    }

编辑2:直接字节码操作

你可以在运行时使用字节码操作技术,比如javassist.org do,所以你可以在你的课程中使用你需要的文件,例如:在运行时初始化你的方法,但它不是那么干净。