В то время как size() метод ArrayList определен внутри ArrayList класса, где определено это length свойство Array?
Переведено автоматически
Ответ 1
Массивы - это особые объекты в java, у них есть простой атрибут с именем, length который является final.
Для массива нет "определения класса" (вы не можете найти его ни в одном файле .class), они являются частью самого языка.
10.7. Элементы массива
Все элементы типа array являются следующими:
publicfinal Поле length, которое содержит количество компонентов массива. length может быть положительным или нулевым.
public Метод clone, который переопределяет одноименный метод в классе Object и не создает проверяемых исключений. Тип возвращаемого значения clone метода типа массива T[] является T[].
Клон многомерного массива является неглубоким, то есть создает только один новый массив. Подмассивы являются общими.
Все члены наследуются от класса Object; единственный метод Object, который не наследуется, - это его clone метод.
Таким образом, к нему не обращаются, как к обычному полю. Действительно, если вы попытаетесь получить его, как если бы это было обычное поле, например, так, это не удастся:
public final Поле length, которое содержит количество компонентов массива. length может быть положительным или нулевым.
Поскольку существует неограниченное количество типов массивов (для каждого класса существует соответствующий тип массива, а затем существуют многомерные массивы), они не могут быть реализованы в файле класса; JVM должна делать это на лету.
Ответ 4
Хотя это и не прямой ответ на вопрос, это дополнение к аргументу .length vs .size() . Я исследовал кое-что, связанное с этим вопросом, поэтому, когда я наткнулся на это, я заметил, что определения, представленные здесь
Общедоступное конечное поле length, которое содержит количество компонентов массива.
"не совсем" корректно.
Поле length содержит количество доступных мест для размещения компонента, а не количество компонентов, присутствующих в массиве. Таким образом, оно представляет общую доступную память, выделенную для этого массива, а не то, сколько этой памяти заполнено.