Java 식별자에서 "연결 문자"란 무엇입니까?
SCJP를 읽고 있는데, 이 줄에 대해 질문이 있습니다.
식별자는 문자, 통화 문자($) 또는 밑줄(_)과 같은 연결 문자로 시작해야 합니다.식별자는 숫자로 시작할 수 없습니다!
유효한 식별자명은 밑줄과 같은 연결 문자로 시작할 수 있음을 나타냅니다.밑줄만 있는 줄 알았는데?다른 연결 캐릭터는 어떤 것들이 있나요?
다음은 연결 캐릭터 목록입니다.단어들을 연결하는 데 사용되는 문자들입니다.
http://www.fileformat.info/info/unicode/category/Pc/list.htm
U+005F _ LOW LINE
U+203F ‿ UNDERTIE
U+2040 ⁀ CHARACTER TIE
U+2054 ⁔ INVERTED UNDERTIE
U+FE33 ︳ PRESENTATION FORM FOR VERTICAL LOW LINE
U+FE34 ︴ PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
U+FE4D ﹍ DASHED LOW LINE
U+FE4E ﹎ CENTRELINE LOW LINE
U+FE4F ﹏ WAVY LOW LINE
U+FF3F _ FULLWIDTH LOW LINE
이것은 Java 7에서 컴파일됩니다.
int _, ‿, ⁀, ⁔, ︳, ︴, ﹍, ﹎, ﹏, _;
case면 . 이 경우 이우tp는 열의 이름과 지정된 행의 값입니다.
Column<Double> ︴tp︴ = table.getColumn("tp", double.class);
double tp = row.getDouble(︴tp︴);
이하와 같다
for (int i = Character.MIN_CODE_POINT; i <= Character.MAX_CODE_POINT; i++)
if (Character.isJavaIdentifierStart(i) && !Character.isAlphabetic(i))
System.out.print((char) i + " ");
}
인쇄하다
$ _ ¢ £ ¤ ¥ ؋ ৲ ৳ ৻ ૱ ௹ ฿ ៛ ‿ ⁀ ⁔ ₠ ₡ ₢ ₣ ₤ ₥ ₦ ₧ ₨ ₩ ₪ ₫ € ₭ ₮ ₯ ₰ ₱ ₲ ₳ ₴ ₵ ₶ ₷ ₸ ₹ ꠸ ﷼ ︳ ︴ ﹍ ﹎ ﹏ ﹩ $ _ ¢ £ ¥ ₩
5천 까지 Character.isJavaIdentifierStart(c) 10진수
정규 Java 식별자의 최종 사양은 Java Language Specification에서 확인할 수 있습니다.
유니코드의 커넥터 문자 목록은 다음과 같습니다.키보드에는 없습니다.
LINE +005F u u _
UNDERTIE U+203F】
타이 U+2040)
언더타이U+2054
폼
WAVY LINE용 U폼
LINE【U+FE4D】
LINE U+FE4E】
LINE U+FE4F"
LINE u U+FF3F u u u 。
연결 문자는 두 문자를 연결하는 데 사용됩니다.
Java에서 연결 문자는 Character.getType(int codePoint)/Character.getType(char ch)이 Character와 동일한 값을 반환하는 문자입니다.커넥터_정지
Java에서는 문자 정보는 Unicode 표준에 따라 Connector_Pction의 별칭인 일반 카테고리 Pc를 할당하여 연결 문자를 식별합니다.
다음 코드 스니펫,
for (int i = Character.MIN_CODE_POINT; i <= Character.MAX_CODE_POINT; i++) {
if (Character.getType(i) == Character.CONNECTOR_PUNCTUATION
&& Character.isJavaIdentifierStart(i)) {
System.out.println("character: " + String.valueOf(Character.toChars(i))
+ ", codepoint: " + i + ", hexcode: " + Integer.toHexString(i));
}
}
jdk1.6.0_45에서 식별자를 시작하는 데 사용할 수 있는 연결 문자를 인쇄합니다.
character: _, codepoint: 95, hexcode: 5f
character: ‿, codepoint: 8255, hexcode: 203f
character: ⁀, codepoint: 8256, hexcode: 2040
character: ⁔, codepoint: 8276, hexcode: 2054
character: ・, codepoint: 12539, hexcode: 30fb
character: ︳, codepoint: 65075, hexcode: fe33
character: ︴, codepoint: 65076, hexcode: fe34
character: ﹍, codepoint: 65101, hexcode: fe4d
character: ﹎, codepoint: 65102, hexcode: fe4e
character: ﹏, codepoint: 65103, hexcode: fe4f
character: _, codepoint: 65343, hexcode: ff3f
character: ・, codepoint: 65381, hexcode: ff65
다음은 jdk1.6.0_45의 컴파일입니다.
int _, ‿, ⁀, ⁔, ・, ︳, ︴, ﹍, ﹎, ﹏, _, ・ = 0;
위의 선언은 jdk1.7.0_80 및 jdk1.8.0_51에서 다음 2개의 연결 문자(백워드 호환성)에 대해 컴파일되지 않는 것이 분명합니다..filename!!!) )
character: ・, codepoint: 12539, hexcode: 30fb
character: ・, codepoint: 65381, hexcode: ff65
어쨌든, 자세한 것은 차치하고, 시험은 기본적인 라틴 문자 집합에만 초점을 맞춥니다.
또한 Java의 법적 식별자에 대해서는 여기에 사양을 제공합니다.자세한 내용은 Character 클래스 API를 참조하십시오.
Java 식별자에서 허용되는 가장 재미있는 문자 중 하나는 "Zero Width Non Joiner"(‌, U+200C, https://en.wikipedia.org/wiki/Zero-width_non-joiner))라는 유니코드 문자입니다.
이것은 XML의 다른 부분을 참조하는 속성 값 안에 한 번 있습니다. ZWNJ는 "0 폭"이므로 볼 수 없습니다(커서를 따라 걸을 때 이외에는 문자 바로 앞에 표시됩니다).로그 파일 및/또는 콘솔 출력에도 표시되지 않았습니다.그러나 검색 필드에 복사 & 페이스트하여 검색 필드에 복사하여 붙여 넣기 때문에 참조된 위치를 찾을 수 없었습니다.검색 필드에 문자열(표시되는 부분)을 입력하면 참조된 위치가 발견되었습니다.이걸 알아내는데 시간이 좀 걸렸어요
Zero-Width-Non-Joiner를 입력하는 것은 유럽식 키보드 레이아웃을 사용할 때 매우 간단합니다.최소한 독일어판에서는 "Europatastatur 2.02"와 같이 사용할 수 있습니다.두 개의 키는 불행히도 대부분의 키보드에서 서로 바로 옆에 있어 우연히 부딪히기 쉽습니다.
Java로 돌아가기: 다음과 같은 코드를 작성할 수 있을 것 같습니다.
void foo() {
int i = 1;
int i = 2;
}
두 번째 i는 제로 폭 논슬레이저(스택오버플로우 에디터에서는 위의 코드로 스냅할 수 없습니다)가 부가되어 있습니다만, 동작하지 않았습니다.IntelliJ(16.3.3)는 불평하지 않았지만 JavaC(Java 8)는 이미 정의된 식별자에 대해 불평했다.JavaC는 실제로 식별자의 일부로서 ZWNJ 문자를 허용하는 것처럼 보이지만 리플렉션을 사용하여 ZWNJ 문자가 무엇을 하는지 확인할 때 ZWNJ 문자는 식별자에서 제외된다.
(처음뿐만 아니라) 식별자 내에서 사용할 수 있는 문자 목록이 훨씬 더 재미있습니다.
for (int i = Character.MIN_CODE_POINT; i <= Character.MAX_CODE_POINT; i++)
if (Character.isJavaIdentifierPart(i) && !Character.isAlphabetic(i))
System.out.print((char) i + " ");
리스트는 다음과 같습니다.
I wanted to post the output, but it's forbidden by the SO spam filter. That's how fun it is!
대부분의 컨트롤 문자가 포함되어 있습니다!내 말은 종소리야!소스코드가 fn벨을 울리게 할 수 있습니다!또는 소프트 하이픈과 같이 가끔만 표시되는 문자를 사용합니다.
언급URL : https://stackoverflow.com/questions/11774099/what-are-connecting-characters-in-java-identifiers
'source' 카테고리의 다른 글
| ++i와 i++의 차이점은 무엇입니까? (0) | 2022.09.01 |
|---|---|
| Vuex: 이미 가져온 데이터를 기반으로 엑시스를 사용하여 데이터 가져오기 (0) | 2022.09.01 |
| 컴파일러와 링커의 차이점은 무엇입니까? (0) | 2022.09.01 |
| 초기화, Guava UnmutableMap (0) | 2022.09.01 |
| glibc의 stren은 왜 이렇게 복잡해야 빨리 실행할 수 있나요? (0) | 2022.09.01 |