По моему мнению, это пример объявления переменной:
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).
Есть ли такая вещь, как инициализация метода?
Все методы в java содержатся внутри класса, поэтому при загрузке класса его методы также загружаются в память. Существует раздел PermGen
котором хранятся все методы (статические методы и статические переменные), PermGem является частью кучи.
Прототип метода, к которому вы обращаетесь, используется в интерфейсах и абстрактных классах. Обратите внимание, что это принудительно реализовать эти методы в конкретном классе, поскольку классы-классы являются теми, у которых в них есть conde, когда этот класс будет использоваться в коде (инициализирован), его методы будут загружены в память для выполнения.
primitive types, like classes, have both state and behavior
вашего утверждения primitive types, like classes, have both state and behavior
неправильно. примитивы - это просто именованные пространства памяти, которые используются для хранения данных определенного типа. У них нет методов, вы путаете их с их соответствующими типами-обертками, которые используются для представления примитивов в форме объектов, например: - Integer
для int, они используются там, где нельзя использовать чистые примитивы, например, в коллекциях.
Переменные хранятся в памяти, то есть они имеют некоторое значение, и это значение сохраняется на некотором адресе памяти. Обратите внимание, что: это значение CAN позже будет изменено нами. Теперь давайте посмотрим методы, каждый метод также где-то хранится. Когда мы вызываем этот метод, его адрес разрешается, и тогда выполняется команда, хранящаяся по этому адресу. НО, по мере изменения значения переменной, обратите внимание, что значение адреса, на котором хранится метод, не может быть изменено нами. Он внутренне обрабатывается. Следовательно, нет такой вещи, как ИНИЦИАЛИЗАЦИЯ методов.
initialization
и assignment
действительно полезны для методов?
Интересно. Теоретически существует инициализация метода IS.
Инициализация метода может означать обработку методов как объектов первого класса и в среде выполнения, возможно, присвоение им определенного значения. Да, вы инициализируете метод один и более поздний, вы меняете его на другой. Также как объект.
Объектив-C имеет блоки. C имеет указатели на функции.
В java есть частичная поддержка для анонимных внутренних классов.
Вот статья о Википедии: http://en.wikipedia.org/wiki/First-class_function
Вы можете использовать концепцию, используемую в What's ближайшая замена для указателя функции в Java?
Таким образом, вы получите что-то вроде указателя метода, который может быть инициализирован позже. У вас нет указателя на функцию в java, поэтому вы должны обернуть его в объект.
EDIT: пример
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);
}
EDIT 2: управление прямым байткодом
Вы можете использовать метод манипуляции с байт-кодом во время выполнения, например, javassist.org, чтобы вы могли делать смайлинг, который вы хотите с помощью своего класса, например, инициализируйте свой метод во время выполнения, но это не так чисто.