# Kein finally ausführen trotz verlassen des try blocks?



## Amaru (17. Mai 2007)

Hi Leute,
kann mir jemand sagen welche möglichkeiten es gibt, dass der finally block trotz verlassen des try blocks nicht ausgeführt wird?


----------



## Der Müde Joe (17. Mai 2007)

keine ....afaik...verlassen? 

try...wenn ok finally
try .. wenn nicht ok catch .. dann finally

wie verlassen


----------



## Guest (17. Mai 2007)

```
boolean ausfuehren = true;
try
{
   ...
   ausfuehren = false;
}
catch(WasAuchImmer e)
{
}
finally
{
   if(ausfuehren)
   {
      ...
   }
}
```


----------



## Amaru (17. Mai 2007)

jo aber ich muss in ner aufgabe ne frage beantworten, die lautet
geben sie zwei möglichkeiten , die dazu führen, dass der finally-block trotz verlassen des try-blocks nicht ausgeführt wird(Hardwarefehler und weltuntergang ausgeschlossen)!


----------



## Guest (17. Mai 2007)

Amaru hat gesagt.:
			
		

> jo aber ich muss in ner aufgabe ne frage beantworten, die lautet
> geben sie zwei möglichkeiten , die dazu führen, dass der finally-block trotz verlassen des try-blocks nicht ausgeführt wird(Hardwarefehler und weltuntergang ausgeschlossen)!


Es gibt keine.


----------



## Der Müde Joe (17. Mai 2007)

System.exit(0) im try oder catch
wäre einen Möglichkeit

EDIT:
Grundlegend aber:
The runtime system always executes the statements within the finally block regardless of what happens within the try block. So it's the perfect place to perform cleanup.


----------



## kleiner_held (17. Mai 2007)

Es nur möglich wenn man die JVM beendet, neben System.exit(0), Runtime.getRuntime().exit(0) und Runtime.getRuntime().halt(0) wären dann mMn nur Betriebssystem Aufrufe möglich, die über die JVM Prozess ID den JVM Prozess sehr abrupt beenden.

PS: folgendes gaenge auch, genuegt aber nicht der Frage, da der try-block nicht wirklich verlassen wird.

```
public static void main(String[] args)
    {
        Thread t = new Thread(new Runnable()
        {
            public void run()
            {
                try
                {
                    System.out.println("try");
                    while (true)
                    {
                        try
                        {
                            Thread.currentThread().sleep(1000);
                        } 
                        catch (InterruptedException ignored)
                        {
                        }
                    }
                }
                finally
                {
                    System.out.println("finally");
                }
            }
        });
        t.setDaemon(true);
        t.start();
    }
```


----------



## Guest (18. Mai 2007)

Ich wüsste jetzt eigentlich auf Anhieb auch nur eine Möglichkeit:


```
try {
 // Code
} catch {
 // Bei Fehler
} finally {
 if (Bedingung) {
    // Finally
 }
}
```

Wenn man jetzt dafür sorgt, dass die Bedingung im if dann false ist wird der finally-Block nicht ausgeführt. 
Genau genommen wäre das aber auch nicht entsprechend der Fragestellung (finde ich), da zwar der try-Block verlassen wird, aber auch der finally-Block ausgeführt wird, nur halt nicht mit Auswirkungen.

Von daher gibt es so gesehen keine Möglichkeit, die ich kenn, und die alle vorgegebenen Bedingungen der Frage erfüllen würden.


----------



## byte (18. Mai 2007)

Wird finally bei nem return im Try-Block noch ausgeführt?


----------



## mephi (18. Mai 2007)

eine exception werfen die nicht in den nachfolgenden catch-blöcken abgefangen wird?

edit:


			
				Amaru hat gesagt.:
			
		

> (Hardwarefehler und weltuntergang ausgeschlossen)!


bluescreen :-D


----------



## Beni (18. Mai 2007)

Hm, wie wäre es, wenn man "stop" auf dem aktuell ausgeführten Thread aufruft? (Das wäre was anderes als "System.exit")


```
Thread.currentThread().stop();
```


----------



## kleiner_held (18. Mai 2007)

Thread.currentThread().stop(); klappt nicht, da die JVM das handhabt, indem ein ThreadDeath  (ein Error) geworfen wird.
Und egal durch welches Throwable oder return ein try oder ein catch verlassen wird, das finally greift trotzdem.


----------



## thomator (18. Mai 2007)

Wer bitte stellt denn solche Aufgaben?


----------



## Der Müde Joe (18. Mai 2007)

byto hat gesagt.:
			
		

> Wird finally bei nem return im Try-Block noch ausgeführt?



mal testen.....


```
static boolean surpriseTheProgrammer() {
    while (true) {
        try {
            return true;
        }
        finally {
        	System.out.println("finally");
            break;
        }
    }
    return false;
}
```


ja.....finally wird ausgeführt......und das Ergebnis??


----------



## Leroy42 (18. Mai 2007)

Amaru hat gesagt.:
			
		

> kann mir jemand sagen welche möglichkeiten es gibt, dass der finally block trotz verlassen des try blocks nicht ausgeführt wird?



Du ziehst im richtigen Moment den Stecker!  :shock: 

*SCNR*


----------

