Давайте посмотрим на этот код:
String message;
if(random(1) < .5) {
message = "hello";
}
println(message);
Этот код выдаст сообщение об ошибке message cannot be resolved to a variable
. Это связано с тем, что компилятор достаточно умен, чтобы знать, что в зависимости от того, что делает оператор if
, message
может не содержать значения. Обработка / Java не присваивает значение по умолчанию локальным переменным.
Мы могли бы исправить эту ошибку компилятора, присвоив значение по умолчанию самостоятельно:
String message = null;
if(random(1) < .5) {
message = "hello";
}
println(message);
Теперь message
имеет значение по умолчанию null
, которое соответствует тому, что происходит с переменными эскиза / класса по умолчанию.
Другой способ исправить это, поместив вызов println()
в оператор if
:
String message;
if(random(1) < .5) {
message = "hello";
println(message);
}
Мы могли бы немного упростить это:
if(random(1) < .5) {
String message = "hello";
println(message);
}
Теперь вернемся к вашему коду:
try {
String[] lines = loadStrings(url);
}
catch(IOException e) {
return;
}
saveStrings("Stuff on Webpage.txt", lines);
Это не работает, потому что lines
объявлено внутри блока try
, поэтому оно выходит из области действия за пределы этого блока, и вы не сможете использовать его впоследствии.
String[] lines;
try {
lines = loadStrings(url);
}
catch(IOException e) {
return;
}
saveStrings("Stuff on Webpage.txt", lines);
Это не работает, потому что компилятор не достаточно умен, чтобы увидеть этот оператор return
. Он просто знает, что одна ветвь кода пропускает строку lines = loadStrings(url);
, поэтому он знает, что lines
может быть не назначено при попытке его использовать.
Вы можете исправить это, либо присвоив значение по умолчанию самостоятельно, либо переместив все в один и тот же блок, как мы это делали в нашем упрощенном примере выше.