level15.lesson09.task04
Подскажите, пожалуйста, почему компилятор ругается?
package com.javarush.test.level15.lesson09.task04;
/* Статики и исключения
В статическом блоке выбросьте RuntimeException
В результате класс не загрузится, и вы увидите сообщение об ошибке вместо значения переменной B
Exception in thread "main" java.lang.ExceptionInInitializerError
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:186)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:113)
Caused by: java.lang.RuntimeException:
at com.javarush.test.level15.lesson09.task04.Solution.clinit(Solution.java:22)
Hint: Нужно погуглить причину, если получилось следующее:
java: initializer must be able to complete normally
java: unreachable statement
*/
public class Solution {
public static int A = 0;
static {
//throw an exception here - выбросьте эксепшн тут
throw new RuntimeException();
}
public static int B = 5;
public static void main(String[] args) {
System.out.println(B);
}
}
37 комментариев
На сайте прошло с первого раза.
А каким должно было быть правильное решение???
Если второй раз пытаться, то возникает ошибка — «Неизвестная ошибка при работе с сервером»
о чем эти строки:
т.е. если у меня такое не получилось, то и гуглить не нужно?..
Мой код исключение выкинул и все — сервер принял решение. Но у меня некое чувство «нерешонности», т.е. что сервер засчитал неправильный код :(
Нужно погуглить причину, если получилось следующее:
java: initializer must be able to complete normally
java: unreachable statement
при записи просто throw new RuntimeException(); в статике, это и должно вылазить)
1. Берем Гугл
2. Забиваем java: initializer must be able to complete normally
3. Первая же ссылка на stackoverflow.com где эта проблема не только решена, но и растолкована)
Чтобы получить
java: initializer must be able to complete normally
java: unreachable statement
нужно бросить исключение прямо в статике. Что делать дальше отлично описал antonchar .
Чтобы задача засчитывалась на сервере, я сделал так:
— в классе создал метод;
— в этом методе бросил исключение;
— в статике вызвал этот метод.
Что не вполне соответствует условию. Пока я думала, как все же именно Runtime выбросить, задача взяла — и решилась (
> Instead you can catch and handle, or wrap the checked exception. (Or using tricks, rethrow it)
Решил через оборачивание в try{} и поимку неверного исключения. Подходят не все неверные! Например если сделать так:
, то не сработает: «Exception IOException is never thrown».
Почему такой код проходит, описано в документации.
засчитало.
У меня такое не получилось. Мне гуглить обязательно?
Кстати, а скопировать в задание то, что мы должны найти, не судьба? Не думал, что нас тут учат гуглению.
Интересненько однако