클래스를 로드하려고 할 때마다 클래스 로더가 ClassNotFoundException 지정된 경로에서 클래스를 찾을 수 없는 경우 생성됩니다.
이것은 forName()을 사용하여 명시적으로 클래스를 로드하는 Java 프로그램을 실행하는 동안 발생할 수 있습니다. Class 또는 loadClass()라는 클래스의 메서드 ClassLoader 클래스의 메소드 이 두 클래스는 클래스 이름을 나타내는 문자열 값을 수락하고 지정된 클래스를 로드합니다.
이러한 메서드에 클래스 이름을 전달하는 동안 다음을 확인해야 합니다. -
-
이러한 메서드에 전달하는 클래스 이름은 정확해야 합니다.
-
지정된 클래스(패키지와 함께)는 현재 디렉토리에 있거나 해당 경로가 환경 변수 classpath에 나열되어야 합니다.
예시
Sample이라는 클래스를 생성했다고 가정합니다. 디렉토리 D:// 아래와 같이 컴파일 -
package myPackage.example; public class Sample { static { System.out.println("The class named Sample loaded successfully........."); } }
편집
D:\>javac -d . Sample.java
이것은 현재 디렉토리 myPackage.example에 패키지를 생성하고 .class를 생성합니다. 샘플 파일 그 안에 수업. 따라서 이 클래스를 로드하는 동안 동일한 디렉토리에 있어야 하며 절대 클래스 이름을 Class.forName()에 전달해야 합니다. 또는 loadClass()
예시
public class ClassNotFoundExample { public static void main(String args[]) { try { Class.forName("myPackage.exampl.Sample"); }catch (ClassNotFoundException ex) { ex.printStackTrace(); } } }
예외
위의 프로그램을 실행하면 패키지 이름의 철자가 틀리기 때문에 다음과 같은 예외가 발생합니다.
D:\>java ClassNotFoundExample java.lang.ClassNotFoundException: myPackage.exampl.Sample at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source) at java.base/java.lang.ClassLoader.loadClass(Unknown Source) at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Unknown Source) at ClassNotFoundExample.main(ClassNotFoundExample.java:4)
다른 디렉터리에서 특정 클래스에 액세스하려는 경우 -
에 대한 클래스 경로를 설정해야 합니다.-
.class 파일을 포함하는 폴더(가장 바깥쪽 패키지).
또는,
-
클래스가 포함된 jar 파일입니다.
철자 문제를 수정하고 E://
디렉토리에 있는 Java 파일에서 클래스를 로드하려고 한다고 가정합니다.예시
public class ClassNotFoundExample { public static void main(String args[]) { try { Class.forName("myPackage.example.Sample"); }catch (ClassNotFoundException ex) { ex.printStackTrace(); } } }
예외
지정된 클래스의 .class 파일(또는 이를 포함하는 jar 파일)이 포함된 패키지가 현재 디렉토리나 환경 변수 classpath의 경로 목록에 없기 때문에 여전히 동일한 예외가 발생합니다.
E:\>java ClassNotFoundExample java.lang.ClassNotFoundException: myPackage.example.Sample at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source) at java.base/java.lang.ClassLoader.loadClass(Unknown Source) at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Unknown Source) at ClassNotFoundExample.main(ClassNotFoundExample.java:4)
현재 시나리오에서 필수 클래스(예:"D://)를 포함하는 패키지가 포함된 디렉토리에 대한 클래스 경로를 설정합니다. ”하고 위의 자바 프로그램을 실행하여 작동시킨다.
E:\>javac ClassNotFoundExample.java E:\>java ClassNotFoundExample The class named Sample loaded successfully.........