yechanl90 / java

0 stars 0 forks source link

java package와 java.lang.ClassNotFoundException #2

Open yechanl90 opened 3 years ago

yechanl90 commented 3 years ago

에러메세지

C:\Users\yechan\Desktop\study\java\basic\bank\bin\javabank>java javabank.Account
Error: Could not find or load main class javabank.Account
Caused by: java.lang.ClassNotFoundException: javabank.Account

에러분석 및 해결

해당 클래스를 찾지못해 발생한 Exception. 실제 문제의 원인은 잘못된 디렉토리에서 byte코드를 수행시키려함. bin 위치에서 위와같이 수행시 정상적으로 동작함

src와 bin 디렉토리를 별도 둔 상황에서 package를 명시한 java code를 아래와 같이 컴파일하면, bin 디렉토리 하위에 패키지로 이름으로 서브 디렉터리가 생성이 되고 그 하위에 클래스파일이 생성이됨. 이때 컴파일된 클래스의 FQCN(Fully Qualified Class Name)은 javabank.Account이다.

C:\Users\yechan\Desktop\study\java\basic\bank\src\javabank>javac -d ..\..\bin Account.java -encoding UTF8

관련 source code

package javabank;

public class Account {
    private String accountNo;
    private long balance;

    public void deposit(long amount) {  // deposit  예금하다
        balance = balance + amount;
    }

    public void withdraw(long amount) { // balance 계좌잔고
        balance = balance - amount;
    }

    public long getBalance() {
        return balance;
    }

    public static void main(String[] args) {
        System.out.println("패키지 테스트");
    }

}
yechanl90 commented 3 years ago

현재 디렉토리에 class 파일이 없는경우

JVM에 바이트 코드가 어디에 위치하는지 알려주어야 하는데, 이때 -classpath or -cp 옵션을 사용한다.

java -cp C:\Users\yechan\Desktop\study\java\basic\bank\bin javabank.Account