Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

@houren

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
0
Help us understand the problem. What are the problem?