# return in try-catch-Blöcken



## Razen (31. Jan 2010)

Was genau macht das return in try-catch-blöcken? 


Versteh ich  das richtig oder beendet dass die Methode in der der try-catch-block drin ist wenns in nem catch steht? Ich versteh nicht ganz nach welchen regeln das spielt und habe n continue und break in so nem Block auch ne Bedeutung? Finde da keine gute Erklärung und das was ich hab reicht mir nicht...


----------



## Gast2 (31. Jan 2010)

ein return beended immer die Funktion - in einem try-catchblock, einer Schleife oder sonst wo. 


```
try{

    //do something
    return resultA;
} catch (MyExceptionB) {
    //do something
    return resultB;
} catch (MyExceptionC) {
    //do something
    return resultC;
}
```

Es gibt Stimmen die sagen es sollte pro Funktion nur ein return statement geben - ganz am ende. Allerdings in fast allen Projekten die ich gesehn habe werden mehrere returns benutzt. 

return weist an die aktuelle Funktion zu verlassen und dem Aufrufer den return Wert/Objekt zu übergeben. (Außer bei void, das gibt es kein return wert).

break und continue haben damit nichts zu tun. break und continue werden in Schleifen verwendet.

break beended eine Schleife, z.B.

```
for (int i = 0; i < 100; i++{
    if(i = 50){
        break; 
    }
    System.out.prinln(i);
}
```

Die Schleife würde bei also bei i = 50 beended und nicht bis i = 100 laufen. continue is da anders - wenn du statt break in diesem Fall continue anwedest würde die Schleife bis 100 weiterlaufen - aber bei i = 50 nicht i ausprinten. Es wird nur der aktuelle Schleifendruchlauf beended.


----------



## Razen (31. Jan 2010)

perfekte erklärung, vielen dank


----------



## Schandro (31. Jan 2010)

fassy hat gesagt.:


> ein return beended immer die Funktion - in einem try-catchblock, einer Schleife oder sonst wo.


Ausnahme: wenn das return in einem try-[catch]-finally Block steht. der finally-Block wird IMMER ausgeführt!


----------



## Razen (31. Jan 2010)

Schandro hat gesagt.:


> Ausnahme: wenn das return in einem try-[catch]-finally Block steht. der finally-Block wird IMMER ausgeführt!





jhoa, genau so nen fall hatte ich in meinem beispiel und ich stand total aufm schlauch, auch dir dnake


----------



## Landei (1. Feb 2010)

Die Logik bei return und finally ist sehr diffizil. Zwei notorische Beispiele:


```
public static int f() {
    try {
      return 1;
    } finally {
      return -1;
    }
  }

  public static int g() {
    for (; ; ) {
      try {
        return 1;
      } finally {
        break;
      }
    }
    return -1;
  }
```


----------



## eRaaaa (1. Feb 2010)

Landei hat gesagt.:


> Die Logik bei return und finally ist sehr diffizil. Zwei notorische Beispiele:




```
public int foo() {
	try {
	    throw new RuntimeException();
	} finally {
	    return 1;
	}
    }
```

ist auch nicht schlecht


----------

