Software Workshop

java: <identifier> expected

클래스 이름, 메소드 이름, 변수 이름 등의 식별자(identifier)가 위치해야 할 곳에 식별자가 존재하지 않기 때문에 발생하는 문법 오류이다.

주된 발생 이유는 다음과 같다.

  1. 선언 이외의 코드가 메소드 내부가 아닌 메소드 외부에 존재하는 경우
  2. 그냥 변수명을 누락한 경우
  3. 변수의 타입을 누락한 경우

1. 실행 코드가 메소드 외부에 존재

public class MyTest {
    int a = 3;
    System.out.println(a);
   
    public static void main(String[] args) {
    }   
}

sysout 문장은 MyTest 클래스 내부가 아니라 메소드 내부로 들어가야 한다.

2. 변수명 누락

public class MyTest {
    Integer;
    String s;
}

Integer 다음에 변수명을 지정해야 한다.

특히, 예외처리할 때 이런 실수를 종종 저지를 수 있다.

try {
		int num = Integer.valueOf(str);
} catch (NumberFormatException) {
}

NumberFormatException e처럼 예외 클래스 인스턴스가 바인딩될 변수명을 적어줘야 한다.

3. 변수 타입 누락

public class MyTest {
    i;
    String s;
}

i의 타입을 지정해야 한다.

기타 케이스

public class MyTest {
    int 123a;
}

숫자로 시작하는 변수명은 identifier로 인정이 안 된다.
변수명이 숫자로 시작하지 않도록 수정해야 한다. identifier는 영문자나 _로 시작해야 한다.