2

メイン内の変数はパブリック変数ですか?

    public static void main(String[] args) {
  .........

    for(int i=0;i<threads.length;i++)
        try {
            threads[i].join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

    long time=0; 
    ....
    }

itimeどちらもパブリック変数ですか?

もちろん、私の推論が正しければ、パブリック メソッドに属する変数もパブリックと見なす必要があります。私は正しいですか?

4

6 に答える 6

8

変数itimeは、関数に対してのみローカルです。外には見えません。外部からアクセスできるのは、クラス メンバー変数のみです (アクセス修飾子の対象となります)。

この区別については、すでに SO hereでかなり詳細に説明されています。

于 2012-06-26T21:14:19.237 に答える
3

いいえ。変数 'i' と 'time' はメイン メソッド内で宣言されているため、それらのスコープはローカルであり、メイン メソッドのみに制限されています。メソッドの外では使用できません。

于 2012-06-26T21:14:12.777 に答える
2

それらは公開されているとは見なされません。それらはローカル変数です。それらは、そのメソッドの外部では可視性がありません (そのクラスは言うまでもありません)。

于 2012-06-26T21:14:25.670 に答える
1

ローカル変数は、それらが存在する可能性のあるメソッド (またはコンストラクター) に関係なく、公開されることはありません。ローカル変数のスコープは、せいぜいメソッド本体全体です。

「パブリック」、「プライベート」などの概念は、ローカル変数には適用されませんが、インスタンスまたはクラス変数には適用されます。主な違いは、ローカル変数がスタック上にあるため、それらのスコープがスタック フレームの有効期間に自動的に制限されることです。アクセス ルールは必要ありません。アクセスタイプ「プライベート」、「デフォルト」などは、「自然」ではないため、具体的に課す必要がある制限を示します。ローカル変数のスコープとは異なり、リフレクションによって壊れることもあります。

于 2012-06-26T21:27:44.287 に答える
1

いいえ。変数がメソッド内にある場合 (メイン メソッドであっても)、それはローカル変数であり、そのスコープはそのメソッド内のみです。

public class MyClass {
    public int x; // this is a public variable

    public void doSomething() { // this is a public method
        int y = 9; // this is a local variable
    }

    public int getX() {
        return x; // we can do this
    }

    public int getY() {
        return y; // we CANNOT do this because y is not public and is only 
                  // defined within the doSomething() method
    }
}
于 2012-06-26T21:15:21.577 に答える
1

他の人が言ったように、2 つの変数はメインでのみ使用できます。しかし、i のスコープはさらに制限されています。これは for ループで宣言されているため、for ループでのみ使用できます。

于 2012-06-26T21:17:11.013 に答える