Denominazione delle restrizioni delle variabili in java

Perché i caratteri speciali (eccetto $ , _ ) non sono consentiti nei nomi delle variabili Java?

Questo non è il caso – molti caratteri speciali sono effettivamente validi per gli identificatori. È definito in JLS # 3.8 :

Un identificatore è una sequenza di lunghezza illimitata di lettere Java e cifre Java, la prima delle quali deve essere una lettera Java.
[…]
Una “lettera Java” è un carattere per il quale il metodo Character.isJavaIdentifierStart(int) restituisce true.
Una “lettera o cifra Java” è un carattere per il quale il metodo Character.isJavaIdentifierPart(int) restituisce true.

Ad esempio, questo è un nome di variabile valido:

 String sçèêûá¢é£¥ = "bc"; 

Puoi vedere tutti i caratteri validi con questo semplice codice:

 public static void main(String args[]) { for (int i = 0; i < Character.MAX_VALUE; i++) { if (Character.isJavaIdentifierPart(i)) { System.out.println("i = " + i + ": " + (char) i); } } } 

ps: bei esempi sul blog di @ PeterLawrey

Esiste in realtà un numero enorme di caratteri speciali che sono consentiti negli identificatori Java così come sono. Ad esempio, puoi avere ogni simbolo di valuta e tutti i 10 caratteri di continuazione (non solo _)

 if( ⁀ ‿ ⁀ == ⁀ ⁔ ⁀ || ¢ + ¢== ₡) 

Ancora più bizzaramente puoi avere caratteri che sono invisibili o che il testo deve essere stampato all’indietro.

Il seguente programma ha \u202e nei suoi identificatori risultando in aspetto “speciale”.

 for (char c‮h = 0; c‮h < Character.MAX_VALUE; c‮h++) if (Character.isJavaIdentifierPart(c‮h) && !Character.isJavaIdentifierStart(c‮h)) System.out.printf("%04x <%s>%n", (int) c‮h, "" + c‮h); 

Questo stampa tutti i caratteri speciali consentiti in un identificatore che compila ed esegue.

http://vanillajava.blogspot.co.uk/2012/09/hidden-code.html

http://vanillajava.blogspot.co.uk/2012/08/uses-for-special-characters-in-java-code.html

Il seguente codice è tutto valido in Java …

 int Δ = 1; double π = 3.141592; String 你好 = "hello"; Δ++; System.out.println(Δ); 

Direi che sono caratteri speciali per i nomi delle variabili.

Fonte: http://rosettacode.org/wiki/Unicode_variable_names#Java