나는 식별자가 숫자 나 '-'로 시작할 수없는 이유를 알고 있습니다.식별자에 '#', '.', ':'을 사용할 수없는 이유는 무엇입니까?
왜 '#', '.' (점) 및 ':'(콜론)을 식별자의 일부로 사용합니까? Java Language Specification에서
나는 식별자가 숫자 나 '-'로 시작할 수없는 이유를 알고 있습니다.식별자에 '#', '.', ':'을 사용할 수없는 이유는 무엇입니까?
왜 '#', '.' (점) 및 ':'(콜론)을 식별자의 일부로 사용합니까? Java Language Specification에서
"해야하지 않음"과 정확한 정의가 아닙니다. 더 나은 사용 "안돼"또는 "수 없습니다".
일단 질문을 변경하면 대답 할 수 있습니다. 그 이유는 자바 프로그래밍 언어가 정의 된 방식입니다. 그래서, 당신은 "왜 자바 제작자는 그러한 규칙을 정의 했습니까?"라고 할 수 있습니다.
몇 가지 대답이있을 수 있습니다. 가장 관련성이 높은 언어 중 하나는 모든 프로그래밍 언어 (적어도 알고있는 프로그래밍 언어)는 식별자에서 사용할 수있는 문자의 정의가 다소 동일하다는 것입니다.
문자 또는 숫자 또는 밑줄로 시작하는 문자 나 숫자 또는 밑줄 밑줄.
그런데 Java는 국가 알파벳을 포함하는 어떤 문자를 사용하도록 허용하기 때문에이 규칙을 확장합니다. 일반적으로 다른 (적어도 오래된) 프로그래밍 언어는 이것을 라틴 문자로만 제한합니다. 당신은 내가 단지 #
생각 쓴 모든 문자 중
이론적 식별자에 허용 된 문자 목록에 포함 할 수 있지만, 그들은 아마도 아마이 문자는 일부가 될 것입니다 자바의 향후 릴리스에 대해 생각을해야하지 않기로 결정 언어의
식별자로 ,
및 ;
을 사용하는 것은 명백하게 불가능하다고 생각합니다. for
운영자를 생각해보십시오.
:
식별자는 Java 문자해야 처음있는 자바 문자와 자바 자리 의 무제한 길이의 순서입니다.
... "Java 문자"는
Character.isJavaIdentifierStart(int)
메서드가 true를 반환하는 문자입니다.
이들은 Java 문자가 아니기 때문에 시작할 수 없습니다. $
은이지만 그 사용법은 내부 클래스 용으로 더 많이 예약되어 있습니다.
나는 왜 JLS가 당신이 할 수 없다고 말하는가에 관한 질문이라고 생각합니다. – immibis
JVM 용으로 예약 된 charecter를 사용할 수 없습니다.이 charecter는 seprators delimters로 식별됩니다. 이것은 기본적으로 Java에서 잘못된 연산 인 "new"키워드를 변수 이름으로 사용하는 것과 같습니다.
코드가 컴파일되지 않으니까? 숫자는 식별자의 일부일 수 있습니다. 그 규칙을 어디에서 얻었는지 나는 모른다. 또한 점들이 식별자의 일부가 될 수 있는지 생각해보십시오. 이 코드는 무엇을 할 것인가 :'foo.bar.baz.hello()'? 바는 foo의 분야일까요? 또는 foo.bar가 변수가됩니까? –
Java가 기반으로하는 C에서 허용되지 않았기 때문에 허용되지 않기 때문입니다. 어떤 경우에는 미래의 사용을 위해 예약되어 있지만'# '을 허용 할 수 있지만'.'와':'는 Java에서 특별한 의미를 지닙니다. –
JLS가 So (tm) – fge