【Java入門】配列と初期化について
  • facebookページ
  • twitterページ
  • 2017.09.09

    【Java入門】配列と初期化について

    配列の宣言と初期化

    Java言語に限らず、プログラミングを行う際にはどの言語でも必ず変数を用いることになります。

    多くの場合、変数には宣言と初期化が必要です。宣言とは、ある変数をこれから使えるようにする、と宣言し、その変数のためにメモリ上に適切なサイズの領域を確保することです。そして、初期化とは、最初にその領域に値を代入し、使えるようにすることです。

    言語の種類にってよっては、宣言を省略することも可能ですが、そのような言語の場合、最初に値が代入された段階で、宣言と初期化がなされたとみなされます。

    Javaで変数を使う際には、必ず宣言と初期化をしなくてはいけないという決まりになっています。

    普通の変数の初期化

    例えば、int型の変数aを使えるようにするには、以下のように

    としなくてはなりません。これにより、はじめて整数型変数aが使えるようになります。その後、

    のように値を代入すると、初めて変数aが使えるようになります。変数を宣言し、最初に初期値を代入することを初期化と言います。

    もしも、この初期化を行わずにaの値を元にして何らかの演算処理などを行おうとすると、例外が発生し、プログラムが強制終了されてしまいます。

    Javaの配列変数は自動的に初期化される

    ただ、配列の場合は少し事情が異なります。例えば、配列の宣言は、以下のように行います。

    これらはそれぞれ、長さ10の整数型配列であるn、長さ5の実数型配列dの宣言です。この状態で、値は0で自動的に初期化されるのです。

    つまり、配列変数に関しては、初期化を省略することが可能なのです。

    Java言語は、C言語をもとにして作られた言語なのですが、C言語では、配列を宣言した状態では値が初期化されることは無く、宣言と初期化の二度処理をしなくてはならず、大変面倒でした。

    Java言語はその教訓を活かして、プログラマーの手間を省けるように工夫されているのです。

    なぜ初期化が必要なのか

    変数の初期化が必要な理由は、もしも初期化をしない状態でその変数を用いて演算処理を行おうとすると、例外(実行時エラー)が発生し、プログラムがとまってしまうからです。

    ただし、前述の通り、配列変数の場合は例外です。配列変数は、配列変数を宣言した状態で、初期化が行われています。

    配列以外の変数の場合は、一つだけ値を設定すればよいので楽ですが、配列の場合数が多いので、初期化をするのは大変です。そのため、Java言語では、宣言をした状態で、0などのデフォルトの値が設定されるようになっており、初期化の手間を最小限にできるような仕組みがあらかじめ用意されているのです。

    ちなみに、配列の値が文字列の場合は、空文字列(くうもじれつ)となります。これは、中身が空っぽの文字列と言う意味で、文字列自体は存在するものの、長さが0、つまり何も書かれていない空っぽの文字列という意味です。

    データが何も無いというnullとは明確に意味が違いますので、注意が必要です。

    一次元配列の初期化

    Javaでは、配列が自動的に初期化されるものの、配列でも0もしくは空文字ではないあらかじめ決められた値で初期化をしたい場合も少なくありません。そのような場合、配列の一つ一つの値を順次値を代入していくのは大変です。

    そこで、Java言語には、初期化子(しょきかし)という、配列変数の初期化を容易にする非常に便利な仕組みを用意してくれています。例えば、

    のように宣言すると、自動的に以下のような処理をしたのと同じことになります。

    配列変数の初期化

    文字列の場合も同じです。例えば、

    といったようにすると、

    つまり、初期化子を使えば、配列の宣言と初期化を同時に行うことが出来ます。これにより、ソースコードが非常に短く出来ると共に、すっきりとして大変読みやすくなります。

    長さが極端に長い配列は別として、あらかじめ数がわかっていて、初期化する値が決まっている場合は、この初期化子を用いると、配列の扱いが手軽に出来ます。

    多次元配列の初期化

    初期化子は、一次元配列のみならず、多次元配列でも用いることが出来ます。例えば、整数の配列を

    二次元配列の初期化

    とすると、以下と同じ処理を行ったことになります。これにより、3×3の格子の中に初期値が自動設定された状態で配列変数numを利用することが可能なのです。

    なお、このような初期化は不揃いでもかまいません。例えば、

    ジャグ配列の初期化

    とすると、不揃いな形の配列が出来上がります。

    これも二次元配列の一種なのですが、一般にこのようなタイプの配列をジャグ配列(jagged array)といいます。ただ、このジャグ配列という言葉は正式な呼び名ではなく、マイクロソフトが開発したC#言語の用語のものです。

    ちなみに、ジャグ(jagged)とは、「ギザギザ」という意味で、文字通りぎざぎざの形状をした配列のことです。

    初期化の際の注意点

    このように大変便利な配列の初期化子なのですが、使用する際には制約があります。それは、配列を宣言する段階で、初期化する全て値が決まっていることです。

    また、初期化しなくてはならないようなデータがたくさんある場合も不向きです。理論的には、100個でも、1000個でも、初期化子を用いて宣言と初期化を行うことは可能ですが、プログラマーがそれを行うことはほぼ不可能でしょう。初期化子を用いる場合、データはあくまでもプログラマーが視認できる範囲内の数に抑えておく必要があります。

    なので、配列の初期化を行う場合には、通常のように宣言と初期化の処理を分けるか、それとも初期化子を用いるかは、状況に応じて臨機応変に変えていく必要があります。

    ただ、初期化子を含むJavaのソースコードは気をつけないと複雑になりがちです。そのため、配列以外にもコメントをつけるなどして、少しでもソースコードを読みやすくする工夫も必要です。

    Javaの配列と初期化の利点

    以上がJavaの配列の初期化の説明です。Java言語には、プログラマーが配列変数を扱う際に宣言と初期化をするたに様々な仕組みが用意されていることがわかります。プログラマーはこの仕組みを有効に活用すると、読みやすく、かつデバッグのしやすいプログラムを作ることが可能なのです。


    ポテパンが提供するサービスについて

    本メディア「ポテパンスタイル」を運営する株式会社ポテパンは、エンジニアキャリア領域で複数サービスを提供しています。

    ポテパンフリーランス

    ポテパンフリーランス

    フリーランスエンジニアの方に高単価案件をご紹介しております。弊社ではフリーランス案件を常時300件ほど保有しており、その中からあなたに適した案件をご案内いたします。また、これから独立してフリーランスになる方の無料個別相談も承っております。フリーランスになった後の案件獲得方法やお金面(税金や保険など)についてお答えいたします!

    ポテパンキャリア

    ポテパンキャリア

    エンジニア職専門の転職エージェントです。ポテパンキャリアでは、技術のわかるエージェントがあなたの転職をサポートします。エージェント自身がエンジニアなので、あなたと同じ目線で仕事内容や今後のキャリアについて一緒に考えることができます。

    ポテパンキャンプ

    ポテパンキャンプ

    ポテパンキャンプでは、RubyにてゼロからオリジナルのECサイトを作り上げてる3ヶ月間の実践型カリキュラムを提供しております。すでに本スクールの卒業生は、エンジニア職として様々な企業様に就職しております。なお、本スクールは受講料10万円と他社スクールに比べ格安となっており、またポテパンからご紹介させていただいた企業へ就職が決まった場合は、全額キャッシュバックいたします。



    株式会社ポテパンは、企業とエンジニアの最適なマッチングを追求しています。気になるサービスがあれば、ぜひ覗いてみてください!

    ポテキャンバナー ポテキャリバナー

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア

    話題の記事

    まだデータがありません。

    関連ワード

    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE