変数


🤔 変数のスコープについて

同じスコープ内で同名の変数を定義することはできません。
ブロックでスコープを限定すれば、その外では同名の変数を定義できます。

public static void main(String.. args) {
{ // ブロックで囲むとスコープが定義される
int i = 0;
System.out.println(i); //スコープ内ならコンパイルは通る
}
int i = 1; // スコープ外で同名の変数を定義するのはOK
}

逆に、最初に変数を宣言した場合はスコープが重複する(シャドーイング)ためコンパルエラーとなります。

public static void main(String... args) {
int i = 0;
{
int i = 0; // 上のiが有効なため、コンパイルエラー
}
}

フィールド変数の場合は重複してもエラーにはなりません。ローカル変数が優先されます。

class Main {
int i = 0; // フィールド変数
void doSomething() {
int i = 1; // ローカル変数
System.out.println(i); // ローカル変数が優先され、1を表示
System.out.println(this.i); // フィールド変数を使う場合はthisをつける。0が表示
}
}

🍮 参考リンク

📚 おすすめの書籍

🖥 サーバについて

このブログでは「Cloud Garage」さんのDev Assist Program(開発者向けインスタンス無償提供制度)でお借りしたサーバで技術検証しています。 Dev Assist Programは、開発者や開発コミュニティ、スタートアップ企業の方が1GBメモリのインスタンス3台を1年間無料で借りれる心強い制度です!(有償でも1,480円/月と格安)