Javaクラスのメソッド内で宣言された変数にアクセス指定子を使用できないのはなぜですか?
6 に答える
それは意味がないからです。メソッドで宣言された変数は、メソッドに対してローカルです。つまり、メソッドの外部からアクセスすることはできません。変数の宣言を変更すると何が達成されますか?
そうすることは意味がありません。
ローカル変数(メソッドで宣言されたもの)は、そのメソッドの間だけスコープ内にあります-それを「パブリック」または「保護」として宣言することはどういう意味ですか?そのメソッド内のコードのみがそれを認識し、そのメソッド内のコードの異なるビットを区別して、一部の部分が変数にアクセスできるようにし、他の部分がアクセスできないようにするわけではありません。
アクセス修飾子は、他のクラスがそれをどのように使用するかを制御したい場合にのみ意味があります。これらの修飾子を使用して、メソッド内の変数へのアクセスをどのように制御しますか?これは、特に変数スコープがメソッド内にある場合は特に、メソッド内の変数へのアクセスを制御するのはまったくばかげているように聞こえます。メソッドが完了すると、変数は存在しなくなります。変数にヒープからメモリが割り当てられている場合でも、参照がなくなると、メモリはガベージコレクションに使用できるようになります。
ローカル変数のアクセススコープはメソッドスコープに制限されているため、アクセス修飾子を適用する意味はありません。したがって、アクセス修飾子を適用する意味はありません。
class Foo{
public void stuff(){
private String x=2; //compilation error.
}
}
アクセス修飾子を明示的に適用すると、上記のコードはコンパイルされません。
javaの規則に従って、メソッドのスコープで宣言された変数は外部からアクセスできません。つまり、変数自体がプライベートで保護されており、もちろん、指定されていない場合はデフォルトがわかります。したがって、上記のアクセス修飾子を使用してローカル変数を宣言しても意味がありません。ただし、変数への値の不要な再割り当てなどの処理のために、method()の実行中に変更されたくないという理由で、 「final」アクセス修飾子を引き続き使用できます。
- メソッド、ブロック、またはコンストラクター内で宣言される変数は、ローカル変数と呼ばれます。
- ローカル変数はメソッド/ブロック内で初期化され、メソッド/ブロックの実行が完了すると破棄されます。
したがって、これらのタイプの変数にアクセス修飾子を指定しても意味がありません。