Javaでは、クラスはオブジェクトの雛形として利用するだけでなく、直接フィールドやメソッドを持つことができます。そういったフィールドやメソッドには「static」という修飾子を付けます。
このstaticなフィールドやメソッドは、オブジェクトの初期化を行わずに、「クラス名.フィールド名」「クラス名.メソッド名()」とすることで利用が可能です。
注意すべき点は、staticなメソッドからは、非staticなフィールドやメソッドが利用できないことです。
なぜならば、非staticなフィールドは、オブジェクトが作成されるまでは、インスタンス化されていないからです。存在しない物にアクセスすることはできません。だから、最初からアクセス自体が禁止されています。
┏クラス━━━━━┓ ┃ ┃ ┃private static ┃public static ┠─●フィールド ┠─○フィールド ┠─●メソッド ┠─○メソッド──────────┐ ┃ ┃ ×禁止! ┃────────┃ │ ┃ ┃ ┏メモリ━↓━━━━┓ ┃private ┃public 確保 ┃┏インスタンス━┓┃ ┠─●フィールド→┠─○フィールド→→→→→┃・変数 ┃┃ ┠─●メソッド ┠─○メソッド ┃┗━━━━━━━┛┃ ┗━━━━━━━━┛ ┗━━━━━━━━━┛
┏クラス━━━━━┓ ┃ ┃ ┃private static ┃public static ┠─●フィールド ┠─○フィールド ┠─●メソッド ┠─○メソッド─────────────────┐ ┃ ┃ │ ┃────────┃ │ ┃ ┃ ┏メモリ━━━━━━┓ │ ┃private ┃public 確保 ┃┏インスタンス━┓┃ │ ┠─●フィールド→┠─○フィールド→→→→→┃・変数 ┃┃ │ ┠─●メソッド ┠─○メソッド─────→┗━━━━━━━┛┃ │ ┗━━━━━━━━┛ ↑ 利用 ┗━━━━━━━━━┛ │ 禁止!× │ └───────────────────┘
前回利用したMyClassにstaticなフィールドとメソッドを追加してみます。
package sample; public class MyClass { (省略) // staticなフィールド public static String classNameJa = "マイ クラス"; // staticなメソッド public static String getClassNameJa() { return "メソッド:" + classNameJa; } }
package sample; public class Sample { public static void main(String[] args) { System.out.println(MyClass.classNameJa); System.out.println(MyClass.getClassNameJa()); } }
マイ クラス メソッド:マイ クラス