2011-09-20 18 views
46

Recentemente ho letto che il segno $ è permesso nei nomi delle variabili Java, ma ha un significato speciale. Sfortunatamente non è menzionato cosa sia questo significato speciale.

Pertanto, chiedo qui: qual è il significato speciale di $ nei nomi di variabili in Java?

Ecco la citazione esatta dal

Java: Introduzione alla soluzione dei problemi e Programmazione

da Walter Savitch:

Java fa consentire il dollaro segno simbolo $ alla appare in un identificatore, ma questi identificatori hanno un significato speciale, quindi non dovresti usare il simbolo $ nella tua identità rs.

+0

discussione correlati:.. http://stackoverflow.com/questions/6167326/java-class-name-containing-dollar-sign – adatapost

+0

Citando in cui leggete questo potrebbe essere bello –

+0

I modificato la domanda –

risposta

43

$ viene utilizzato internamente dal compilatore per decorare determinati nomi. Wikipedia gives the following example:

public class foo { 
    class bar { 
     public int x; 
    } 

    public void zark() { 
     Object f = new Object() { 
      public String toString() { 
       return "hello"; 
      } 
     }; 
    } 
} 

La compilazione di questo programma produrrà tre file .class:

  • foo.class, contenente il principale (esterna) classe foo
  • foo$bar.class, che contiene la classe interna denominata foo.bar
  • foo$1.class, contenente la classe interna anonima (locale a metho d foo.zark)

Tutti questi nomi di classe sono validi (come sono consentiti $ simboli nella specifica JVM).

[fine citazione]

In modo simile, javac utilizza $ in alcuni generati automaticamente nomi di variabili: per esempio, this$0 et al sono utilizzati per le implicite this riferimenti delle classi interne alla loro classi esterne.

Infine, the JLS recommends the following:

Il $ personaggio deve essere utilizzato in generato meccanicamente codice sorgente o, raramente, per accedere ai nomi preesistenti su sistemi legacy.

+0

Questo non è proprio vero. Posso nominare la mia classe Test $ – RoflcoptrException

+3

La domanda non è chiedere nomi di classe, ma per var iables. –

31

C'è no special meaning for it:

"I nomi delle variabili sono case-sensitive Il nome di una variabile può essere qualsiasi identificatore legale - una sequenza senza limiti di lunghezza di lettere e cifre Unicode, inizia con una lettera, il. segno di dollaro "$", o il carattere di sottolineatura "_". La convenzione, tuttavia, è di iniziare sempre i nomi delle variabili con una lettera, non "$" o "_".Inoltre, il carattere del simbolo del dollaro, per convenzione, non viene mai utilizzato. Potresti trovare alcune situazioni in cui i nomi generati automaticamente conterranno il simbolo del dollaro, ma i nomi delle variabili dovrebbero sempre evitare di usarlo. Una convenzione simile esiste per il carattere di sottolineatura; mentre è tecnicamente legale iniziare il nome della variabile con "_", questa pratica è scoraggiata. Lo spazio bianco non è permesso "

Problemi correlati