2016-12-19 2 views
-2

In Java kommt Semikolon nach geschweiften Klammern nur für Arrays und enum. Aber ich fand es anders in Android-Codierung. Zum Beispiel warum gibt es eine ; nach } in den folgenden Code:.Wann müssen wir ein Semikolon nach geschweiften Klammern einfügen? d.h. "};"

Thread myThread=new Thread(){ 
    @Override 
    public void run(){ 
     // something 
    } 
}; 
+2

Android ist immer noch Java. Du hast gerade einen 'neuen Thread();' gemacht. Worüber bist du verwirrt? –

+0

Und du * kannst * tun 'if (bool) {}; ', aber niemand wirklich wirklich –

+2

Ein'; 'ist nach jeder * Anweisung * und an einigen anderen Stellen wie Feld/Variablendeklarationen erforderlich. Klassendeklarationen (einschließlich solcher für anonyme Klassen, obwohl solche in Anweisungen vorkommen) sind keine Anweisungen. Methodendeklarationen sind keine Anweisungen. Codeblöcke (die oft bedingten Operatoren folgen) sind keine Anweisungen. – user2864740

Antwort

1

„Anonymous Klassen ermöglichen es Ihnen, Ihren Code übersichtlicher machen Sie ermöglichen es Ihnen zu erklären und eine Klasse zugleich instanziiert Sie wie lokale Klassen sind. außer dass sie keinen Namen haben. Verwenden Sie sie, wenn Sie eine lokale Klasse nur einmal verwenden müssen. "

Java - Anonymous Classes

Statt so etwas wie dies zu tun:

class MyThread extends Thread { 
    @Override 
    public void run(){ 
     // something 
    } 
} 
... 
Thread myThread= new MyThread(); 

Sie können den Code sorten durch diese andere Art und Weise unter Verwendung von anonymen Klassen zu tun.

Thread myThread=new Thread(){ 
    @Override 
    public void run(){ 
     // something 
    } 
}; 
+0

Was hat das mit Semikolons zu tun? –

+0

anonyme Klasse, wenn deklariert und instanziiert gleichzeitig Teil der Anweisung – Kalenda

+1

, aber Sie können zum Beispiel 'myObj.call (new Foo() {....});' und es gibt keine ';' nach dem Ende '}', Semikolon ist, weil es 'Variable = Ausdruck' Anweisung ist, also müssen Sie'; 'nach' Ausdruck' hinzufügen – pskink

0

Dies ist ein Buchbeispiel einer anonymen Klasse, die wiederum ein Semikolon erfordert, da Sie tatsächlich die Thread-Klasse instanziieren.

0

Da der Code immer noch von der Form variable = statement;

dem Codeblock der Klasse Thread Wesentlichen erstreckt und sie ein in-line anonymous ein.

Da dies Android ist, nehme ich an, Sie haben eine new View.OnClickListener() {} irgendwann gemacht, oder?

Gleiche Idee. Verschieben Sie den Listener aus der setOnClickListener-Methode.

View.OnClickListener click = new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { } 
}; // <-- semi-colon 

button.setOnClickListener(click); 
Verwandte Themen