Java Import 오기는 어떻게 작동합니까?
import
성명서가 어떻게 작동 하는지 여부를 알고 싶습니다 .
imports
내 프로젝트에 다음이 있기 때문에 묻습니다 .
import static com.googlecode.javacv.jna.highgui.cvCreateCameraCapture;
import static com.googlecode.javacv.jna.highgui.cvGrabFrame;
import static com.googlecode.javacv.jna.highgui.cvReleaseCapture;
import com.googlecode.javacv.CanvasFrame;
import com.googlecode.javacv.FrameGrabber;
import com.colorfulwolf.webcamapplet.gui.ImagePanel;
import com.googlecode.javacv.OpenCVFrameGrabber;
import com.googlecode.javacv.jna.cxcore.IplImage;
내 프로젝트 에이 패키지가 없는데 어떻게 가져 오나요?
내 모든 클래스로 JAR 파일을 만들면이 JAR 파일을 호스팅 할 서버가 무료로 인터넷에 액세스 할 수 있어야합니다 package
.
나는 Applet
수입품이 있는 내 문제가 있는데 , 인터넷 규칙이있을 수 있고 이해하기 위해이 질문을 있습니다.
<applet code="com.colorfulwolf.webcamapplet.WebcamApplet"
archive="http://san.redenetimoveis.com/teste.jar, http://san.redenetimoveis.com/core.jar, http://san.redenetimoveis.com/javacv.jar, http://san.redenetimoveis.com/javase.jar, http://san.redenetimoveis.com/jna.jar, http://san.redenetimoveis.com/customizer.jar, http://san.redenetimoveis.com/jmf.jar, http://san.redenetimoveis.com/mediaplayer.jar, http://san.redenetimoveis.com/multiplayer.jar, http://san.redenetimoveis.com/sound.jar"
height="550" width="550">
</applet>
동적 언어에서는 인터프리터가 import
일 때 파일을 읽고 평가합니다.
도서관이 경우 C에서 외부 주소 라이브러리는 최종 객체를 구축 할 수있는 주소 라이브러리를 사용할 수있는 링커의 작은 버전이 반면, 동적 라이브러리 링커의 작은 버전이 라이브러리를 사용할 코드를 만드는 실행 파일에.
Java에서는 import
컴파일러가없는 클래스 이름을 정규화되지 않은 이름으로 사용할 수 있습니다. String
대신 java.lang.String
. java.lang.*
가 기본적 컴파일러 으로 수행 하므로 실제로 가져올 필요가 없습니다 . 그러나 이것이라면 타이핑을 절약하기위한 것입니다. Java의 유형은 정규화 된 클래스 이름 코드가 실행될 때 String
실제로 java.lang.String
수업입니다. 패키지는 이름 충돌을 방지하고 두 클래스가 같은 접두사 유형 의 이전 C 규칙에 따라 대신하는 단순 이름 을 의존 수 있습니다. . 스페이스 네임 스페이스 라고 합니다 .java_lang_String
BTW, Java에는 특정 클래스의 상수를 많이 사용하는 입력을 추가로 절약 할 수 있는 정적 가져 오기 구조가 있습니다. 다음을 선언하는 단위 (.java 파일)에서
import static java.lang.Math.*;
대신 사용하는 상수를 PI
참조의 코드에서 Math.PI
, 그리고 방법 cos()
대신에 사용할 수 있습니다 Math.cos()
. 예를 들어 다음과 같이 있고 있습니다.
double r = cos(PI * theta);
클래스가 항상 최종 바이트 코드에서 정규화 된 이름으로 참조를 이해하면 코드가 실제로로드되는 방식을 이해해야합니다. 이는 해당 클래스의 클래스가 처음 생성 될 때 또는 클래스의 정적 멤버가 처음 액세스 될 때 발생합니다. 이때는 ClassLoader
클래스를 찾아 인스턴스화합니다. 클래스를 찾을 수 없으면 NoClassDefFoundError
가 (또는됩니다 던져 ClassNotFoundException
클래스가 프로그래밍 방식으로 검색되는 경우 AA ). 클래스를 찾기 위해 ClassLoader
일반적으로 $CLASSPATH
환경 변수에 경로를 확인합니다 .
문제를 해결하기 위해 다음 과 같은 요소 가 필요한 것입니다.applet
<applet
codebase = "http://san.redenetimoveis.com"
archive="test.jar, core.jar"
code="com.colorfulwolf.webcamapplet.WebcamApplet"
width="550" height="550" >
BTW, 표준 JRE에서는 아카이브가 필요 없습니다.
Java의 import 문은 순수한 구문 설탕입니다. import 는 레벨시에만 평가되어 코드 에서 이름 을 위치를 컴파일러에 알립니다 .
항상 정규화 된 클래스 이름을 지정하면 문없이 살 수 있습니다. 이 줄에는 수입품 문이 전혀 필요하지 않습니다.
javax.swing.JButton but = new javax.swing.JButton();
import 문을 사용하면 다음과 같이 코드를 더 쉽게 읽을 수 있습니다.
import javax.swing.*;
JButton but = new JButton();
Java로 가져 오기 오기는 시간에만 평가 전혀 작동하지 않습니다. (완전한 클래스 이름을 호출해야합니다. 바로 가기로 처리하십시오.) 실행에는 오기가 전혀없고 FQCN 만 있습니다.
런타임시 참조한 모든 클래스를 클래스 로더에서 찾을 수 있어야합니다. (클래스 로더 인프라는 때때로 어둡고 환경에 크게 의존합니다.) 애플릿의 경우 HTML 태그를 적절하게 리깅하고 필요한 JAR 아카이브를 서버에 제공해야합니다.
추신 : 런타임시 일치는 정규화 된 클래스 이름을 통해 수행됩니다.이 이름으로 발견 된 클래스는 컴파일 한 클래스와 반드시 동일하거나 호환되지 않습니다.
javac
(또는 java
런타임시)는 찾습니다 classes
에 가져 classpath
. 그들이 거기에없는 경우 classpath
다음 classnotfound
예외가 던져진다.
classpath
path
셸에서 명령이나 실행 파일을 찾는 데 사용하는 셸 의 변수 와 같습니다 .
전체 디렉토리 또는 개별 jar 파일을 classpath
. 또한 예 a classpath
는 로컬이 아니지만 인터넷 어딘가에있는 경로를 포함 할 수 있습니다. 의심을 해결하려면 classpath에 대해 자세히 읽어보십시오.
가져 오는 클래스는 클래스 경로에 있어야합니다. 따라서 Applet 사용자는 적절한 위치에 라이브러리를 가지고 있거나 jar 파일에 라이브러리를 포함하여 제공합니다. 예를 들면 다음과 같습니다. 릴리스를 하나의 JAR 파일로 병합하는 가장 쉬운 방법
참조 URL : https://stackoverflow.com/questions/12620369/how-does-java-import-work
'ProgramingTip' 카테고리의 다른 글
ImageMagick 사용 대리자 없음 (0) | 2020.12.15 |
---|---|
xcode에서 메서드 드롭 다운을 여는 바로 가기 (0) | 2020.12.15 |
Java 소스 코드에서 일부 ASCII 문자를 '\ uXXXX'형식으로 표현할 수없는 이유는 무엇입니까? (0) | 2020.12.15 |
어디에서나 BigDecimal로 어떻게 구문 분석을 수행 할 수 있습니까? (0) | 2020.12.15 |
pm2 오류 로그에 날짜를 추가하는 방법은 무엇입니까? (0) | 2020.12.15 |