【Java】 newとは?クラスとは?をゆるくカンタンに説明する

どうも。yasuです。
本日友人から「javaがわからない」という相談(?)を受けました。
とは言ってもLineの一文にあっただけで、私も「がんばれ〜」的なことを言っただけなのですが(笑)

私も最初javaを勉強し始めた時何にもわからなかったなぁと思いたち、
自分のわからなかったところは多くの同志(文系プログラマ)もわからないのではないかということで、
ちょっとjavaで個人的に理解に苦しんだところを書いていきます。

さて、その第一弾として「new」です。

f:id:AddyPlusy:20160908211057p:plain

javaを勉強し始め、苦しみながらもなんとか if や for 文を乗り越えた初学者の前に突如として来訪する使者。new。
Date date = new Date(); とか
List list = new ArrayList(); とか。

なんだかよくわからないけどnewとか出てきたし!なんだよ!と当時私は思った記憶があります。
当時とは言ってもつい半年ほど前のことなのですが(笑)


結論から言うと、
newはクラスからインスタンスを生成する時に使うもの。なのですが、
それが理解できたら苦労はしなかったので、説明していきます。


まず、クラスとはなんでしょうか。
難しいことはさておき、クラスのことをやんわり説明していきます。


クラスとは設計書です。
クラスとは金型です。


クラスは設計書であり金型なので、実体はありません。
つまり便利な機能を盛り込んだクラスを使いたくても、そのままクラスを使うことはできません。


例えば、車の定義を盛り込んだクラスを作ったとします(そんなクラスありえるのか)
この車クラスには、エンジンを制御するメソッドやハンドル操作をするメソッドがあります。


しかし、このような車クラスを作ったとしても、それは車の設計書(金型)なので車そのものではありません。
車そのものではなくただの金型であり設計書なので、クラスはそのまま使えません。

public static void main(Strings[] args) {
  // こうは使えない!
  Car.startEngine();  
}

では、その車の設計書(金型)にあるエンジンメソッドを使うにはどうすればいいかというと、
その金型でプレスして何個も車の実体を生産すればいいですよね??

その金型でプレスするときに使うのが「new」なのです。

まさにjavaもnewを使ってクラスから何個も実体を生産することができます。
車を3つ実体化したいときには以下のようにすればいいんです。

Car car1 = new Car();
Car car2 = new Car();
Car car3 = new Car();

このようにクラス(設計書)から実体を生成することをインスタンス化と言います。

f:id:AddyPlusy:20160908211100p:plain


より実用的なnewの例をあげます。

配列よりも便利な「リスト」を使うにはnewする必要があります。
これは、リストクラスという便利なクラス(設計書)からnewしてインスタンス化して使うためです。

import java.util.ArrayList;

public class ListSample {
    public static void main(String[] args) {
        //リストクラスをインスタンス化
        ArrayList<String> list = new ArrayList<String>();

        list.add("どうも");
        list.add("yasuです。");

        for (String str : list) {
            System.out.println(str);
        }
    }
}
どうも
yasuです。

このようにListクラスからnewをして使うことで、
いくつでもListクラスのインスタンスを生成することができます。

プログラムを書いている時に、「3つのリストを使ってごにょごにょしたい!」
という場面に遭遇すれば、ただListからnewを3回呼び出して3個の変数に受け取ってあげれば良いのです。



あとは、Dateクラスもよく使います。
日付を扱うためのクラスです。こちらも勿論newして使いますよ

import java.util.Date;

public class DateSample {
    public static void main(String[] args) {
        //Dateクラスをインスタンス化
        Date date = new Date();

        //Dateインスタンの便利なメソッドを使って現在日時を取得する
        String today = date.toString();

        System.out.println(today);
    }
}
Thu Sep 08 23:45:14 JST 2016