Javaの可変スコープ
1. 概要
Javaでは、他のプログラミング言語と同様に、各変数にスコープがあります。 これは、変数を使用でき、有効なプログラムのセグメントです。
このチュートリアルでは、Javaで使用可能なスコープを紹介し、それらの違いについて説明します。
2. クラススコープ
private アクセス修飾子を使用してクラスのブラケット( {} )内で宣言されているが、メソッドの外で宣言されている各変数には、クラススコープがあります。 その結果、これらの変数はクラス内のどこでも使用できますが、クラス外では使用できません:
public class ClassScopeExample {
private Integer amount = 0;
public void exampleMethod() {
amount++;
}
public void anotherExampleMethod() {
Integer anotherAmount = amount + 4;
}
}
ClassScopeExample には、クラスのメソッド内でアクセスできるクラス変数amountがあることがわかります。
private を使用しない場合は、パッケージ全体からアクセスできます。 詳細については、アクセス修飾子の記事を確認してください。
3. メソッドスコープ
変数がメソッド内で宣言されている場合、その変数にはメソッドスコープがあり、同じメソッド内でのみ有効になります:
public class MethodScopeExample {
public void methodA() {
Integer area = 2;
}
public void methodB() {
// compiler error, area cannot be resolved to a variable
area = area + 2;
}
}
methodA で、areaというメソッド変数を作成しました。 そのため、methodA内でareaを使用することはできますが、それ以外の場所では使用できません。
4. ループスコープ
ループ内で変数を宣言すると、その変数はループスコープを持ち、はループ内でのみ使用可能になります:
public class LoopScopeExample {
List<String> listOfNames = Arrays.asList("Joe", "Susan", "Pattrick");
public void iterationOfNames() {
String allNames = "";
for (String name : listOfNames) {
allNames = allNames + " " + name;
}
// compiler error, name cannot be resolved to a variable
String lastNameUsed = name;
}
}
メソッドiterationOfNamesにnameというメソッド変数があることがわかります。 この変数はループ内でのみ使用でき、ループ外では無効です。
5. ブラケットスコープ
角かっこ( {} )を使用して、どこにでも追加のスコープを定義できます。
public class BracketScopeExample {
public void mathOperationExample() {
Integer sum = 0;
{
Integer number = 2;
sum = sum + number;
}
// compiler error, number cannot be solved as a variable
number++;
}
}
変数numberは、角かっこ内でのみ有効です。
6. スコープと可変シャドウイング
クラス変数があり、同じ名前のメソッド変数を宣言したいとします。
public class NestedScopesExample {
String title = "Baeldung";
public void printTitle() {
System.out.println(title);
String title = "John Doe";
System.out.println(title);
}
}
title を初めて印刷するときは、「Baeldung」が印刷されます。 その後、同じ名前のメソッド変数を宣言し、それに値「JohnDoe」を割り当てます。
titleメソッド変数は、class変数titleに再度アクセスする可能性をオーバーライドします。 そのため、2回目は「JohnDoe」と表示されます。
7. 結論
Javaに存在するさまざまなスコープを学びました。
いつものように、コードはGitHubで入手できます。