Java에서 정적 유형 검사가 어떻게 진행되는지에 대한 실례 사고방식 상세 설명
• 정적 유형 검사: 프로그램의 원본 코드를 바탕으로 유형의 안전을 검증하는 과정;
• 동적 유형 검사: 프로그램이 실행되는 동안 유형의 안전을 검증하는 과정;
Java는 정적 유형 검사를 사용하여 컴파일하는 동안 프로그램을 분석하여 유형 오류가 없는지 확인합니다.기본적인 사상은 유형 오류가 운행 기간에 발생하지 않도록 하는 것이다.
다음 코드는 하나의 예입니다. 그를 이해하면 자바 정적 형식 검사가 어떻게 작동하는지 더 잘 이해할 수 있습니다.
코드 예제
만약 우리가 다음과 같은 종류가 있다고 가정한다면, A와 B, B는 A를 계승한다.
class A {
A me() {
return this;
}
public void doA() {
System.out.println("Do A");
}
}
class B extends A {
public void doB() {
System.out.println("Do B");
}
}
우선, new B()를 호출합니다.me()는 무엇을 되돌려줍니까?A 객체입니까, B 객체입니까?me() 메서드는 A객체로 되돌아온다고 선언되기 때문에 컴파일러는 A객체로 되돌아오는 것만 알 수 있습니다.그러나 실행 중에는 B 객체가 반환됩니다. B가 A의 방법을 계승하여 자신에게 반환했기 때문입니다.
정적 유형 검사는 어떻게 작동합니까?
다음 코드 줄은 불법입니다. 방법doB()가 B 대상에 의해 호출되더라도.문제는 인용 형식이 A인데 컴파일러에서 실제 형식을 모르기 때문에 A형식으로 간주한다는 점이다.
//illegal
new B().me().doB();
따라서 다음 코드만 호출될 수 있습니다.
//legal
new B().me().doA();
그러나 다음과 같은 코드로 강제 유형을 B로 변환할 수 있습니다.
//legal
((B) new B().me()).doB();
다음은 C클래스를 추가합니다.
class C extends A{
public void doBad() {
System.out.println("Do C");
}
}
그러면 다음 코드 문장은 정적 유형 검사를 통과합니다.
//legal
((C) new B().me()).beBad();
컴파일러는 실제 형식을 모르지만 실행 중에 이상을 던집니다. B 형식은 C 형식으로 변환할 수 없기 때문입니다.위에서 말한 것은 편집자가 여러분께 소개한 자바에서 정적 유형 검사가 어떻게 진행되었는지 실례적인 사고방식에 대한 상세한 지식입니다. 여러분께 도움이 되었으면 합니다. 만약에 궁금한 점이 있으면 저에게 메시지를 남겨 주시면 편집자는 제때에 답장을 드리겠습니다.여기에서도 저희 사이트에 대한 지지에 감사드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
38. Java의 Leetcode 솔루션텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.