ショボ短歌会

javaを勉強し始めたばかりの初心者です。
テキストを購入して以下のコードをテキストに習ってなぞってみたのですが、なぜかfinallyのあとの変数isrに対して「シンボルが見つかりません」というエラーが出ます。なぜ他の部分のisrは問題なくて、finallyのあとのisrに対してのみエラーが出てしまうのでしょうか?
どうしてもわからないので教えていただけないでしょうか。

import java.io.*;
import java.net.*;

public class Main{
public static void main(String[] args){
URL url =null;

try{
url = new URL("http://ooooo.jp");
InputStream is = url.openStream();
InputStreamReader isr= new InputStreamReader(is);
int i = isr.read();
while(i !=-1){
System.out.print((char) i);
i=isr.read();
}
}catch(IOException e){
System.out.println("Error happening");
}finally{
isr.close();
}
}
}

A 回答 (2件)

isrはtryのブロックの中で宣言されているので


tryのブロックの外では使えません。
tryの外で宣言しましょう。

Javaのスコープル-ルを学びましょう。

それから

is = url.openStream();

isr= new InputStreamReader(is);

をtryブロックの中で実行するのはまずい。
エラーが起きたらどういう流れになるか
よく考えましょう。

外で実行するか、isやisrを予めnuIlで初期化しておいて
finallyで閉じる前にnuIlチェックすること。

またfinallyで閉じるべきはisの方です。
    • good
    • 1
この回答へのお礼

ありがとうございます。tryの外で宣言しなければならない意味がわかりました。
勉強になりました。

もう一方の
is = url.openStream();

isr= new InputStreamReader(is);
をtryブロックの中で実行するのはまずい。

という部分なのですが、外で実行することで何が変わってくるのかが理解できませんでした。。

お礼日時:2016/05/23 00:14

>またfinallyで閉じるべきはisの方です。



誤り、isrで良いです。ボケてました。申し訳ない
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!