В Java, “наконец”, блок гарантировал, что был назван (в основном методе)?

в res / values ​​/ string.xml

<resources>
    <string name="app_name">Hello World</string>
    <string name="my_application">Application name: %s, package name: %s</string>
</resources>

в java-коде

String[] args = new String[2];
args[0] = context.getString(R.string.app_name);
args[1] = context.getPackageName();
String textMessage = context.getString(R.string.my_application,(Object[]) args);
24
задан Hanno Fietz 5 February 2009 в 14:44
поделиться

8 ответов

В основном да, за исключением примечания , перечисленного здесь (шахта акцента):

, Если JVM выходит, в то время как код попытки или выгоды выполняется, затем наконец, блок не может выполняться. Аналогично, если поток, выполняющий попытку или код выгоды, прерван или уничтожен, наконец, блок не может выполняться даже при том, что приложение в целом продолжается.

45
ответ дан 28 November 2019 в 22:25
поделиться

Это не гарантируется:

public class Main {
    public static void main(String args[]) {
        try {
            System.out.println("try");
            System.exit(0);
        } catch (Exception e) {
            System.out.println("exception");
        } finally {
            System.out.println("finally");
        }
    }
}

Выполнение это.

13
ответ дан cletus 28 November 2019 в 22:25
поделиться

Одним словом, да.

Код в наконец блок в Java всегда выполняется если:

  • выходы JVM во время попытки или блока выгоды
  • поток, выполняющий код, прерван или уничтожен во время попытки или блока выгоды

(от: http://java.sun.com/docs/books/tutorial/essential/exceptions/finally.html )

Так, если Вы явно не называете System.exit (интервал), или уничтожаете процесс или распараллеливаете внешне, можно полагаться на него.

10
ответ дан Martin McNulty 28 November 2019 в 22:25
поделиться

Chris Cameron корректен. Но обычно finally - блок выполняется. Нулевой указатель dereferece действительно существует в Java:

try {
    List<Object> x = null;
    x.get(1); //throws the unchecked NullPointerException
} finally {
    //will be executed
}

наконец-блок выполняется.

2
ответ дан Johannes Weiss 28 November 2019 в 22:25
поделиться

Абсолютно, это наконец блок будет работать, каждый раз. Кроме случая JVM отказывают или выход () вызванная функция. У меня был код, где сделанное JAVA-приложение обращается к собственному коду JNI который segfaulted. Получающийся катастрофический отказ уничтожил JVM и предотвратил наконец от выполнения.

4
ответ дан Arcane 28 November 2019 в 22:25
поделиться

Да, JVM всегда выполняет его. Gaurranteed.

, Конечно..., если сам JVM умирает (например: System.exit ()), затем это не имеет возможности gaurrantee ничто. Но смерть JVM не является проблемой в Java.

1
ответ дан paulmurray 28 November 2019 в 22:25
поделиться

Erm, да :) Вводит ли Ваш код выгоду или нет, наконец будет работать. Это - хорошее место для помещения кода, который моется после попытки.

, Очевидно, это не будет работать при повреждении jvm :)

0
ответ дан Robert Grant 28 November 2019 в 22:25
поделиться

Да, наконец блок будет всегда выполняться, если не будет катастрофический отказ JVM (очень редкий, но это может произойти).

0
ответ дан Guillaume 28 November 2019 в 22:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: