2010-04-27 10 views
13

Sono stato di programmazione in Java per un po ', e ho appena incontrato questa sintassi per la prima volta:Quando si inserisce un punto e virgola dopo un metodo di chiusura del rinforzo?

public Object getSomething(){return something;}; 

Quello che mi è interessante è il punto e virgola finale. Non sembra che stia causando un errore del compilatore e, per quanto ne so, non genera errori di runtime, quindi sembra essere una sintassi valida. Quando dovrei usare questa sintassi? O è solo qualcosa che è permesso ma generalmente non usato?

+1

nota: lo stesso vale per le classi - è possibile terminarle con ';' in stile 'C++'; è utile quando si utilizza il codice direttamente portato. – vaxquis

risposta

17

È consentito dalla grammatica come concessione di errori di sintassi innocui, ma non è generalmente utilizzato e non significa nulla di diverso (che non lascia il punto e virgola).

Proprio come };all'interno un metodo (ad esempio dopo un blocco if) è una dichiarazione nullo e è consentito, una virgola errante fuori un metodo è considerato una dichiarazione non è permessa.

In particolare, la seguente produzione del Java Language Specification permette questo:

ClassBodyDeclaration: 
    ; 
    [static] Block 
    ModifiersOpt MemberDecl 
11

È semplicemente un'istruzione vuota: è molto probabilmente un refuso.

Considerare il fatto che in tutte le lingue basate su C, un'istruzione termina con un punto e virgola. Un punto e virgola sospeso come questo termina semplicemente la frase corrente che in questo caso non è nulla.

+0

Quindi potrei aggiungere tecnicamente un numero qualsiasi di punti e virgola in un punto diverso dal mezzo di una dichiarazione? – froadie

+3

@froadie - Sì, puoi farlo. –

8

o è solo qualcosa che è consentito, ma in genere non utilizzato?

Yeap, il gioco è fatto. È valido Java ma non fa nulla:

public class X { 
    ;;;;;;;;;;;;;;;;;; 
    ;;;;; 
    ; 
} 
Problemi correlati