클래스는 Java에서 정의 된 length
필드입니다 (예 : 배열 길이)? Object
클래스에서 정의 된 것을 볼 수 있습니까?자바의 도트 길이 - 해당 정의 찾기
편집 : 왜이 필드가 그렇게 설계 되었습니까 (보안 또는 메모리 효율성과 관련된 모든 항목)?
클래스는 Java에서 정의 된 length
필드입니다 (예 : 배열 길이)? Object
클래스에서 정의 된 것을 볼 수 있습니까?자바의 도트 길이 - 해당 정의 찾기
편집 : 왜이 필드가 그렇게 설계 되었습니까 (보안 또는 메모리 효율성과 관련된 모든 항목)?
배열 유형은 Java에서 특별합니다. 이 어레이 형의 부재는 다음의 모두 JLS 10.7 Array Members
발췌이다 어레이의 구성 요소의 수를 포함
public final
필드length
(길이가 포지티브 일 수도 제로).public
메서드clone
은Object
클래스의 동일한 이름 메서드를 재정의하고 검사 예외를 throw하지 않습니다. 배열 유형이T[]
인 복제 메소드의 반환 유형은T[]
입니다.- Object 클래스에서 상속 된 모든 멤버 상속되지 않는 Object의 유일한 메소드는
clone
메소드입니다. 당신이 배열에 반사를 사용할 때이에도 불구하고
, 오래 서 버그 아직 없습니다 : 둘 length
도 clone
은 반사 (bug# 5047859, bug# 4987375)를 통해 찾을 수 없습니다.
어느 멤버도 모든 수퍼 클래스의 전통적인 방식으로 상속받지 않습니다. 모든 배열 유형은 Object
에서 직접 확장됩니다. 이 "특별 대우"는 이러한 버그가 처음부터 존재하는 이유입니다.
"정의되는 길이 변수를 볼 수 없습니까?"
어레이 유형에 대한 실제 소스 코드는 없습니다. 다시 말하지만, 이러한 유형은 특별합니다. JVM은 필요할 때마다 이러한 유형을 모자에서 꺼냅니다. 배열 유형 int[].class
에 대한 .java
소스 파일 (즉, 모두 int
배열 유형)이 표시되지 않습니다. 정의 된 length
필드에게을 볼 수
그래서, 아니, 당신은 할 수 없습니다.
이것은 정의 된 길이 변수를 결코 볼 수 없다는 뜻입니까? – abson
나는 '반사를 통해 발견 될 수있다'라는 말을 이해하지 못했다. 여기서 설명해 주시겠습니까? – abson
@ abson : 귀하의 의견을 언급하기 위해 몇 가지 의견을 추가했습니다. 더 많은 설명을 요청하십시오. – polygenelubricants
이 질문에 대한 대답은 하나도 없습니다. 누구나 클래스에 length
변수를 포함 할 수는 있지만 특정 클래스에서 그것이 존재한다고 보장 할 수는 없습니다. 관심있는 클래스의 소스를 읽는 것만으로도 충분합니다. JavaBean convention에서 길이 속성을 합리적으로 가질 수는 있지만 공용 변수가없는 클래스는 종종 length
입니다. getLength()
및 setLength()
방법이 있습니다. 질문의 범위를 벗어나는 여러 가지 이유 때문에 공용 변수보다 낫습니다.하지만 관심이 있으시면 this related SO question을 확인하십시오.
예 배열의 길이 속성은 실제로 정의 된 위치를 알려주시겠습니까? – abson
배열은 일반 클래스와 다르며 Java Language Specification에 정의 된 특별한 경우입니다. 따라서 .length 공용 최종 변수는 Java 언어 스펙에 정의되어 있지만 실제로 .java 또는 .class 파일의 어느 곳에서나 정의되지는 않습니다.
클래스는 length
이라는 필드를 가질 수 있습니다. 그냥 추가하십시오.
배열에는 length
필드가 없습니다. 이 컴파일되지 않기 때문에,
int[] a = new int[10];
System.out.println("array length is: " + a.length);
하지만 정말 일반 필드 되지 않습니다 : 다음 JVM 수준에서,
int[] a = new int[10];
a.length = 42; // <- here the compiler gets grumpy
을, 그들은 이 같은 필드처럼 보이는 뭔가를 배열 길이는 특정 작업 코드 (arraylength
)로 액세스되며 일반 인스턴스 필드 액세스 명령 코드 (getfield
)로 액세스되지 않습니다.
그 배열에 대한 액세스 할 수있는 변수가 알아 방법 :
더 읽기를 들어, 여기에 자바 반사에 대한 몇 가지 정보입니다 배열에 많은 요소가 있습니다.
우리는 문자열 길이, 배열 길이, 객체 크기 등을 이야기하고 있습니까? –
@ Jason : 그는 배열에 대해 이야기하고 있다고 생각합니다. – missingfaktor
@ Jason, 나는 그가 array에 대해 이야기하고 있다고 생각한다. length, String은 length 변수를 가지고 있지 않다. length() 메소드를 가지고있다. (getLength()가 아니기 때문에 혼란 스럽다.) – medopal