Java変数の種類:ローカル、インスタンス、クラス変数を徹底解説
変数宣言の基本形
dataType variable [= value][, variable [= value] ...];
dataTypeはJavaのデータ型、variableは変数名。カンマ区切りで同型複数宣言可能。
宣言・初期化例
int a, b, c; // 3つのint宣言
int a = 10, b = 10; // 初期化付き
byte B = 22; // byte初期化
double pi = 3.14159; // PI値代入
char a = 'a'; // char初期化
3種類の変数
- ローカル変数
- インスタンス変数
- クラス/静的変数
ローカル変数
- メソッド、コンストラクタ、ブロック内で宣言
- ブロック進入時に生成、退出時に破棄
- アクセス修飾子使用不可
- 宣言ブロック内でのみ可視
- スタック上に実装
- デフォルト値なし:使用前に必ず初期化必要
ローカル変数例
public class Test {
public void pupAge() {
int age = 0; // ローカル変数
age = age + 7;
System.out.println("Puppy age is : " + age);
}
public static void main(String[] args) {
Test test = new Test();
test.pupAge();
}
}
Puppy age is: 7
未初期化エラー例
public class Test {
public void pupAge() {
int age; // 初期化なし
age = age + 7; // コンパイルエラー!
System.out.println("Puppy age is : " + age);
}
}
Test.java:4: variable number might not have been initialized age = age + 7; ^ 1 error
インスタンス変数
- クラス内、メソッド/コンストラクタ/ブロックの外で宣言
- オブジェクト生成(
new)時にヒープ上にスロット確保、オブジェクト破棄時に消滅 - 複数メソッド/コンストラクタ/ブロックから参照される値、オブジェクト状態の本質的部分に使用
- クラスレベルであれば使用前/後どちらでも宣言可
- アクセス修飾子指定可能
- 同クラス内の全メソッド/コンストラクタ/ブロックから可視(通常
private推奨、サブクラスアクセスならprotected等) - デフォルト値あり:数値0、boolean false、参照型null。宣言時またはコンストラクタで値設定可能
- クラス内なら変数名直接アクセス可。staticメソッドからは
ObjectReference.VariableNameで完全修飾必要
インスタンス変数例
import java.io.*;
public class Employee {
public String name; // 子クラスからも可視
private double salary; // Employeeクラス内のみ可視
public Employee(String empName) { name = empName; }
public void setSalary(double empSal) { salary = empSal; }
public void printEmp() {
System.out.println("name : " + name);
System.out.println("salary :" + salary);
}
public static void main(String[] args) {
Employee empOne = new Employee("Ransika");
empOne.setSalary(1000);
empOne.printEmp();
}
}
name : Ransika salary :1000.0
クラス/静的変数
- クラス内、メソッド外、
staticキーワード付きで宣言 - クラスごとに1つだけのコピー(インスタンス数に関わらず)
- 主に定数(
public/private final static)として使用稀 - スタティックメモリ領域に格納
- プログラム開始時に生成、終了時に破棄
- 可視性はインスタンス変数と同様。多くは
public定数として公開 - デフォルト値はインスタンス変数と同じ。宣言時、コンストラクタ、静的初期化ブロックで設定可能
- アクセス:
ClassName.VariableName public static final定数名は全大文字慣習
クラス変数例
import java.io.*;
public class Employee {
private static double salary;
public static final String DEPARTMENT = "Development ";
public static void main(String[] args) {
salary = 1000;
System.out.println(DEPARTMENT + "average salary:" + salary);
}
}
Development average salary:1000
注意:外部クラスから定数アクセス時はEmployee.DEPARTMENTで完全修飾。
次の章へ
本章でpublic/privateを使用しました。次章でアクセス修飾子と非アクセス修飾子を詳細に説明します。
Java
- C# 変数とプリミティブデータ型:完全マスターガイド
- C言語変数・定数・リテラル完全ガイド
- C言語ストレージクラス完全理解:スコープ・ライフタイム・パフォーマンス
- C++変数とデータ型:int、double、char、string、boolを徹底解説
- Java変数とリテラル:包括的ガイド
- Javaプリミティブデータ型:例付き完全ガイド
- Java演算子をマスター:種類、構文、実践例
- Javaインターフェース完全ガイド:概念、実装、ベストプラクティス
- Javaのtry-with-resourcesをマスターする:自動リソース管理の仕組みと活用法
- Javaアノテーション完全ガイド:種類、配置場所、実践例
- Javaアノテーションタイプ完全ガイド:事前定義・カスタム・メタアノテーション