Скобки ВО ВСЕМ утверждении try/catch в Java нужны? Действительно странные вещи

Мне нужно разрешить версию пакета из манифеста в Android. Я делаю это прямо в основной деятельности, не знаю, если это неправильно.

Я не могу проверить, работает ли это сейчас, по разным причинам я не смог бы через несколько дней, несмотря на то, что я использую Eclipse, но это действительно ранит мой разум, поскольку я довольно волнующий человек:

{ try {
    String version = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
} catch (NameNotFoundException e) {
    Log.e("tag", e.getMessage());
} }

Вы замечаете скобки до и после ВСЕГО заявления? Если я удалю их, Eclipse скажет

"Синтаксическая ошибка на токене"{", {ожидается после этого токена"

в открытии предыдущего действия, и подобные вещи в любом методе или утверждении после него.

Я гуглил это, потому что это то, что я могу сделать, и не нашел ничего о том, что они нужны. Учебники по Java, примеры заклинаний, попробуйте поймать без этого. Я делаю что-то очень глупое или это нормальное поведение, и мой код должен работать, когда я вернусь?

Опять извините за этот вопрос но мне просто нужно.

Заранее спасибо.

2 ответа

Решение

Вы, вероятно, имеете этот код вне любого метода. С помощью скобок Java рассматривает его как блок инициализатора экземпляра. Без брекетов это незаконно.

В этом коде есть еще одна проблема: вы инициализируете переменную version а затем сразу же потерять информацию, потому что version является локальным для try блок. Вероятно, переменная должна быть объявлена ​​вне блока.

Я думаю, что этот блок попытки прямо внутри class { в вашем коде.

Если это так, они вам нужны, потому что в Java это рассматривается как блок инициализации экземпляра.

EDIT:

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

Другие вопросы по тегам