자바 의 컴 파일 형식 과 실행 형식
3227 단어 Java
최근 다 중 복습 을 할 때 프로그램 코드 가 실 행 된 결과 에 대해 이해 하지 못 하고 블 로 그 를 많이 봤 습 니 다. 컴 파일 유형, 운영 유형, 다 중 등의 차이 점 과 사용 을 정리 하여 도움 이 되 었 으 면 합 니 다.
컴 파일 형식 과 실행 유형 을 소개 하기 전에 이 코드 를 보십시오.
테스트 클래스 에서:
package multiplied;
class Father {
Father() {
System.out.println("父类构造器");
}
public void doWork() {
System.out.println("父类doWork方法");
}
}
class son extends Father {
son() {
System.out.println("子类构造器");
}
public void doWork() {
System.out.println("子类doWork方法");
}
}
public class MutipliedDemo {
public static void main(String[] args) {
Father child = new son();
child.doWork();
}
}
우 리 는 Father 의 인용 변 수 를 설명 하고 son 류 의 인 스 턴 스 를 가리 키 며 child 라 는 인용 변 수 를 볼 수 있 는 Father 류 는 바로
컴 파일 형식, new son () 은
실행 형식.
프로그램 이 실 행 될 때 먼저 부모 클래스 의 구조 기 를 호출 한 다음 에 하위 클래스 의 구조 기 를 호출 합 니 다. 그 다음 에 컴 파일 과정 에서 인용 변수 child 의 컴 파일 형식 에 doWork 방법 이 포함 되 어 있 는 지 자동 으로 확인 합 니 다. 분명 한 것 은 부모 클래스 에 doWork 방법 이 있 습 니 다 (만약 오류 가 발생 하지 않 았 다 면). 그러나 JVM 이 실 행 될 때 하위 클래스 에 doWork 방법 을 덮어 썼 기 때 문 입 니 다.그래서 child 가 실제 실행 할 때 하위 클래스 의 doWork 방법 을 호출 했 습 니 다. 이것 은 부모 클래스 가 아 닌 다 중 모드 입 니 다.
여기 서 우 리 는 컴 파일 형식 과 실행 유형 이 무엇 인지 설명 합 니 다.
컴 파일 할 때 형식 은 이 변 수 를 설명 할 때 사용 하 는 형식 에 의 해 결정 되 며, 실행 할 때 유형 은 실제 적 으로 이 변 수 를 부여 하 는 대상 에 의 해 결정 된다.컴 파일 할 때 형식 과 실행 할 때 형식 이 일치 하지 않 으 면 다 중 태 도 를 나타 낸다.하위 클래스 는 특수 한 부모 클래스 이기 때문에 자바 는 하나의 하위 클래스 대상 을 부모 클래스 참조 변수 에 직접 할당 할 수 있 습 니 다. 어떠한 유형 으로 도 전환 하거나 위로 전환 할 필요 가 없 으 며 시스템 에서 자동 으로 완성 할 수 있 습 니 다.인용 변 수 는 컴 파일 단계 에서 컴 파일 할 때 형식 이 가지 고 있 는 방법 만 호출 할 수 있 지만 실행 할 때 실행 할 때 형식 이 가지 고 있 는 방법 을 실행 합 니 다. 따라서 자바 코드 를 작성 할 때 인용 변 수 는 이 변수 가 사용 하 는 클래스 에 포 함 된 방법 (방 법 표) 만 호출 할 수 있 습 니 다.방법 과 달리 대상 의 속성 은 다 태 성 을 갖 추 지 못 한다.변 수 를 참조 하여 포 함 된 인 스 턴 스 속성 에 접근 할 때 시스템 은 항상 컴 파일 시 클래스 가 정의 하 는 속성 에 접근 하려 고 합 니 다. 실행 할 때 정의 하 는 속성 이 아 닙 니 다.《 미 친 자바 강의 》 에서 인용 하 다.
위의 말 에 따 르 면 자바 가 인용 변 수 를 설명 할 때 컴 파일 형식 과 실행 유형 이 일치 하지 않 을 수 있 습 니 다. 이러한 일치 하지 않 기 때문에 컴 파일 러 는 컴 파일 할 때 인용 변수의 컴 파일 형식 을 처리 하고 JVM 은 바이트 파일 을 실행 할 때 인용 변수의 실행 유형 을 따라 호출 하 는 방법 을 알 수 있 습 니 다. 물론 입 니 다.대상 의 속성 은 다 중 태 를 갖 추 지 않 습 니 다. 즉, 대상 이 속성 을 호출 할 때 항상 그 가 유형 을 컴 파일 하 는 속성 을 방문 합 니 다. 실행 유형 이 아니 라 이 점 도 우리 가 특별히 주의해 야 합 니 다!
두 번 째 문 제 는 무엇이 다 형 입 니까?
다 태 는 프로그램 에서 정 의 된 인용 변수 가 가리 키 는 구체 적 인 유형 과 이 인용 변 수 를 통 해 보 내 는 방법 이 프로 그래 밍 할 때 확정 되 지 않 고 프로그램 이 실행 되 는 동안 에 야 확정 되 는 것 을 말한다. 즉, 인용 변 수 는 어떤 종류의 인 스 턴 스 대상 을 가리 키 는 지, 이 인 스 턴 스 를 통 해 보 내 는 방법 은 도대체 어떤 종류 에서 이 루어 지 는 방법 인지 호출 하 는 것 이다.프로그램 이 실행 되 는 동안 에 만 결정 할 수 있 습 니 다.
방금 작은 코드 사례 에서 우 리 는 부모 클래스 가 doWork 방법 을 가지 고 있 는 것 을 볼 수 있 지만 하위 클래스 에서 다시 썼 습 니 다. 우 리 는 다른 상황 을 고려 합 니 다. 만약 에 우리 가 인용 변 수 를 정의 할 때 다 중 태 를 사용 하지만 하위 클래스 에 부모 클래스 를 덮어 쓰 는 doWork 방법 이 없 으 면 어떤 결과 일 까요?
4. 567913. 그러면 이 코드 의 결 과 는:
부류 구조 기
서브 클래스 구조 기
부모 클래스 doWork 방법
결과 분석: 앞의 구조 함수 의 결과 가 같 습 니 다. 그리고 doWork 방법 을 호출 할 때 저 희 는 변 수 를 참조 하 는 실행 유형 에 doWork 방법 이 있 는 지 찾 습 니 다. 그러나 하위 클래스 에 없 기 때문에 마지막 으로 부모 클래스 에서 찾 습 니 다. 찾 은 후에 부모 클래스 의 doWork 방법 을 호출 합 니 다.주의: 이 결 과 는 child 대상 이 여전히 컴 파일 형식 을 호출 하 는 방법 으로 오해 하기 쉽 습 니 다. 사실은 실행 할 때 찾 지 못 해서 부모 클래스 를 자동 으로 찾 습 니 다.
마지막 으로 조금 만 더 보충 하면 다 형 도 두 가지 로 나 뉘 는데 다른 하 나 는 컴 파일 할 때 다 형 이 고 방법 으로 다시 불 러 오 는 다 형 이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.