3

誰かが私に次のコードを説明できますか?これはAndroidのソースコードからのものです

最初の行は整数配列を初期化することですが、中括弧で囲まれたコードはどうですか?中かっこ部分が絡まっているように見えるので、これらのコードの構文は正しいですか?

    // high priority first
    mPriorityList = new int[mNetworksDefined];
    {
        int insertionPoint = mNetworksDefined-1;
        int currentLowest = 0;
        int nextLowest = 0;
        while (insertionPoint > -1) {
            for (NetworkAttributes na : mNetAttributes) {
                if (na == null) continue;
                if (na.mPriority < currentLowest) continue;
                if (na.mPriority > currentLowest) {
                    if (na.mPriority < nextLowest || nextLowest == 0) {
                        nextLowest = na.mPriority;
                    }
                    continue;
                }
                mPriorityList[insertionPoint--] = na.mType;
            }
            currentLowest = nextLowest;
            nextLowest = 0;
        }
    }
4

1 に答える 1

2

ええ、それらのコードブロックは絶対に問題ありません。それらは実行可能な構文です。むしろそれらは有用です。

そこで何が起こるかというと、コードは名前のないブロックにシフトされ、ブロックスコープを提供します。したがって、そのブロック内で定義された変数は、外部には表示されません。

int[] a = new int[10];
{
    int x = 10;
    a[0] = x;
    System.out.println(x);
}

System.out.println(x);  // Error. x not visible here.

だから、それらはbracesただ作成します、それだけlocal block scopeです。それらに特別なことは何もありません。ただし、上記のコードでは、これらのブロックの魔法を感じることはありません。

このコーディング方法は、一般的minimizeにあなたのスコープに使用されますlocal variables。これは、特に、variablesそのブロック内で作成されたものが他の場所で使用されない場合は、絶対に良い考えです。

したがって、それらなしで使用された場合braces、それらの変数はちょうどhang周りにあり、それらが解放されるのを待ってgarbage collectorいると同時に、tripの終わりに向かって楽しんでいcurrent scopeます、それは非常に長いかもしれませんmethod

于 2012-10-29T13:36:37.377 に答える