search
LoginSignup
0
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

2016年IT勉強総復習 ごった煮 Advent Calendar 2016 Day 3

posted at

updated at

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

つまりどころ〜

  
こんにちは。

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

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

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
What you can do with signing up
0
Help us understand the problem. What are the problem?