嘗試使用資源時不工作,但嘗試工作沒有資源!
這是這種情況的一個簡單例子。我在工作項目中遇到了這個「bug」。 當我使用嘗試沒有資源在資源嘗試中不工作,但嘗試不使用資源
try {
Resources resources = getResources()
// some code here, look below
}
我只有一個我的週期的迭代,這是正確的,因爲我具備的條件,「如果真再突破」,但是當我改變了嘗試無追索權的嘗試資源。
try (Resources resources = getResources()) {
// some code here, look below
}
我很震驚!循環變得無止境!爲什麼?
全碼:
public class Test {
public static void testTryWithResAndBreak() {
while (true) {
System.out.println("we are in (while(true))");
try (Resources resources = getResources()) {
System.out.println("We are in try block");
if (true) {
System.out.println("We are in the if(true) now! Next step is break");
break;
}
System.out.println("OOOOO___OOOO WE ARE HERE!!!");
resources.writeSomething();
} catch (Exception e) {
System.out.println("Catched exception");
}
}
}
private static class Resources implements AutoCloseable {
@Override
public void close() throws Exception {
System.out.println("Resources closed");
throw new Exception("Exception after closed resources!");
}
public void writeSomething() {
System.out.println("i wrote something");
}
}
private static Resources getResources() {
return new Resources();
}
public static void main(String[] args) {
testTryWithResAndBreak();
}
}
'if(true){...}'可能被編譯器刪除。你有那裏的實際情況? – pablochan
顯示其他版本,有些東西告訴我你不要在那裏打電話。 –
@pablochan爲什麼?休息不起作用?如果編譯器刪除了我的條件,它不會刪除「break」。例如,如果(true){「do something」}將被優化,它將變成「做某事」。 – GermanSevostyanov