this
포인터가 개체 자체를 가리키는 점은 무엇입니까? 그것은 자바 구현 또는 컴파일러 구현 무엇입니까?자바 "this"키워드는 어떻게 구현됩니까?
답변
당신은 왜
퍼센트 JAVA_HOME %의/빈/javac의의 HelloWorld.java
를 사용하여 컴파일러class HelloWorld
{
private String hello = "Hello world!";
private void printHello(){
System.out.println (this.hello);
}
public static void main (String args[]){
HelloWorld hello = new HelloWorld();
hello.printHello();
}
}
컴파일에 의해 생성 된 바이트 코드를 보지 관심이 잘 경우
바이트 코드 사용
javap -c HelloWorl D
편집 추가 출력
enter code here
HelloWorld();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()
4: aload_0
5: ldc #2; //String Hello world!
7: putfield #3; //Field hello:Ljava/lang/String;
10: return
public static void main(java.lang.String[]);
Code:
0: new #6; //class HelloWorld
3: dup
4: invokespecial #7; //Method "<init>":()V
7: astore_1
8: aload_1
9: invokespecial #8; //Method printHello:()V
12: return
} 여기
소리는 철학적 질문과 같습니다. Java 구현이 확실하지 않습니다.
this
은 JLS에서 정의되며 Java의 키워드이며 컴파일은 해당 표준을 준수해야합니다. 당신이
object.method(args)
같은 방법이있을 때 무엇을 실제로 바이트 코드라고하는 것은 보이는 방법이다
this
은 첫 번째 인수 인
method(object, args);
있다.
JVM 수준에서 매개 변수에는 이름이 없으며 실제로 사용되지 않는 경우 JIT에서 인수를 최적화 할 수 있습니다.
:) 피터 없음. 질문과의 인터뷰에서 튕겨 나왔습니다. 그것을 밖으로 체크의 Thot. – mavrav
인터뷰에서 가끔 어색한 질문을받는 경우가 있습니다. 면접관이 대답을 알지 못하는 표식 일 수도 있고, 당신이하는 말을 알고 싶어 할 수도 있습니다. –
게시 작업이 JVM 구현 작업과 관련되어 있지 않다면 이는 끔찍한 질문입니다! – vaughandroid
로컬 변수 0 (기본적으로 레지스터 0)은 메소드가 호출 될 때 현재 오브젝트를 가리 킵니다. 컴파일러는 간단히 로컬 변수 0에 대한 별칭으로 this
을 사용합니다.
그래서 대답은 컴파일러가 this
을 구현한다는 것입니다.
- 1. 자바 인터페이스는 내부적으로 어떻게 구현됩니까? (vtables?)
- 2. 자바 스크립트 내부 : 이벤트는 어떻게 구현됩니까?
- 3. PacMan의 Google 홈페이지에서 어떻게 구현됩니까?
- 4. @private는 어떻게 구현됩니까?
- 5. 채팅은 일반적으로 어떻게 구현됩니까?
- 6. Set.toString()은 어떻게 구현됩니까?
- 7. WCF에서 콜백은 어떻게 구현됩니까?
- 8. pthread_join은 어떻게 구현됩니까?
- 9. 반복기는 Java로 어떻게 구현됩니까?
- 10. 파이썬에서 rangeiterator는 어떻게 구현됩니까?
- 11. "const"는 어떻게 구현됩니까?
- 12. System.Net은 어떻게 구현됩니까?
- 13. DOM 파서는 어떻게 구현됩니까?
- 14. OpenID는 어떻게 구현됩니까?
- 15. 작업 예약은 어떻게 구현됩니까?
- 16. MarshalByRefObject는 어떻게 구현됩니까?
- 17. VTBL은 Java에서 어떻게 구현됩니까?
- 18. 일반적으로 힙은 어떻게 구현됩니까?
- 19. Firefox 알림은 어떻게 구현됩니까?
- 20. 코 루틴은 어떻게 구현됩니까?
- 21. Spree.config는 어떻게 구현됩니까?
- 22. sarcmark는 어떻게 구현됩니까?
- 23. HttpSession은 어떻게 구현됩니까?
- 24. BigDecimal은 어떻게 구현됩니까?
- 25. ESB는 어떻게 물리적으로 구현됩니까?
- 26. File.open은 Ruby에서 어떻게 구현됩니까?
- 27. Monitor 클래스는 어떻게 구현됩니까?
- 28. MPI 입출력은 어떻게 구현됩니까?
- 29. neo4j 지속성은 어떻게 구현됩니까?
- 30. 조건 변수는 어떻게 구현됩니까?
우리가 '이'에 대해 최대한 활용하는 것입니다. http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#251519 – kosa