変数の初期化とは:SJC-P(310-035)対策Java用語集

Java認定資格(SJC-P/310-035)を一発合格したい!
このサイトは、そんなあなたを本気で応援します!!
SJC-P(310-035)対策のメルマガ問題集も好評発刊中。
ぜひあなたの受験に役立ててください。
メールマガジンの購読はもちろん無料です!

登録はこちらから→SJC-P対策メルマガ問題集
TOP    >>    SJC-P対策Java用語集    >>    変数の初期化

Java用語集:変数の初期化

変数の初期化について:簡単に説明すると

変数の初期化とは、宣言した変数に初期値を設定することです。

変数の初期化について:もっと詳しく

Javaでは変数の種類に応じて、自動的に変数の初期化が行われる場合と、そうでない場合があります。
自動的に初期化されるかされないかの判断は以下の通りです。

  1. クラスのフィールド(メンバ変数)は自動的に初期化される。
  2. メソッドのローカル変数は自動的に初期化されない。

まず最初にクラスの フィールド について見てみます。

フィールドはプログラマが初期化しなくても、自動的に初期化されます。
以下のコードを見てください。

class Test{
   static int i;
   static double d;
   static boolean b;
   static String s;
   
   public static void main( String args[] ){
      System.out.println( "i == " + i );
      System.out.println( "d == " + d );
      System.out.println( "b == " + b );
      System.out.println( "s == " + s );
   }
}
>javac Test.java

>java Test
i == 0
d == 0.0
b == false
s == null

このコードでは変数 i 、 d 、 b 、s には全て最初の値が代入されていません。
つまり全てのメンバ変数について、プログラマが明示的に初期化を行っていませんね。
それでも変数に値がセットされています。

これはクラスのフィールドは自動的に初期化されるからです。
言い換えればコンパイラが勝手に決まった値を代入してくれるのです。
ちなみに、自動的に代入される初期値は、全て以下のように決まっています。

要素の型初期値
booleanfalse
char'\u0000'
byte0
short0
int0
long0L
float0.0f
double0.0d
参照型null
(この表の初期値は、全て リテラル で表示しています。)

このように、フィールドはこれらの値で自動的に初期化されるので、コード中で明示的に初期化しなくても エラーにはなりません。

続いてメソッドの ローカル変数 の場合を見てみましょう。
メソッドのローカル変数の場合、フィールドとは異なり、自動的に初期化されません

次のコードを見てください。

class Test{
   public static void main( String args[] ){
      int i;
      System.out.println( "i == " + i );
   }
}
>javac Test.java

>java Test
Test.java:4: 変数 i は初期化されていない可能性があります。

変数 i に一度も値が代入されていない、つまり初期化されていないと、コンパイルエラーになっています。
フィールドの場合、一度も代入しなくてもコンパイラが自動的に値を代入(初期化)してくれていました。
しかしローカル変数の場合、自動的に初期化されないので、プログラマが明示的に一度値を 代入(初期化)する必要があります。

class Test{
   public static void main( String args[] ){
      int i = 0;
      System.out.println( "i == " + i );
   }
}
>javac Test.java

>java Test
i == 0;

このように、ローカル変数は自動的に初期化されないので、プログラマが明示的に初期化しないと その変数を利用することができないのです。

ところで、初期化はローカル変数の宣言時に行う必要はありません。
その変数の中身を見ようとするまでは、初期化しなくても大丈夫です。

そのため、以下のコードは正しく動作します。

class Test{
   public static void main( String args[] ){
      int i;//宣言時に初期化してない。
      i = 0;
      System.out.println( "i == " + i );
   }
}
>javac Test.java

>java Test
i == 0;

変数の中身をまったく見なければ初期化しなくてもコンパイルエラーになりません。

class Test{
   public static void main( String args[] ){
      int i;
      System.out.println( "i の中身は見ません。" );
   }
}
>javac Test.java

>java Test
i の中身は見ません。

この例では変数 i は一度も初期化されることがありません。
ただこれでは、変数 i を宣言する意味が無いですね。
一応こんなこともできる、ということで紹介しました。



SJC-P対策問題集

Java認定試験( SJC-P/310-035 )対策のメルマガ問題集も好評発刊中! もちろん無料です。
またバックナンバーも見やすくしてオンライン問題集として随時アップしていきます。
受験しない人でも Java の基礎知識を学習するのに最適です。

SJC-P対策参考書

現在、Java認定試験(SJC-P/310-035)対策の参考書は本当にたくさん出版されてます。
ここでは、その中から厳選した本当に役立つ参考書を紹介します。
無駄な出費を抑えるためにも、ぜひ参考にして下さい。

SJC-P対策Java用語集

Java認定試験( SJC-P/310-035 )合格のために必要な Java の用語を集めました。
試験対策にはもちろん、試験以外で Java を学習する際にもご活用下さい。

更新履歴

このサイトの最新情報はここで確認できます。
また、今までこのサイトがどのような軌跡を辿ってきたのかも知ることができます。

Javaを始める人へ

これからJavaを始めようとしているあなたへ。
Javaの勉強を始めるにはどうしたら良いのかを説明しています。
また、初心者に役立つ情報を提供していきます。

Java認定資格の概要

Java認定資格にはどのようなものがあるのか。
資格取得のためにはどのような知識が必要なのか。
その他、資格を取得することのメリットなど、Java認定資格の概要を説明します。

LINK

Javaの勉強に役立つリンク。
その他のプログラミングに関するリンク。
ソフトウェアに関するリンクなど、管理人の主観で集めたリンク集です。
相互リンクも常時募集中!
詳細は以下のページで確認して下さい。

このサイトについて

このサイト「1発合格★Java認定試験!」についての説明です。
サイトで掲載しているソースコードや問題や免責事項などについて説明しています。
初めての人は一度のぞいてみて下さい。

ちょっとひと息

仕事や試験勉強に疲れたら、ここでちょっと一息つきませんか。
一生懸命に打ち込むのも良いけど、たまには何も考えずにゆっくり休むのも良いものです。
たまにはのんびり脳みそをリフレッシュしましょう。

Copyright (C) sjc-p.obx21.com. All Rights Reserved.
このサイトはどのページにでも直接リンクして頂いて結構です。リンク大歓迎!
このページのトップページのURLはhttp://sjc-p.obx21.com/です。

Java関連情報
Spring / JSF(JavaServer Faces) / Hibernate / Jbuilder / TOMCAT入門 / NetBeans / JUnit / Struts
Strutsリファレンス / ANT / TOMCAT / JavaでWebサービス / JDBC / JBoss / J2EE / iアプリ
EJB / アプレット / JavaとXML / JMF(Java Media Framework) / Java3D / Jakarta Commons / JNI / OracleとJava
EclipseでJava入門 / Java RMI, CORBA / JSP/サーブレット入門・初心者向け / Javaネットワークプログラミング / WebLogic