Developer

【はじめてのJava】インスタンス変数の初期値【オブジェクトとクラス編】
2021.03.21
Lv1

【はじめてのJava】インスタンス変数の初期値【オブジェクトとクラス編】

はじめてのJava

このシリーズでは、初めてJavaやプログラミングを勉強する方向けに、Javaによるプログラミングの基礎を説明していきます。
目標レベルは、Javaの資格試験の一つである「Oracle Certified Java Programmer, Silver」(通称Java Silver)に合格できる程度の知識の習得です。
はじめてJavaやプログラムに触れる方にもできるだけわかりやすい解説を心がけていきます。


オブジェクトとクラス編

オブジェクトとクラス編では、Javaを扱う上で非常によく出てくる「オブジェクト」や「クラス」について扱っていきます。

前回は「インスタンス変数の使い方」について扱いました。

今回は「インスタンス変数の初期値」について扱っていきます。


目次


インスタンス変数の初期値

インスタンス変数は、インスタンス化をした瞬間から利用できるようになります。インスタンス変数はある方法でインスタンス化の瞬間に初期値を指定することが可能です。(指定の方法についてはコンストラクタという項目で詳しく扱いますので今は触れません。)

インスタンス変数は、インスタンス化の際に初期値を指定していない場合、データ型ごとに決まった値で初期化されるようになっています。これは自動初期化されないローカル変数との大きな違いです。

ローカル変数とインスタンス変数を比べてみましょう。


ローカル変数の場合

ローカル変数の場合は定義したらその場で実体ができます

ただし 変数内に格納されている値が不明瞭 ですので、値を代入するまで利用できません。(初期値がない状態で表示などを行うとコンパイルエラーになります。)


インスタンス変数の場合

インスタンス変数の場合はクラスを定義してもインスタンス化しないと実体がありません

ただし インスタンス化の際にインスタンス変数には初期値が格納される ので、インスタンス化後すぐに値を利用可能です。


ソースコード

ローカル変数とインスタンス変数の違いをソースコードで確認してみましょう。

ソースコードは以下の通りです。ローカル変数のnumは初期化されていないためコンパイルエラーを引き起こします。一方でインスタンス変数であるmyCar.speedは自動的に0.0で初期化されるためコンパイルエラーになりません。

public class Sample{
  public static void main(String[] args){
    int num;
    System.out.println(num); //numは初期化されていないのでコンパイルエラー
    Car myCar = new Car();
    System.out.println(myCar.speed); //myCar.speedはインスタンス変数なのでコンパイルエラーにならない
  }
}
 Javaの試験では頻出 ですので、試験を受ける方は「ローカル変数」なのか「インスタンス変数」や「static変数」なのか、よく確認してください。


インスタンス変数の初期値一覧

インスタンス変数の初期値は次の表のとおりです。

インスタンス変数の初期値(Java11の時点での情報:出典元はこちら

データ型 初期値
byte型 (byte)0
※脚注:int型の0をbyte型にキャストしています。
short型 (short)0
※脚注:int型の0をshort型にキャストしています。
int型 0
long型 0L
float型 0.0f
double型 0.0d
※脚注:double型の0.0のことです。
char型 '¥0000'
※脚注:'\0000'と同じ意味です。
boolean型 false
オブジェクト参照型全般 null

まとめ

インスタンス変数は初期化しなくても初期値が決まっている。
ローカル変数は初期化しないと初期値が存在しないため使えない。
Javaの試験では頻出。


次回

次回はstatic変数について詳しく触れていきます。


はじめてのJavaシリーズの目次はこちら
オブジェクトとクラス編はこちら


java 11 の練習問題一覧はこちら
はじめてのJavaシリーズの練習問題一覧はこちら