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 回答