つまりどころ〜
こんにちは。
Java Silverを勉強していて、「うーん」と個人的につまったことをまとめます。
static
staticで修飾されたメソッドや変数は、「static領域」に配置される。
インスタンスは「ヒープ領域」。GCちゃんの対象。
staticなフィールドへは「クラス名.フィールド名」で直接呼び出す感じになる。
staticのアクセス領域
○staticメソッドはインスタンス変数にアクセスできない
(設定:お嬢だからはずかしい)
class Pine{
int i = 1; //インスタンス変数
static int j = i; //static変数
System.out.println(i); //コンパイルエラー
System.out.println(j); //エラーにならぬ!
}
○staticメソッドはインスタンスメソッドにアクセスできない
(設定:お嬢だからはずかしい)
Class Apple{
static void apple1() { //staticメソッド
method2(); //staticメソッドだから呼べる
Methods.apple2(); //これでも呼べる
apple3(); //お嬢だから、インスタンスメソッドは呼べない(コンパイルエラー)
}
static void apple2(){} //staticメソッド
void apple3() {} //インスタンスメソッド
staticイニシャライザ
staticイニシャライザとは
クラスの読み込み時に一度だけ実行される初期化処理のこと。
staticで宣言されたブロックや、変数を指す。
以下のように使うと、最終的にageは20になる。
class Adult {
static int age = 10;
static {
age = 20;
}
}
staticイニシャライザはコードの上から順に実行される。
そのために下記のように書くとコンパイルエラーになる。
class Adult {
static {
age = 20;
}
static int age = 10;
}
変数の宣言前に値を代入しようとしているためにコンパイルエラーになる。
また複数のstaticブロックや変数を書くこともできる。
その場合も上から順番に実行されることに注意!
アウトプットして、ちしき固めていくぞ〜。