2013-02-06 1 views
4

Java가 참조하는 jar의 메소드를 어떻게 알 수 있습니까? 그냥 실행을 위해 컴파일하고 그것을 읽을 수 없다면 나는 당신이 여전히 방법을 볼 수있는 방법을 볼 수 없습니다. 제 질문의 예는 "ShowABox"라는 방법을 사용하여 화면에 상자를 표시하는 항아리를 만든 경우와 같습니다. 그리고 그것을 다른 Java 프로젝트에 추가합니다. 그렇다면 IDE가 이미 컴파일 된 이후에 "ShowABox"라는 메서드가 있다는 것을 어떻게 알 수 있습니까? IDE에서 클래스 파일을 읽을 수 없으므로 메서드를 읽을 수있는 이유는 무엇입니까?자바는 외부 항아리의 방법을 어떻게 알 수 있습니까?

답변

0

JAR은 매니페스트가 첨부 된 단일 파일로 압축 된 모든 클래스 파일에 불과합니다. 각 클래스 파일은 공용 인터페이스를 완전히 설명합니다.

4

당신이 말하는 모든 정보는 실제로 이러한 이유로 정확하게 클래스 파일에 저장됩니다.

클래스 파일의 코드를 보면서 확실히 그렇게 할 수 있으며 정보가 유지되었다는 것을 증명할 것입니다. Java Decompiler을보십시오. 당신이 그것을 직접보고 싶다면 이클립스에 이것을 만들 수도있다.

0

JAR-파일 —이 http://en.wikipedia.org/wiki/JAR_(file_format) —를 참조 매우 특정한 형식을 가지고 있고 또한 —이 http://en.wikipedia.org/wiki/Java_class_file를 참조 매우 특정한 형식이 클래스 파일을 포함하고 있습니다. 이 형식은 Java Virtual Machine에 코드를 실행하는 데 필요한 정보를 제공하는 것 외에도 클래스, 인터페이스, 필드, 메소드 등을 찾는 데 필요한 정보를 IDE 및 컴파일러에 제공합니다.

0

jar는 압축 파일 용으로 압축 된 Java 컴파일 .class 바이너리가 포함 된 아카이브에 불과합니다. 그 내용은 디렉토리 구조로 구성된 컴파일 된 바이너리입니다. 따라서 파일이있는 디렉토리로 생각할 수도 있지만 단일 아카이브 (zip 파일처럼)로 압축 할 수 있습니다. jar 자체는 바이너리가 아닙니다 ("jar 파일이 이미 컴파일 되었기 때문에 존재합니다"). 컴파일 자체는하지 않지만 컴파일 된 요소를 포함합니다.

2

바이트 코드를 포함하는 컴파일 된 클래스. 메소드는 여전히 실제 이름을 가지고 있지만 코드는 JVM 명령어로 컴파일됩니다.

java class file format specification on wiki을 읽고 "상수 풀"단락을 읽고 메서드 이름 (다른 클래스 정보로)에 상수 풀이 들어 있습니다.

텍스트 편집기에서 일부 .class 파일을 열려고하면 메서드 이름이 나타납니다. (.class 파일은 종종 project/bin 폴더에 있거나, .jar 파일을 아카이브로 열고 거기에서 .class 파일을 가져옵니다)

관련 문제