LoginSignup
0
0

More than 5 years have passed since last update.

Java Silverつまりどころ(その2)

Last updated at Posted at 2016-12-02

つまりどころ〜

  
こんにちは。

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ブロックや変数を書くこともできる。
その場合も上から順番に実行されることに注意!

アウトプットして、ちしき固めていくぞ〜。
  

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0