Rainbow Planet (GT×IT×SP×SA)

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

01_IT技術 (Technology)

Javaのstatic変数とは?その特徴及び付けた場合と付けない場合の違いを解説

投稿日:2019年10月20日 更新日:

(0)目次&概説

(1) static修飾子
 (1-1) staticメンバとは?
 (1-2) static変数
  (1-2-1) static変数の説明と特徴
  (1-2-2) static変数のサンプルコード
 (1-3) staticメソッド
  (1-3-1) staticメソッドの説明と特徴
  (1-3-2) staticメソッドのサンプルコード

(1) static修飾子

(1-1) staticメンバとは?

「staticメンバ」とは「メンバ変数」(*注1)や「メソッド」(*注2)のうち、定義時に「static修飾子」を付けて定義したものを言います。

(図1)

(*注1)「メンバ変数」とは「クラス内&メソッドの外」で定義された変数で、オブジェクトの属性を表します。
(例:名前、顧客番号、残高、口座番号、住所、生年月日・・等々の「属性」を保持する変数)

 
(*注2)「メソッド」とはオブジェクトに対して行う「操作」の処理内容を定義するものです。
(例:預け入れ、引き出し、振り込み、積み立て・・等々の「操作」の処理ロジックを記述するメソッド)

目次にもどる

(1-2) static変数

(1-2-1) static変数の説明と特徴

static修飾子を用いて宣言した変数を「クラス変数」(または「static変数」)と呼び、非staticな変数を「インスタンス変数」と呼びます。特徴としては下記の点があります。

変数名 定義&概要 用途&特徴
メンバ変数
インスタンス変数
・static修飾子「なし」で宣言したメンバ変数の呼称 (#1)変数として使用される事が多い。
(#2)クラスから生成された複数のオブジェクト間で共有されない(オブジェクト毎に領域を確保している)
(#3)[クラス名].[メンバ変数名]と指定してアクセスできない
メンバ変数
クラス変数
・static修飾子「あり」で宣言したメンバ変数の呼称
・別名は「static変数」とも呼びます
・クラスの「メンバ変数」と「メソッド」にのみ指定できます
(#4)定数として使用される事が多い。
(#5)クラスから生成された全てのオブジェクトで共有される
(#6)[クラス名].[メンバ変数名]と指定してアクセスできる
(#7)クラスからオブジェクトを生成せずに利用できる(個々のオブジェクトとは関係なく存在する)
(1-2-2) static変数のサンプルコード

上記(#5)の性質を実際に確認した例が下記です。

(図2)

■サンプルプログラム

//[StaticDetail.java]
package training;
public class StaticDetail {
        
        //クラス変数(Static)と、インスタンス変数(非Static)を両方用意
        static String stat="Static Variable";
        String nstat="Non-Static Variable";
        
        //クラスメソッド(Static)と、インスタンスメソッド(非Static)を両方用意
        public static void StaticMethod(String a_word) {
                System.out.println("[Static Method] is called with ["+a_word+"]");
        }

        public void NonStaticMethod(String a_word) {
                System.out.println("[Non-Static Method] is called with ["+a_word+"]");
        }
}

//[StaticMain.java]
//Mainメソッドを記述
package training;
public class StaticMain {
        public static void main(String args[]) {
                //StaticDetail.StaticMethod(StaticDetail.stat);

                StaticDetail sd1 = new StaticDetail();
                StaticDetail sd2 = new StaticDetail();
                StaticDetail sd3 = new StaticDetail();
                System.out.println("sd1 output : "+sd1.stat);
                System.out.println("sd2 output : "+sd2.stat);
                System.out.println("sd3 output : "+sd3.stat);

        }
}

 

■実行結果

sd1 output : Static Variable
sd2 output : Static Variable
sd3 output : Static Variable

 

上記(#6)(#7)の性質を実際に確認した例が下記です。

(図3)

■サンプルプログラム

//[StaticDetail.java]
package training;
public class StaticDetail {

        //クラス変数(Static)と、インスタンス変数(非Static)を両方用意
        static String stat="Static Variable";
        String nstat="Non-Static Variable";
		
        //クラスメソッド(Static)と、インスタンスメソッド(非Static)を両方用意
        public static void StaticMethod(String a_word) {
                System.out.println("[Static Method] is called with ["+a_word+"]");
        }
		
        public void NonStaticMethod(String a_word) {
                System.out.println("[Non-Static Method] is called with ["+a_word+"]");
        }
}

//[StaticMain.java]
//Mainメソッドを記述
package training;
public class StaticMain {
        public static void main(String args[]) {
                //クラス変数を[クラス名].[メンバ変数名]で呼出し
                //クラスメソッドを[クラス名].[メソッド名]で呼出し
                StaticDetail.StaticMethod(StaticDetail.stat);
        }
}

 

■実行結果

[Static Method] is called with [Static Variable]

目次にもどる

(1-3) staticメソッド

(1-3-1) staticメソッドの説明と特徴

static修飾子を用いて宣言したメソッドを「クラスメソッド」と呼び、、非staticな変数を「インスタンスメソッド」と呼びます。特徴としては下記の点があります。

メソッド名 定義&概要 用途&特徴
メソッド
インスタンスメソッド
・static修飾子「なし」で宣言したメソッドの呼称 (#1)同一クラス内のあらゆるメンバ変数やメソッドを操作できる
メソッド
クラスメソッド
・static修飾子「なし」で宣言したメソッドの呼称 (#2)クラスからオブジェクトを生成せずに利用できる(個々のオブジェクトとは関係なく存在する)
(#3)[クラス名].[メソッド名]と指定してアクセスできる
(#4)staticなメソッドからは、同一クラス内の非staticな変数やメソッドは操作できない(インスタンス変数・インスタンスメソッド)

上記(#2)(#3)の性質を実際に確認した例は「(1-2) static変数」の(図3)になります。

(1-2-2) static変数のサンプルコード

上記(#4)の性質を実際に確認した例が下記です。
■サンプルプログラム

//(#5)確認用のプログラム
package training;
public class StaticDetail {
        //クラス変数(Static)と、インスタンス変数(非Static)を両方用意
        static String stat="Static Variable";
        String nstat="Non-Static Variable";
		
        //クラスメソッド(Static)と、インスタンスメソッド(非Static)を両方用意
        public static void StaticMethod(String a_word) {
                System.out.println("[Static Method] is called with ["+a_word+"]");
        }

        public void NonStaticMethod(String a_word) {
                System.out.println("[Non-Static Method] is called with ["+a_word+"]");
        }

	    //クラスメソッド(Static)の中でそれぞれ下記を実行
	    public static void main(String args[]) {
                //(1) クラスメソッド(Static)の中でクラスメソッド(Static)を実行(引数もクラス変数(Static))
                //[正常終了の想定]
		StaticMethod(stat);
				
                //(2) クラスメソッド(Static)の中でクラスメソッド(Static)を実行(ただし、引数はインスタンス変数(非Static))
                //[エラーの想定]
                StaticMethod(nstat);

                //(3) クラスメソッド(Static)の中でインスタんメソッド(非Static)を実行(ただし、引数はクラス変数(Static))
                //[エラーの想定]
                NonStaticMethod(stat);
        }
}

 

■実行結果(エラーメッセージ

Exception in thread "main" java.lang.Error: Unresolved compilation problems:
        Cannot make a static reference to the non-static field nstat
        Cannot make a static reference to the non-static method NonStaticMethod(String) from the type StaticDetail

        at training.StaticDetail.main(StaticDetail.java:18)

 

(図4)

目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-01_IT技術 (Technology)

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

データベースのインデックスの基本と種類とOracleやSQL Serverでの特長について

(0)目次&概説 (1) データベースのインデックスとは (2) インデックスはどのような場面で使う? (3) インデックスの主要な方式  (3-1) B木  (3-2) B+木  (3-3) ビット …

Servlet/JSPで日本語文字が「???」になる問題とFilterの活用について

(0)目次&概説 (1) 事象 (2) 原因 (3) 対処方法1  (3-1) フィルタクラスの新規作成  (3-2) フィルタクラスへのコード追加  (3-3) 疎通確認テスト (4) 対処方法2 …

ORA-00257エラーの対応(“archiver error. Connect Internal only. until freed”)

ORA-00257エラーの対応法についてです。 (“archiver error. Connect Internal only, until freed”) (0) 目次 (1 …

日立JP1をLinuxサーバにインストールする手順

JP1評価版(ジョブスケジューラ)インストール簡易手順書です。 (0)目次 (1) 必要な資産の入手 (2) インストールの事前準備 (3) インストーラーの操作#1 (4) インストール後のセットア …

ハワイで海外挙式したい人向けモアナチャペルの費用や準備スケジュールの紹介(実体験)

この記事ではハワイで海外挙式したい人に向けての参考情報として「モアナチャペル」での挙式を例に挙げて「費用」と「スケジュール」と「挙式当日の流れ」の3点に焦点を当ててご紹介します。少しでも参考になれば幸 …

Top