Javaのstatic修飾子について記載します。
目次
static修飾子
1. 適用箇所
メソッド・変数に使用することができます。
2. 特徴
static修飾子を適用することにより、クラスをインスタンス化しなくてもメソッドや変数にアクセスすることが出来ます。
また、static修飾子を適用したメソッド・変数のことを
クラスメソッド
クラス変数
というように呼びます。
3. 使い方
クラスメソッド・クラス変数にアクセスする場合、クラスをインスタンス化しなくても直接アクセスすることが出来ます。
クラス名.メソッド名
クラス名.変数名
というようにアクセス出来ます。
実行例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
public class ClassA { // クラス変数 static String strA = "A"; // クラスメソッド static void print(){ System.out.println("static method"); } public static void main( String args[] ){ // クラス変数の値を出力 System.out.println( ClassA.strA ); // A // クラスメソッドにアクセス ClassA.print(); // static method } } |
また、クラスメソッド・クラス変数には、インスタンス変数からもアクセスすることが出来ます。
その際、インスタンス変数が null でもアクセスすることが出来ます。
実行例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
public class ClassA { // クラス変数 static String strA = "A"; // クラスメソッド static void print(){ System.out.println("static method"); } public static void main( String args[] ){ // ClassAのインスタンス変数を宣言 ClassA instance = null; // クラス変数の値を出力 System.out.println( instance.strA ); // A // クラスメソッドにアクセス instance.print(); // static method } |
ただし、インスタンス変数を宣言しただけでは、コンパイルエラーになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
public class ClassA { // クラス変数 static String strA = "A"; // クラスメソッド static void print(){ System.out.println("static method"); } public static void main( String args[] ){ // ClassAのインスタンス変数を宣言 ClassA instance; // クラス変数の値を出力 System.out.println( instance.strA ); // instance変数を初期化していないのでコンパイルエラー // クラスメソッドにアクセス instance.print(); // // instance変数を初期化していないのでコンパイルエラー } |
4. クラスメソッド・非クラスメソッドのオーバーライドの制限について
継承先のクラスでメソッドをオーバーライドする場合、次のケースはエラーになります。
スーパークラスでの定義 | → | サブクラスでの定義 |
---|---|---|
クラスメソッド | → | 非クラスメソッド |
非クラスメソッド | → | クラスメソッド |
実行例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
class ClassB { // クラスメソッド static void methodA(){} // 非クラスメソッド( インスタンスメソッド ) void methodB(){} } class ClassSubB extends ClassB { // クラスメソッドを継承時に static を外す(インスタンスメソッド化)ことは出来ない void methodA(){} // コンパイルエラー // インスタンスメソッドを継承時に static を付ける(クラスメソッド化)ことは出来ない static void methodB() // コンパイルエラー } |