10

そのため、 try-with-resourcesビットを含む、Java 7 の新機能のいくつかを調べていました。

リソースの指定に使用される構文が少し奇妙であることに気付きました。

try 
    (InputStream fis = new FileInputStream(source);
        OutputStream fos = new FileOutputStream(target))
    {
            // stuff
        }
    }
    catch (Exception e) {
        // stuff
    }

具体的には、リソースの定義:

try (InputStream fis = new FileInputStream(source);
        OutputStream fos = new FileOutputStream(target))

括弧ブロック内の区切りステートメントが有効なJavaの他の場所はありますか?

私が考えることができる他の唯一の時間はforループです

for ( ; ; )

;ただし、正確に 2 が必要であり、ステートメントは,as で区切られているため、まったく同じではありません。

for (int i = 1,  j = 100;  i <= 100, j > 0;  i = i-1, j = j-1)

だから私の質問は、この構文はどこから来たのですか? ;ステートメントが区切られているのではなく区切られている理由はあり,ますか? ブロック;内で分離されたステートメントを同様に使用する別の同等の言語はありますか? ()Java、C、または python の例が思い浮かびません。

4

2 に答える 2

8

一般に、Java ではステートメントはセミコロンで終了します。int i = 1, j = 100;初期化される各ものが同じタイプである必要がないため、try-with-resources は割り当てのようなものとは異なることに注意してください。これは実際には、括弧で囲まれた一連の代入ステートメントです。

とはいえ、簡単に理解できる特定の構文を使用するための前例が実際にある必要はないと思います。

于 2011-07-28T23:51:22.953 に答える
0

まあ、セミコロンはありませんが、Common Lisp にはこのパターンに従ういくつかの構造があります。たとえば、いくつかの値を限定されたスコープで変数にバインドするには (基本的に、「リソースを試す」が行っていること):

(let (x 5) (y 10) (z 100)
  (...))

条件 (例外) 処理についても同様のものがあります。必要に応じて、おそらく同じように見える独自の構造を作成することもできます。を想像すると(x 5)int x = 5;平行線が見えてきます。

于 2011-07-29T02:57:36.987 に答える