よくわからないことを調べて解説してみるブログ。
2015
package june20150623; public class InnerStaticClass { static class InnerClass{ public int no = 10; public static int value = 11; } class InnerClass2{ public int no = 12; // public static int value = 13; // コンパイルエラー!staticでないインナークラスにstatic変数はfinal修飾子が必須。 // トップクラスおよび静的インナークラスのみ、staticの非final変数定義が許可されている。 // 実行時のエラーメッセージ和訳 // 「定数式で初期化されない限り、フィールドの値は、 // 非静的インナータイプで静的に宣言することはできません」 public static final int value2 = 14; } public static void main(String[] args) { // int no = new InnerStaticClass().InnerClass.no; // コンパイルエラー!メンバ変数はstaticではない。 // instance-value of static inner class int no = new InnerStaticClass.InnerClass().no; // メンバ変数はインスタンス変数であるため、インスタンス化したうえでのアクセスが可能。 // インナークラスへのアクセスはstaticに可能。 // static-value of static inner class no = InnerStaticClass.InnerClass.value; // static インナークラスのstaticメンバ定義 // no = new InnerStaticClass.InnerClass2().no; // 最上位クラスのインスタンス化が前提と成るため、コンパイルエラー! // instance-value of non-static inner class no = new InnerStaticClass().new InnerClass2().no; // static-value of non-static inner class no = InnerStaticClass.InnerClass2.value2; // non-static インナークラスへのstaticメンバ定義(final必須) } }
・インナークラスの生成式
new 最上位クラス(). new インナークラス();
・非staticインナークラスのメンバへのアクセス
new 最上位クラス.new インナークラス().メンバ変数;
・非staticインナークラスのstaticメンバへのアクセス
最上位クラス.インナークラス.staticメンバ変数;
・staticインナークラスのメンバへのアクセス
最上位クラス.new インナークラス.メンバ変数;
メンバ変数がstaticでないため、インナークラスをインスタンス化することでしか、メンバ変数を実体化出来ないため、本来不要であるstaticクラスのインスタンス化が必要となっている。
・staticインナークラスのstaticメンバへのアクセス
new 最上位クラス.インナークラス().staticメンバ変数;
・トップクラスおよび静的インナークラスのみ、staticの非final変数定義が許可されている。
PR
Post your Comment
プロフィール
HN:
たんてーくん
性別:
非公開
最新記事
(03/29)
(03/29)
(06/26)
(05/21)
(04/23)
カテゴリー
最新CM
[09/25 http://2017.bblbuy.com]
[09/24 http://www.japanform.com]
[09/23 http://www.japanform.com]
[09/22 http://www.japanform.com]
[09/21 http://2017.bblbuy.com]
ブログ内検索