개발 환경과 첫 프로그램
5. 자주 하는 실수 (Tip)
❌ 실수 1: 파일 이름과 클래스 이름이 다름
// 파일: hello.java (소문자 h)
public class Hello {
public static void main(String[] args) { }
}컴파일 오류: class Hello is public, should be declared in a file named Hello.java. 자바는 대소문자를 구분합니다.
✅ 파일 이름을 Hello.java로 맞춥니다.
❌ 실수 2: 실행할 때 .class를 붙임
javac Hello.java
java Hello.class → Error: Could not find or load main class Hello.classjava 명령은 클래스 이름을 받습니다. 파일 이름이 아닙니다. Hello.class라고 쓰면 JVM은 "Hello라는 패키지 안의 class라는 클래스"를 찾으려 합니다.
✅ java Hello
❌ 실수 3: main 시그니처를 변형
public class App {
public void main(String[] args) { // static 누락
System.out.println("start");
}
}컴파일은 됩니다. 실행하면 Error: Main method is not static in class App. JVM은 객체를 만들지 않고 main을 호출하므로 반드시 static이어야 합니다.
✅ public static void main(String[] args) 그대로 씁니다.
❌ 실수 4: 다른 폴더에서 실행
C:\work> javac project\Hello.java → project\Hello.class 생성
C:\work> java Hello → Could not find or load main class HelloJVM은 현재 폴더(와 classpath)에서만 클래스를 찾습니다. Hello.class는 project 폴더에 있습니다.
✅ cd project 후 java Hello, 또는 java -cp project Hello
❌ 실수 5: 한글이 깨짐
윈도우 터미널에서 System.out.println("안녕")이 ?????로 나오는 경우. 소스 파일 인코딩(UTF-8)과 터미널 인코딩(CP949)이 다르기 때문입니다.
✅ javac -encoding UTF-8 Hello.java로 컴파일하고, 터미널에서 chcp 65001로 코드페이지를 UTF-8로 바꿉니다. VSCode 터미널은 기본이 UTF-8이라 대부분 문제없습니다.
❌ 실수 6: 수정 후 컴파일을 다시 안 함
코드를 고쳤는데 결과가 그대로인 경우. java는 .class를 실행하지 .java를 읽지 않습니다. 수정한 뒤 javac를 다시 돌리지 않으면 옛날 .class가 실행됩니다.
✅ 수정 → javac → java 순서를 지킵니다. (JDK 11 이상은 단일 파일에 한해 java Hello.java로 컴파일+실행을 한 번에 할 수 있습니다.)