よくわからないことを調べて解説してみるブログ。
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]
ブログ内検索
