スコープを 2 つの主要なカテゴリに分類できます。
ローカル
これらの変数は関数内にあります。それらは、その関数内からのみアクセスできます。
ローカル変数は、ブロックとも呼ばれる、それらを囲む{
およびに制限されます。}
また、宣言前および特定の代入前にはアクセスできません。これが意味することは
{
//aVar is not accessible here
{
//aVar is not accessible here
Object aVar;
//aVar access will not compile
if(aCond()) aVar = new Object();
//aVar access will not compile unless you did if(true)
aVar = new Object();
//aVar is accessible here
{
//aVar is accessible here
}
//aVar is accessible here
}
//aVar is not accessible here
}
{
//aVar is not accessible here
}
別のメソッドは別の括弧のセットになるため、範囲外です。
そうでもなければ...
グローバル
グローバル変数は、ファイル全体で常にアクセスできます。グローバル変数は、クラスのブロック内で関数の外で宣言されるため、すべてのブロックがそれらにアクセスできます。FileName.variable
グローバル変数には、またはでアクセスできますobjectName.variable
。ファイル名またはオブジェクトの名前のどちらを使用するかは、それが使用されるかどうかによって異なりますstatic
。
さらに、メソッドはグローバル スコープの影響も受けます。
グローバル変数の例を次に示します。
public class Foo {
public static int bar = 10;
public static void main(String[] args) {
System.out.println(bar);
}
}
静的
変数が のstatic
場合、そのオブジェクトのすべてのインスタンスで定数です。(すべての Java ファイルは実際にはオブジェクトであることを思い出してください)
変数が でないstatic
場合、そのオブジェクトのインスタンスごとに一意です。
それは実際の範囲ではありませんが
プライベート/パブリック/パッケージ プライベート
でマークされているものはprivate
すべて、ファイル全体でアクセスできますが、ファイルのみにアクセスできます。これはstatic
Cのようなものです。
でマークされているものはpublic
すべて、どのファイルからでもアクセスできます。extern
これはC からのものに似ています。
たとえば、マークされていないものint x;
はパッケージ非公開と見なされます。これは、同じパッケージ (フォルダー) 内のすべてのファイルがアクセスできることを意味します。したがって、パッケージ内にある場合Foo.bar()
、パッケージ内x.y
の他のクラスはx.y
を呼び出すことができますがFoo.bar()
、内のクラスは呼び出すx.z
ことができません。