なりそこないの綴り

エンジニア(予定)まであと半年の学生です。

static修飾子(Java)

前々回の記事で書こうかなと思ったのでstatic修飾子(Java)について

 

 c++ではstatic修飾子のついた変数や、関数、メソッドは、静的変数、静的関数、静的メソッド、等静的〇〇と言われますが、Javaだとstatic〇〇と呼ばれることが多いです。

 Javaではstatic修飾子のついた変数やメソッドはクラス内で宣言されるため、static修飾子がついた変数、メソッドをクラス変数、クラスメソッドと呼ばれます。逆に、static修飾子がつかない変数やメソッドをインスタンス変数、インスタンスメソッドと呼ばれます。

 

静的メンバ変数

複数の同じインスタンスに対して一つしか存在しません。オブジェクトを生成せずに参照することができます。


 static変数とも呼ばれます。 c++と違い、宣言すれば実態も生成されます。 static変数はどのインスタンスから参照されても実態は一つしか存在しません。Javaグローバル変数のような使い方がしたい場合はこのような形で使うことになると思います。

f:id:mori_morio:20171023234707p:plain

f:id:mori_morio:20171023234710p:plain

 

f:id:mori_morio:20171023234711p:plain

f:id:mori_morio:20171023234713p:plain

となります。

 

静的メソッド

オブジェクトを生成せずに参照することができます。


 staticメソッドとも呼ばれます。 こちらもc++と同じですね。 インスタンス生成せずに参照もできますが、生成したものからでも参照することができます。

f:id:mori_morio:20171023234714p:plain

f:id:mori_morio:20171023234715p:plain

となります。

 

静的クラス

クラス内にクラス(インナークラス、メンバークラス)を生成する際に使うことができます。


 staticクラスとも呼ばれます。 クラス内にstaticクラスとして宣言することで、別ファイルに定義した普通のクラスと同じような扱いができます。 static classはクラス内でしか宣言できず、普通に宣言しようとするとエラーになります。 staticクラスから、親クラスのインスタンス変数、インスタンスメソッドは参照できませんが、クラス変数やクラスメソッドは参照できます。

f:id:mori_morio:20171023234720p:plain

f:id:mori_morio:20171023234722p:plain

となります。

 

static import

staticメソッドの呼び出しが簡単になります。


可読性が下がるのでほぼ使ったことないです。

f:id:mori_morio:20171023234724p:plain

f:id:mori_morio:20171023234727p:plain

f:id:mori_morio:20171023234725p:plain

となります。

 

 

 解説をすると、TestStatic5クラスの変数aとprintメソッドをstatic importを用いて簡略化して参照しています。

 

コードもつけると結構長くなりますね。

 

AtomETロボコンぐらいでしか使っていなかったので、次回はAtomに実行環境のプラグインを入れてみたいと思います。