# Semikolon nach geschweifter Klammer



## GilbertGrape (10. Jun 2008)

Hallo Gemeinde,

ich weiß nicht genau, ob das etwas Java-spezifisches ist oder ob es das auch in anderen Programmiersprachen gibt. Ich habe es jetzt nur in Javaprogrammen entdeckt.
Ganz am Anfang hat man ja mal gelernt, dass man niiiemals ein Semikolon nach einer geschweiften Klammer setzen darf, jetzt ist mir aber genau dieses begegnet, unter anderem nach einer Methode oder if-Anweisung.
Kann mir jemand sagen was damit erreicht wird?

Danke, Gilbert


----------



## SlaterB (10. Jun 2008)

etwa ähnlich viel wie mit einer Foren-Frage ohne Code


----------



## GilbertGrape (10. Jun 2008)

naja, ich weiß nicht, ob das hilft... (das is auch nur ein Beispiel). Ich wollte es eben generell wissen, wann man sowas macht.


```
public StringList getErrors()
  {
    if (errors==null) errors=new StringList();
    return(errors);
  };
```


----------



## SlaterB (10. Jun 2008)

das Semikolon in Zeile 5 ist falsch, ja, der Compiler meckert da gar nciht, hmm, auch nicht bei

public void getErrors() 
    { 

    };;;;;;;;;;

na stört ja auch nicht

-----

das Semikolon in Zeile 3 wird benötigt


----------



## GilbertGrape (10. Jun 2008)

also da hat also einfach jemand unnötige Zeichen gesetzt??
Ja, ich meinte nur das Semikolon am Ende. Das andere is mir schon klar 
Nagut, dann nehm ich das mal so hin.
Danke!


----------



## tfa (10. Jun 2008)

Ein Semikolon kannst du praktisch überall machen nach }.
Notwendig ist es nur bei einer Array-Initialisierung und Definition einer anonymen inneren Klasse.


----------



## ARadauer (10. Jun 2008)

interessant, dass ich hier gerade so ein beispiel gebracht habe...

http://www.java-forum.org/de/posting.php?sid=b4f35fc1885b119398e20e33660a25f0



```
private Iterator getAttributes(Element element){ 

		return new Iterator(){ 

			public boolean hasNext() {
				//hier deine Verhalten
				return false;
			}

			public Object next() {
				//hier deine Verhalten
				return null;
			}

			public void remove() {
				//hier deine Verhalten

			}
		};
	}
```
da muss der ; sein, weil es zur return anweisung gehört,


----------



## ARadauer (10. Jun 2008)

verstehst du den code? ein iterator ist ein interface, ich könnte eine klasse schreiben die diese interface implementiert und dann return new MeineKlasse(); eine instanz zurück geben.

ich kann die klasse aber auch innerhalb der return anweisung schreiben. ist etwas unübersichtlihc aber für kleine schachen kann mans machen...

bei Runnable, Iterator usw.. sieht mans öffter


----------



## GilbertGrape (10. Jun 2008)

Ja das verstehe ich, aber sowas war das nicht in meinen Beispielen


----------



## Schandro (10. Jun 2008)

dann ignoriers einfach, zuviele Semikolons kann man meistens ignorieren

Es gibt aber wichtige Ausnahmen:

		if(1+1==3);
			{System.out.println("1+1=3");}

		for(int i=0;i<5;++i);
			{System.out.println("Schleifendurchlauf");}

bei beiden passiert das falsche (jedes Syste.out wird jeweils 1 mal ausgeführt) , weil jeweils ein Semikolon nach den runden Klammern steht:

1 Nach if und for steht IMMER nur EINE Methode.

2 Wenn man mehrere Anweisung in eine geschweifte Klammer packt, gelten diese Anweisung zusammen als EINE einzige Anweisung.

3 Ein Semikolon gilt auch als EINE Anweisung

Das heisst in diesen Beispiel, dass die Anweisung:
;
ausgeführt wird, wenn 1+1==3 ist und die andere Anweisung:
;
5 mal ausgeführt wird

das außerdem im code noch 2 System.out.println stehen, hat nix mit der if und for sache zu tun.
Die eckigen Kalmmern um die System.out.println könnte man auch einfach weglassen, würde nix ändern.


----------



## GilbertGrape (24. Jun 2008)

Vielen Dank nochmal!
Ich hab den jenigen jetzt mal gefragt und er meinte, dass er sich das inzwischen abgewöhnt hat. Er hatte das wohl noch von irgendeiner anderen Programmiersprache drin. Ich hab mich vorher nur nicht getraut zu fragen, weil ich nich so dumm aussehen wollte   Deshalb hab ich lieber erstmal hier nachgefragt.

Gruß, Gilbert

PS: Wie kann ich das Thema abhaken?


----------



## Wolfram (24. Jun 2008)

Als Beitrag zur allgemeinen Verwirrung:


```
package testsemikolon;
;;;
public class Main {
    ;;;
    public static void main(String[] args) {
        ;;;
    }
    ;;;
}
;;;
```

Compiliert auch. Warum? Was ist denn die Funktion des Semikolons?

Krass vereinfacht, ein Semikolon trennt in einer Liste von Anweisungen/Deklarationen die Anweisungen/Deklarationen voneinander ab*. Oftmals ist der Einfachheit halber auch die leere Anweisung erlaubt, in Java schreibt man dann einfach nichts hin, andere Programmiersprachen haben dafür eine besondere Anweisung, z.B. skip oder pass. Eine Folge von leeren Anweisungen oder Deklarationen hat also die Form ";;;".

Daher sind "zuviele" Semikolons oft legal.

(*) Die Wahrheit.


----------

