SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

HRzine Day(エイチアールジン・デイ)は、人が活き会社が成長する人事のWebマガジン「HRzine」が主催するイベントです。毎回、人事の重要課題を1つテーマに設定し、識者やエキスパードが持つ知見・経験を、参加者のみなさんと共有しています。

直近開催のイベントはこちら!

HRzine Day 2024 Winter

2024年2月1日(木)12:00~17:40

主要製品スペック一覧

人事業務の効率・確度・精度を高めるために欠かせないHRテクノロジー。その主な製品の機能を分野ごとに比較できる資料群です。製品検討の参考資料としてご活用ください。

人事労務管理システム<br>主要製品スペック一覧 2023

人事労務管理システム
主要製品スペック一覧 2023

その他のスペック一覧

タレントマネジメントシステム<br>主要製品スペック一覧 2023

タレントマネジメントシステム
主要製品スペック一覧 2023

採用管理システム<br>主要製品スペック一覧 2023

採用管理システム
主要製品スペック一覧 2023

みちこ先生のオラクル認定Javaプログラマ Silver SE 7/8 合格コース | 第2回

【認定Java Silver】staticメンバを理解する


  • Facebook
  • Twitter
  • Pocket
  • note
  • hatena

 本連載では、試験範囲の中でもつまづきやすい部分や、理解しづらいトピックを紹介したいと思います。各連載では、前半に技術解説、後半に確認問題を掲載しますので、ぜひ実際に問題をときながら理解を深めてください。さて、2回目となる本稿では「staticメンバ」について解説します。main()メソッドの定義で必ず見かけるstaticですが、苦手に感じる人が少なくないようです。それだけに、インスタンスメンバとの動作や呼び出し方の違いは試験でもよく狙われますから、きちんと整理して覚えておきましょう。

  • Facebook
  • Twitter
  • Pocket
  • note
  • hatena

本記事の目次本記事の目次

static変数とは・staticメソッドとは

ご存じのとおり、クラスには属性を表す変数と、操作を表すメソッドを定義します。このクラスに用意した変数やメソッドを総称してメンバと呼びます(図1)。

図1.メンバ
図1.メンバ

メンバ変数は、そのクラスが持つべき属性を表現するために使用します。メンバ変数には、表1に挙げたインスタンス変数static変数の2種類があります。

表1.メンバの種類
  メンバ変数 メンバメソッド
インスタンスメンバ インスタンス変数
(非static変数)
インスタンスメソッド
(非staticメソッド)
staticメンバ static変数 staticメソッド

変数を宣言するときにstatic修飾子を指定することで、static変数として扱われます。メソッドも同様に、static修飾子を指定することでstaticメソッドとして扱われます。なお、static変数はクラス変数、staticメソッドはクラスメソッドとも呼ばれ、クラスに対して静的(static)に存在するメンバであることを意味します。

サンプルSample1.javaで、インスタンスメンバとstaticメンバの定義を確認しましょう。

■Sample1.java
class Sample1 {
  int instanceVal = 100; 
  static int staticVal = 200; 
  void methodA() { 
    System.out.println("methodA(): " + instanceVal);
  }
  static void methodB() { 
    System.out.println("methodB(): " + staticVal);
  }
}

instanceValはインスタンス変数、staticValはstatic変数です。また、methodA()は非static(インスタンス)メソッド、methodB()はstaticメソッドです。定義の違いはstatic修飾子の有無だけです。では、static修飾子の有無により何が違うのでしょうか。

違うのはメモリの確保場所です。static修飾子のないインスタンスメンバには、クラスのインスタンス(オブジェクト)ごとに領域が確保されます。例えば、1つのクラスから3つのインスタンスを生成すれば、「3つ×インスタンスメンバの数」だけ領域が確保されます。領域が確保されるタイミングは、インスタンス化を行ったときです。

一方、staticメンバはクラス単位で領域が確保されます。そのため、staticメンバに確保される領域は、たとえ複数のインスタンスが生成されても、1つだけです。領域が確保されるのは、クラスをメモリ上に読み込んだときです。

図2.インスタンスメンバとstaticメンバ
図2.インスタンスメンバとstaticメンバ

static変数とstaticメソッドの呼び出し

インスタンスメンバ(変数・メソッド)を呼び出す場合、インスタンス(オブジェクト)を参照する変数を使って、「参照変数名.インスタンス変数名」や「参照変数名.インスタンスメソッド名()」と記述しますよね。これは、インスタンスメンバがインスタンス(オブジェクト)ごとに領域が確保されるためです。

一方、staticメンバ(変数/メソッド)はクラスごとに確保される領域なので、「クラス名.static変数名」や「クラス名.staticメソッド名()」と記述します。また、インスタンス化しなくても呼び出しができます。staticメンバは、クラスが読み込まれた時点でメモリ上に展開されているためです。

次に示すサンプルSample2.javaは、先ほど作成したSample1クラスの各変数、メソッドを呼び出しています。Sample1.javaのコードと照らしながら確認してみましょう。

■Sample2.java
class Sample2 {
  public static void main(String[] args) {
    //System.out.println(Sample1.instanceVal);   //① NG
    System.out.println(Sample1.staticVal);       //② OK
    //Sample1.methodA();                         //③ NG
    Sample1.methodB();                           //④ OK
    Sample1 obj = new Sample1();
    System.out.println(obj.instanceVal);         //⑤ OK
    System.out.println(obj.staticVal);           //⑥ OK
    obj.methodA();                               //⑦ OK
    obj.methodB();                               //⑧ OK
  }
}
■Sample2.javaの実行結果
200
methodB(): 200
100
200
methodA(): 100
methodB(): 200

インスタンスメンバは、インスタンス化しなければ呼び出せません。したがって、①と③はコメントを外すとコンパイルエラーとなります。また、通常、staticメンバはクラス名.メンバ名で呼び出しますが、⑥や⑧と記述しても実行可能です。

次のページ
staticメンバはどこで使うのか

この記事は参考になりましたか?

  • Facebook
  • Twitter
  • Pocket
  • note
  • hatena
みちこ先生のオラクル認定Javaプログラマ Silver SE 7/8 合格コース連載記事一覧

もっと読む

この記事の著者

山本道子(ヤマモト ミチコ)

2004年Sun Microsystems社を退職後、有限会社Rayを設立し、システム開発、インストラクタ、執筆業などを手がける。著書に『オラクル認定資格教科書 Javaプログラマ Bronze SE 7/8』『同Silver SE 8』『同Gold SE 8』のほか、『SUN教科書 Webコンポーネントディベロッパ(SJC-WC)』、『携帯OS教科書 Androidアプリケーション技術者ベーシック』、『Linux教科書 LPICレベル1 スピードマスター問題集』(共著)、監訳書に『SUN教科書 Javaプログラマ(SJC-P)5.0・6.0 両対応』(いずれも翔泳社刊)などがある。月刊誌『日経Linux』(日経BP社刊)でLPIC対策記事を連載。日々の楽しみは晩酌、好きな言葉は表面張力。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事をシェア

  • Facebook
  • Twitter
  • Pocket
  • note
  • hatena
HRzine
https://hrzine.jp/article/detail/48 2017/12/24 16:49

Special Contents

AD

Job Board

AD

おすすめ

アクセスランキング

アクセスランキング

イベント

HRzine Day(エイチアールジン・デイ)は、人が活き会社が成長する人事のWebマガジン「HRzine」が主催するイベントです。毎回、人事の重要課題を1つテーマに設定し、識者やエキスパードが持つ知見・経験を、参加者のみなさんと共有しています。

2024年2月1日(木)12:00~17:40

イベントカレンダーを見る

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング