eclipseのリソースリークは警告がでるだけでデフォルトの設定では実行できると思います。
※[java]-[コンパイラー]-[警告/宣言]で、設定できます
で、警告がでる理由は想像ですが、変数iのスコープが広いのでループがあると
scan.close()にたどり着けない可能性があるとコンパイラが判断しているのではなかろうかと。
※ちなみに、forループそのものがない場合も、警告になりませんでした。(iの初期化は必要)
一般的なiのループの書き方は以下のようにするかと思います。
この場合、警告がでませんでした。
java
1 public static void main(String[] args) {
2 Scanner scan = new Scanner(System.in);
3 int array[] = new int[5];
4// int i;
5
6 for (int i = 0; i < array.length; i++) { // int i の宣言はココ
7 array[i] = scan.nextInt();
8 } // int i の有効範囲は、ここまで
9
10 System.out.println("back");
11
12 for (int i = 0; i < array.length; i++) { // 上記のiのスコープ外なので、再度 iという名前で宣言できる
13 System.out.println(array[i]);
14 }
15
16 scan.close();
17 }
というわけで、スコープの問題かと以下のようにしたところ
警告になりませんでした。
java
1public static void main(String[] args) {
2 Scanner scan = new Scanner(System.in);
3 { // ここと
4 int array[] = new int[5];
5 int i;
6
7 for (i = 0; i < array.length; i++) {
8 array[i] = scan.nextInt();
9 }
10
11 System.out.println("back");
12
13 for (i = 0; i < array.length; i++) {
14 System.out.println(array[i]);
15 }
16 } // ここを中カッコで囲う。
17 scan.close();
18}
基本的にはスコープを広げるのはバグの元なので、いわゆる普通のforループの書き方をすれば
良い(警告がでない)と思います。
あと、eclipiseでの警告の当該行にランプのアイコンが出てると思いますが、
それをクリックするとクイックフィックスとして対応方法がでてきます。
ひとつあげると、アノテーション@SuppressWarnings("resource")
を付与するとか・・・
繰り返しになりますが、おとなしくiのスコープを最小限にした方が良いとは思います。