第十四章 
 〜クラス編〜
 コンストラクタ
 コンストラクタと言うのは、オブジェクトを作るときに呼び出すメソッドです。
今まで一切触れてなかったと思うですが、実はnewの後に来るものが
コンストラクタだったのです〜。
 ではメソッドとどこが違うかと言うですとコンストラクタには、引数が無いのです。
これは実際にサンプルを見てもらった方が分かりやすいと思うので早速見てみるです〜
Rei14_1
 1:
 2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 18:
 19:
 20:
 21:
 22:
 23:
 24:
 25:
 26:
 27:
 28:
 29:
 30:
 31:
 32:
 33:
 34:
 35:
 36:
 37:
 38:
 39:
 40:
 41:
 42:
 43:
 44:
 45:
 46:
 47:
 48:
 49:
 50:
 51:
 52:
 53:
 54:
class Rei14_1{
    public static void main(String[] args){
        System.out.println("キャスト1:新しいパソコン欲しいな〜");
        System.out.println("キャスト2:あなた当たって砕けろで自作しなさい");
        System.out.println("キャスト1:それなら、思い切って当てちゃうよ〜");
        
        JisakuPC jisaku = new JisakuPC();
        jisaku.setCpu(3.2);
        jisaku.setHdd(300);
        jisaku.setMemory(4096);
        jisaku.setDrive("DVDマルチプラスドライブ");
        jisaku.getStatus();
    }
}

class JisakuPC{
    private double cpu;      //単位はGHz
    private int hdd;         //単位はGB
    private int memory;      //単位はMB
    private String drive;    //CD-ROMドライブなどで使うドライブ

    public JisakuPC(){
        cpu = 0.0;
        hdd = 0;
        memory = 0;
        drive = "無し";
        
        System.out.println("自作するための準備完了");
    }

    public void setCpu(double cpu){
        this.cpu  = cpu;
    }

    public void setHdd(int hdd){
        this.hdd = hdd;
    }

    public void setMemory(int memory){
        this.memory = memory;
    }

    public void setDrive(String drive){
        this.drive = drive;
    }

    public void getStatus(){
        System.out.println("完成したパソコンの性能は次のようになったです〜");
        System.out.println("CPU:    " + cpu    + "GHz");
        System.out.println("HDD:    " + hdd    + "GB");
        System.out.println("Memory: " + memory + "MB");
        System.out.println("Drive:  " + drive);
    }
}

 このプログラムを実行してもらえば分かるですが、7行目のJisakuPC jisaku = new
JisakuPC();
を実行すると、自作するための準備完了って表示されたはずです。これは
まぎれも無くコンストラクタが呼ばれた証拠です〜。
 実際コンストラクタでは、フィールドの値の初期化などをするときに使うです〜そし
て最初の方でも言ったようにコンストラクタには戻り値が無いです〜。その証拠に23行
目のpublic JisakuPC()には戻り値が無いですね!
 ここで1つ疑問になってくるのが、今までのサンプルプログラムではコンストラクタ
が書かれていないのではないかと言う疑問が出てくるです〜。実はコンストラクタを
書かないと、処理無しのコンストラクタが呼びだされるです。逆に言えば自分で書いた
場合は、この処理無しのコンストラクタは呼びだされないです。このコンストラクタの
ことをデフォルトコンストラクタと呼ぶです〜。
 もう1つ気になる事と言えば戻り値は無いとさっき言ったですね!それでは引数はあ
るのかと言うことです。ずばり言うですと、引数はあるです〜。なぜなら()がついてる
からですね!だから普通のメソッドと同じように値を渡すことができるです〜。
これは、オブジェクトを作ったと同時にフィールドを指定した値で初期化したいときな
どに使うです〜。さらにもう1つここで言っちゃうですと、コンストラクタもオーバー
ロード
することが可能です〜。オーバーロードはメソッドのときにやった異なる引数な
らば同じ名前のメソッド名を定義できる機能だったですね!
 ではそのサンプルを見てみたいと思うです〜
Rei14_2
 1:
 2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 18:
 19:
 20:
 21:
 22:
 23:
 24:
 25:
 26:
 27:
 28:
 29:
 30:
 31:
 32:
 33:
 34:
 35:
 36:
 37:
 38:
 39:
 40:
 41:
 42:
 43:
 44:
 45:
 46:
 47:
 48:
 49:
class Rei14_2{
    public static void main(String[] args){
        System.out.println("キャスト1:新しいパソコン欲しいな〜");
        System.out.println("キャスト2:あなた当たって砕けろで自作しなさい");
        System.out.println("キャスト1:それなら、思い切って当てちゃうよ〜");
        
        JisakuPC jisaku = new
            JisakuPC(3.2, 300, 4096, "DVDマルチプラスドライブ");
        jisaku.getStatus();
    }
}

class JisakuPC{
    private double cpu;      //単位はGHz
    private int hdd;         //単位はGB
    private int memory;      //単位はMB
    private String drive;    //CD-ROMドライブなどで使うドライブ
    
    public JisakuPC(){
        cpu = 0.0;
        hdd = 0;
        memory = 0;
        drive = "無し";
        
        System.out.println("自作するための準備完了");
    }

    public JisakuPC(double cpu, int hdd, int memory, String drive){
        this.cpu = cpu;
        this.hdd = hdd;
        this.memory = memory;
        this.drive = drive;
        
        System.out.println("自作と思いきやすでに完成状態");
    }
    
    public void setCpu(double cpu){ this.cpu  = cpu; }
    public void setHdd(int hdd){ this.hdd = hdd; }
    public void setMemory(int memory){ this.memory = memory; }
    public void setDrive(String drive){ this.drive = drive; }

    public void getStatus(){
        System.out.println("完成したパソコンの性能は次のようになったです〜");
        System.out.println("CPU:    " + cpu    + "GHz");
        System.out.println("HDD:    " + hdd    + "GB");
        System.out.println("Memory: " + memory + "MB");
        System.out.println("Drive:  " + drive);
    }
}

 7行目の文は長くなってしまったので2行に分けて書いたです〜。8行目に書かれてい
るコンストラクタを呼び出すと引数ありの方のコンストラクタがちゃんと呼び出されて
いるですね!それと37行目から40行目にかけてはサンプルプログラムが長くなってしま
うので1行にして書いたです。


今回のポイント
@ newの後ろに書いたものがコンストラクタです。コンストラクタはオブジェクトを
  作成したときに呼び出される。
A コンストラクタには戻り値は無いです〜
B コンストラクタもメソッド同様、オーバーロードできる


コンピュータ用語です〜
 今回のサンプルは、自分でパソコンを作るときをイメージしてみて作ってみたので
Javaとは関係の無い専門用語がいくつか出てきてしまったのでそれの解説をするです〜

 CPU:   CentralProcessingUnitの略でCPUとは一言で言うですとパソコンの頭です。
      サンプルプログラムで3.2と書いたですが、この数値が
      高ければ高いほど頭がいいです〜。つまり処理速度が速くなるです〜
      人間で言うと知能指数みたいなものです。

 HDD:  HardDiskDriveの略で、ファイルやソフトなどを記憶しておく物です〜。
      大きければ大きいほどたくさん入るです〜。

 メモリ: ファイルやソフトを開いたときに記憶しておく場所ですね!コンピュータは
      このメモリというところに記憶してプログラムを処理していくです〜。
      変数の値もこのメモリに格納されていくです〜。

 ドライブ:ここで言うドライブとは、コメントでもあったようにCD-ROMドライブなど
      で使われるドライブです〜。今ではDVDも焼けるドライブが出てるですね!

TOPに戻る   Java講座に戻る