Javaの勉強を始めたばかりの、初心者にも程があるド素人なのですが
気になる部分が出たので質問させていただきます。
「どうやらtry-with-resources構文が鍵らしい」
「Java7からの書き方らしい」というところまでは掴んだのですけど
それ以上の理解は及びませんでした。
気にせず学習を進めるのが正解なのかもしれませんが、よろしくお願いします。
以下のコードはエラーも出ず、何とか普通に動きます。
Java
1// 例文1 2import java.util.Scanner; 3 4class NumCheck { 5 public static void main(String[] args) { 6 try(Scanner stdIn = new Scanner(System.in);) { 7 System.out.print("整数値:"); 8 int n = stdIn.nextInt(); 9 10 if (n > 0) 11 System.out.println("正です。"); 12 else if (n < 0) 13 System.out.println("負です。"); 14 else 15 System.out.println("0です。"); 16 } 17 } 18} 19
以下の例文2は、「ここでScannerの用は済んだ」と思って
波括弧の位置をズラしてみたものです。
しかし、エラーと言われました。
Java
1// 例文2 2import java.util.Scanner; 3 4class NumCheck { 5 public static void main(String[] args) { 6 try(Scanner stdIn = new Scanner(System.in);) { 7 System.out.print("整数値:"); 8 int n = stdIn.nextInt(); 9 } // ←ここ 10 11 if (n > 0) 12 System.out.println("正です。"); 13 else if (n < 0) 14 System.out.println("負です。"); 15 else 16 System.out.println("0です。"); 17 } 18} 19
ところが以下の書き方だと大丈夫です。
Java
1// 例文3 2import java.util.Scanner; 3 4class NumCheck { 5 public static void main(String[] args) { 6 Scanner stdIn = new Scanner(System.in); // ←tryを消して 7 System.out.print("整数値:"); 8 int n = stdIn.nextInt(); 9 stdIn.close(); // ←こう書く 10 11 if (n > 0) 12 System.out.println("正です。"); 13 else if (n < 0) 14 System.out.println("負です。"); 15 else 16 System.out.println("0です。"); 17 } 18} 19
この違いは何でしょうか。
例文2と例文3で、解放のタイミングは同じように見えます。
例文2は、何をもってエラーと言われるのか分かりません。
ご教授よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー