Saya membaca untuk SCJP dan saya memiliki pertanyaan mengenai baris ini:
Pengidentifikasi harus dimulai dengan huruf, karakter mata uang ($), atau karakter penghubung seperti garis bawah (_). Pengidentifikasi tidak dapat memulai dengan angka!
Ini menyatakan bahwa nama pengidentifikasi yang valid dapat mulai dengan karakter penghubung seperti garis bawah. Saya pikir garis bawah adalah satu-satunya pilihan yang valid? Apa karakter penghubung lain yang ada?
java
unicode
identifier
scjp
Luke yang beruntung
sumber
sumber
_
adalah pengenal "usang". Secara khusus, kompiler memancarkan peringatan berikut: (penggunaan '_' sebagai pengidentifikasi mungkin tidak didukung dalam rilis setelah Java SE 8) ._
untuk digunakan dalam fitur bahasa di masa depan . Pengidentifikasi yang mulai dengan garis bawah masih oke, tetapi garis bawah tunggal adalah kesalahan jika digunakan sebagai nama parameter lambda, dan peringatan di mana pun.. ; [ / < > :
berjalan: stackoverflow.com/questions/26791204/… docs.oracle.com/javase/specs/jvms/se7/html/… Segala sesuatu yang lain adalah pembatasan khusus Java._, _ -> doSomething();
.Jawaban:
Berikut adalah daftar karakter penghubung. Ini adalah karakter yang digunakan untuk menghubungkan kata-kata.
http://www.fileformat.info/info/unicode/category/Pc/list.htm
Ini mengkompilasi di Java 7.
Sebuah contoh. Dalam hal ini
tp
adalah nama kolom dan nilai untuk baris yang diberikan.Pengikut
cetakan
$ _ ¢ £ ¤ ¥ ؋ ৲ ৳ ৻ ૱ ௹ ฿ ៛ ‿ ⁀ ⁔ ⁔ ₠ ₢ ₢ ₥ ₦ ₦ ₧ ₩ ₩ ₩ ₪ ₭ ₭ ₯ ₰ ₱ ₱ ₱ ₱ ₱ ₸ ₸ ₸ ₸ ₸ ﹏ ﹏ ﹏ ﹏ ﹏ ﹩ $ _ ¢ £ ¥ ₩
sumber
int ৲, ¤, ₪₪₪₪;
: Dif( ⁀ ‿ ⁀ == ⁀ ⁔ ⁀)
atauif ($ == $)
atauif (¢ + ¢== ₡)
atauif (B + ︳!= ฿)
beralihlah ke seluruh 65 ribu karakter dan tanyakan
Character.isJavaIdentifierStart(c)
. Jawabannya adalah: "undertie" desimal 8255sumber
(1 to 65535).map(_.toChar).filter(Character.isJavaIdentifierStart).size
- menghasilkan 48529 karakter ...Character.MAX_CODE_POINT
, yang mungkin lebih dari2<<16
.Spesifikasi pasti pengenal Java legal dapat ditemukan di Spesifikasi Bahasa Java .
sumber
L
[semua],Nl
,Sc
,Pc
.Berikut adalah Daftar Karakter konektor di Unicode. Anda tidak akan menemukannya di keyboard Anda.
U + 005F LOW GARIS _
U + 203F UNDERTIE ‿
U + 2040 KARAKTER TIE ⁀
U + 2054 TERBALIK UNDERTIE ⁔
U + FE33 PRESENTASI FORMULIR VERTICAL RENDAH GARIS _ U
+ FE34 PRESENTASI FORMULIR VERTICAL bergelombang RENDAH GARIS ︴
U + FE4D putus-putus RENDAH GARIS ﹍
U + FE4E CENTRELINE LOW LINE ﹎
U + FE4F WAVY LOW LINE ﹏
U + FF3F FULLWIDTH LOW LINE INE
sumber
Karakter penghubung digunakan untuk menghubungkan dua karakter.
Di Jawa, karakter penghubung adalah karakter yang Character.getType (int codePoint) / Character.getType (char ch) menghasilkan nilai yang sama dengan Character.CONNECTOR_PUNCTUATION .
Perhatikan bahwa di Jawa, informasi karakter didasarkan pada standar Unicode yang mengidentifikasi karakter penghubung dengan menetapkannya kategori umum Pc, yang merupakan alias untuk Connector_Punctuation .
Cuplikan kode berikut,
mencetak karakter penghubung yang dapat digunakan untuk memulai pengidentifikasi pada jdk1.6.0_45
Kompilasi berikut pada jdk1.6.0_45,
Rupanya, deklarasi di atas gagal dikompilasi pada jdk1.7.0_80 & jdk1.8.0_51 untuk dua karakter penghubung berikut (kompatibilitas mundur ... oops !!!),
Pokoknya, selain detail, ujian hanya berfokus pada rangkaian karakter Basic Latin .
Juga, untuk pengidentifikasi hukum di Jawa, spesifikasi disediakan di sini . Gunakan API kelas Karakter untuk mendapatkan detail lebih lanjut.
sumber
Salah satu karakter paling menyenangkan yang diizinkan di pengidentifikasi Java (namun tidak di awal) adalah karakter unicode bernama "Zero Width Non Joiner" (& zwnj ;, U + 200C, https://en.wikipedia.org / wiki / Zero-width_non-joiner ).
Saya punya ini sekali dalam sepotong XML di dalam nilai atribut memegang referensi ke bagian lain dari XML itu. Karena ZWNJ adalah "lebar nol" tidak dapat dilihat (kecuali ketika berjalan bersama dengan kursor, itu ditampilkan tepat pada karakter sebelumnya). Itu juga tidak bisa dilihat di logfile dan / atau keluaran konsol. Tapi itu ada di sana sepanjang waktu: salin & tempel ke bidang pencarian dan karenanya tidak menemukan posisi yang dimaksud. Mengetik (terlihat bagian dari) string ke dalam kolom pencarian namun menemukan posisi yang dimaksud. Butuh waktu beberapa saat untuk memikirkan ini.
Mengetik Zero-Width-Non-Joiner sebenarnya cukup mudah (terlalu mudah) saat menggunakan tata letak keyboard Eropa, setidaknya dalam varian Jerman, misalnya "Europatastatur 2.02" - dapat dicapai dengan AltGr + ".", Dua kunci yang sayangnya terletak tepat di sebelah satu sama lain di sebagian besar keyboard dan dapat dengan mudah disatukan secara tidak sengaja.
Kembali ke Jawa: Saya pikir baik, Anda bisa menulis beberapa kode seperti ini:
dengan yang kedua saya tambahkan oleh zero-width-non-joiner (tidak bisa melakukan itu dalam kode di atas terpotong di editor stackoverflow), tetapi itu tidak berhasil. IntelliJ (16.3.3) tidak mengeluh, tetapi JavaC (Java 8) memang mengeluh tentang pengidentifikasi yang sudah didefinisikan - tampaknya JavaC benar-benar memungkinkan karakter ZWNJ sebagai bagian dari pengidentifikasi, tetapi ketika menggunakan refleksi untuk melihat apa yang dilakukannya, ZWNJ karakter dilucuti dari pengidentifikasi - sesuatu yang karakter seperti ‿ tidak.
sumber
Daftar karakter yang dapat Anda gunakan di dalam pengidentifikasi Anda (bukan hanya di awal) jauh lebih menyenangkan:
Daftarnya adalah:
Ini mencakup sebagian besar karakter kontrol! Maksudku lonceng dan omong kosong! Anda dapat membuat kode sumber Anda membunyikan bel fn! Atau gunakan karakter yang hanya akan ditampilkan kadang-kadang, seperti tanda hubung lunak.
sumber