根据我的理解,这是变量声明的一个例子:
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中存在类似的东西)。
是否有方法初始化这样的事情?
答案 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,所以你可以在你的课程中使用你需要的文件,例如:在运行时初始化你的方法,但它不是那么干净。