一番かんたんなJava入門

これからJavaを始めようという人の為の超入門サイトです。丁寧、簡単にこだわった解説なので初心者にぴったりです。

【Java】 コンストラクタって何? this( )の意味

time 2013/06/28

sponsored link

インスタンスの初期状態

 今回はインスタンスの初期状態を自由に操ることが出来るコンストラクタというものについて解説します。その為に【Java】オブジェクトって何?から連載でいじっているHumanクラスを使います。現時点で、Humanクラスはこんな状態です。

Human.java

public class Human{
	String name;
        int birthday;
        int manpukudo;

        void eat(){
               this.manpukudo += 60;
        }
}

 ご覧のようにこのHumanクラスには4つのメンバが存在します。
3つの変数 name,birthday,manpukudo と
1つのメソッド eat( ) です。
 このHumanクラスをインスタンス化します。Humanクラスと同じパッケージ内に作ったHumanTestクラスでやります。

HumanTest.java

public class HumanTest{
	public static void main(String[] args){

		Human human;             //①
                human = new Human();     //②

	}
}

 ①Human型の変数humanを宣言。
 ②new演算子を使ってHumanクラスをインスタンス化して、(その参照を)変数humanに代入。
 これで、Humanオブジェクトが作られました。ですが、名前と生年月日と満腹度というパラメータを持つオブジェクトを作ったものの、それぞれのパラメータの値についてはまだ何も触っていません。
 この状態でそれぞれのパラメータの値が一体どうなっているのか?出力してみましょう。

HumanTest.java

public class HumanTest{
	public static void main(String[] args){
		Human human;
                human = new Human();

                System.out.println("名前:" + human.name);
                System.out.println("生年月日:" + human.birthday);
                System.out.println("満腹度:" + human.manpukudo);
	}
}

 ↑こんな感じで、インスタンスを作って何もせずにそのメンバ変数を全部出力しちゃいます。実行結果がこちら↓

const1

 名前はnullです。これは「null」という名前を勝手につけられたわけではありません。nullというのは空っぽを意味するプログラミング用語です。
 生年月日は0。
 満腹度も0です。
 なぜこうなるかと言うと、クラスをインスタンス化(new)した時に、何の値も入れられていないメンバ変数は、勝手に初期化されるようになっているからです。その勝手に初期化する際に、intやdaubleなどの数値系の型は0(及び0.0)に、boolean型はfalseに、Stringのような参照型はnullに初期化されるというルールがあるからです。

コンストラクタを呼ぶ

 上記のように、オブジェクトを作った時に勝手にデフォルト値に初期化されるメンバ変数を、勝手に初期化させるのではなく、自分で値を決めて初期化する為に使うのが、コンストラクタというやつです。このHumanクラスで言うと、名前はnobuo、生年月日は1977年1月1日、満腹度は50の状態でオブジェクトを作りたいといった時に使います。
 さっそく書いていきます。

Human.java

public class Human{
	String name;
        int birthday;
        int manpukudo;

        Human(){}

        void eat(){
               this.manpukudo += 60;
        }
}

 「Human( )」これがコンストラクタです。見ての通り、クラス名そのままです。クラス名の後ろに『( )』をつけただけです。『( )』がついているのでメソッドと見た目は変わりません。メソッドと同じような形で、そのメソッド名が大文字小文字も含めて一語一句クラス名と同じものがコンストラクタとして認識されると思っていたらいいです。メソッドとの大きな違いは、コンストラクタは戻り値は返せないということです。返せないので戻り値がないことを意味する「void」も書かなくていい、というか書いてはいけません。コンストラクタを書く場所は、メンバ変数とメンバメソッドの間に書くのが分かりやすくていいと思いますが、別にどこでもいいです。
 上記の状態ではまだコンストラクタの中身は定義していません。メソッドと同じようにそのコンストラクタが呼ばれたらどういう処理をすればいいのかを後ろの{ }の中に書いていきましょう。

Human.java

public class Human{
	String name;
        int birthday;
        int manpukudo;

        Human(){
                this.name = "ノブオ"; 
                this.birthday = 19770101;
                this.manpukudo = 50;
        }

        void eat(){
                this.manpukudo += 60;
        }
}

 オブジェクトって何? 〔メンバメソッドについて〕 〔thisについて〕で説明しましたが「this」は「このインスタンス」という意味でした。thisを使ってこのインスタンスのフィールドにアクセスしています(「フィールド」というのは「メンバ変数」と同義です。同じものでもいろんな言い方があるのでややこしいですね・・)。
 これでこのコンストラクタを使えば、名前がノブオ、生年月日が1977年1月1日、満腹度50のオブジェクトを一発で作れます。が、コンストラクタを使うというのはどういうことでしょう?メンバメソッドの「eat( )」は

human.eat()

で使えましたが、コンストラクタは

human.Human()

とはやりません。じゃあ、どうやって使うのか?こうでしょ。↓

HumanTest.java

public class HumanTest{
	public static void main(String[] args){
		Human human;
                human = new Human();
	}
}

 ん?コンストラクタをどこで使ったの?と思いますよね。実は「new Human()」でコンストラクタが呼ばれているんです。逆にいえば、「new Human()」はそのクラスのコンストラクタを呼ぶ為の記述なんです。その証拠に、どんなオブジェクトが出来ているかさっきと同じように出力させてみましょう。

HumanTest.java

public class HumanTest{
	public static void main(String[] args){
		Human human;
                human = new Human();

                System.out.println("名前:" + human.name);
                System.out.println("生年月日:" + human.birthday);
                System.out.println("満腹度:" + human.manpukudo);
	}
}

 ↑このHumanTestクラスはさっきのデフォルト値が出力された時と一切変えていません。ただ、Humanクラスにノブオを生みだすコンストラクタを加えただけです。「new Human( )」で、そのコンストラクタが呼ばれてノブオが生まれているはずです。実行してみましょう。

const2

 ノブオが生まれました。「new Human( )」でコンストラクタが呼ばれた証拠です。
 けど、さっきまでコンストラクタなんて書いていませんでしたよね。コンストラクタがないのに「new Human( )」とすることで、(名前はnullでしたが)確かにインスタンスを作ることができました。なぜかというと、コンストラクタが書いていないクラスには、デフォルトコンストラクタというのが初めから搭載されているんです。どこにも書いていないけど、在るんです。
 デフォルトコンストラクタが呼ばれると、全てのフィールドがデフォルト値の状態でそのインスタンスを生みだします。だから、さっきコンストラクタをまだ書いていない状態で「new Human( )」としてインスタンスを作った時は、デフォルトコンストラクタが呼ばれて、名前null、生年月日0、満腹度0のインスタンスが生まれたんです。

コンストラクタに引数を渡す

 お気づきの方は多いかもしれませんが、コンストラクタというのは決してノブオを生むために使うのではありません。ノブオであろうと、タカシであろうと、アヤネであろうと、生み出したい名前・状態のインスタンスを生み出せるコンストラクタじゃないと意味がありません。ノブオを何人も作っても仕方ないですから。
 なので、上記のノブオ生成用コンストラクタを、どんな人間でも自由に生み出せるコンストラクタに作り直します。簡単です。引数を使えばいいんです。コンストラクタもメソッドと同じく、引数を渡して処理させることができます。コンストラクタを呼ぶ時に、生み出したい人間の名前と生年月日の情報を引数として渡せばいいんです。
 まずは、コンストラクタがどんな引数を受け取ることができるかを定義しましょう。メソッドと同じです。

Human.java

public class Human{
	String name;
        int birthday;
        int manpukudo;

        Human(String name, int birthday){
               
        }

        void eat(){
                this.manpukudo += 60;
        }
}

 このようにHumanクラスのコンストラクタの定義部分の( )の中に、受け取るべき変数を宣言します。仮引数というやつです。メソッドと同じですね(参考:メソッドの引数について)。複数の場合はこのように「,」で区切ればいくつでも引数を受け取れるようにできます。生み出したい人間の名前と生年月日の値を受け取れるように、第一引数に「String」第二引数に「int」を受け取るようにします。仮引数の名前はそれぞれnameとbirthdayにします。
 では、その受け取った値をどうするか?を定義します。

Human.java

public class Human{
	String name;
        int birthday;
        int manpukudo;

        Human(String name, int birthday){
                this.name = name;
                this.birthday = birthday;
                this.manpukudo = 50;
        }

        void eat(){
                this.manpukudo += 60;
        }
}

 このように、引数として渡されたそれぞれの値をそれぞれのフィールドに代入しています。気をつけなければいけないのは、緑字の「name」は仮引数のnameを、青字の「name」はフィールドのnameを指しているということ。birthdayも同じです。初心者は混乱しがちですが、これが理解できれば「this」の意味がより理解できるので、頭を整理してみてください。仮引数のnameとフィールドのnameを区別するために「this」を使うわけです。仮引数の変数名を全然違うものに変えてしまえば混乱しないかもしれませんが、

Human(String a, int b)

仮引数の変数名をこんな意味のないものにしてしまうと、可読性が落ちますよね?aって何だったっけ?ってことになり兼ねません。もちろんプログラム的には問題ないですが。
 これで、このコンストラクタは、渡された第一引数(String型)をフィールドnameに代入して、第二引数(int型)をフィールドbirthdayに代入してインスタンスを作るようになりました。フィールドmanpukudoは誰であろうと50が初期値になるようにしておきました。
 しかし、コンストラクタに引数を渡すには、どうするのか?簡単です。コンストラクタを呼ぶ「new Human( )」の「( )」の中に引数を記述することで、コンストラクタに引数を渡すことができるんです。
 では、コンストラクタに引数を渡して、いろんなインスタンスを生みだしましょう。

HumanTest.java

public class HumanTest{
	public static void main(String[] args){
		Human human = new Human("ノブオ", 19770101);
                Human human2 = new Human("タカシ", 19801231);
                Human human3 = new Human("アヤネ", 20110101);
	}
}

 これで3人分のオブジェクトを作ることができました。本当にノブオとタカシとアヤネになっているか、また出力してみましょう。ちょっと長いですが、一人ずつ名前と生年月日と満腹度を出力します。

HumanTest.java

public class HumanTest{
	public static void main(String[] args){
		Human human = new Human("ノブオ", 19770101);
                Human human2 = new Human("タカシ", 19801231);
                Human human3 = new Human("アヤネ", 20110101);

                System.out.println("名前:" + human.name);
                System.out.println("生年月日:" + human.birthday);
                System.out.println("満腹度:" + human.manpukudo);
                System.out.println("");

                System.out.println("名前:" + human2.name);
                System.out.println("生年月日:" + human2.birthday);
                System.out.println("満腹度:" + human2.manpukudo);
                System.out.println("");

                System.out.println("名前:" + human3.name);
                System.out.println("生年月日:" + human3.birthday);
                System.out.println("満腹度:" + human3.manpukudo);
	}
}

 これを実行すると、

const3

 ちゃんと3人ともコンストラクタに渡した通りの名前と生年月日になっています。このようにコンストラクタに引数を渡すことでインスタンスの初期状態を自由に操ることが出来るようになります。
 ただし、メソッドと同じで、引数を受け取るようにコンストラクタを定義したら、きっちり過不足無く定義通りの型の引数をコンストラクタに渡さないとコンパイルエラーになります。例えば、

human = new Human(19770101, "ノブオ");

 こんなことしたらダメです。引数の順番が逆ですよね。
 それともう一つ注意があります。
 コンストラクタを自分で書くと、それまで存在していたデフォルトコンストラクタは消えてしまうんです。どういうことか?ちょっと説明。
 コンストラクタを書いていない時は、デフォルトコンストラクタというのがこっそり存在していると先ほど言いました。コンストラクタを書いていないクラスをnewすると、デフォルトコンストラクタが呼ばれて全てのフィールドはデフォルト値の状態でインスタンスが作られると。

Human human = new Human();

 Humanクラスにコンストラクタを書いていなくても、上記のようにnewすればインスタンスが作られるのはデフォルトコンストラクタのおかげです。デフォルトコンストラクタを呼ぶにはnewする時に引数を渡してはいけません。デフォルトコンストラクタは引数を受け取らないコンストラクタということです。
 引数を受け取って処理するコンストラクタを自分で書いた結果、引数なしで呼べていたデフォルトコンストラクタが消えてしまうことになります。結果的に、引数を受け取れるコンストラクタを書いたクラスを、引数を渡さずにnewしてしまうと「コンストラクタに渡すべき引数が抜け落ちてますよ」ということでコンパイルエラーになってしまうんです。
 困りました。名前と生年月日が分からないとオブジェクトを作れないんです。もしかしたら名前不明とか生年月日不明とかっていうオブジェクトを作るかも知れないのに。。しかし、案ずる無かれ、実はコンストラクタのオーバーロードという手があるんです。

コンストラクタのオーバーロードとthis( )について

 コンストラクタもメソッドと同じようにオーバーロードすることができます(参考:メソッドのオーバーロードって何?)。
 さっそくやってみましょう。デフォルトコンストラクタが消えて無くなりましたので、その代りに引数を受け取らないコンストラクタを書き加えます。

Human.java

public class Human{
	String name;
        int birthday;
        int manpukudo;

        Human(String name, int birthday){   //1つ目のコンストラクタ
                this.name = name;
                this.birthday = birthday;
                this.manpukudo = 50;
        }
        Human(){                            //2つ目のコンストラクタ
                this.name = "不明";
                this.birthday = 0;
                this.manpukudo = 50;
        }

        void eat(){
                this.manpukudo += 60;
        }
}

 これで、Humanクラスをnewする時(コンストラクタを呼ぶ時)、String型とint型の引数を渡せば、1つ目のインストラクタが呼ばれて、引数を渡さずにnewすると2つ目のコンストラクタが呼ばれるようになりました。もし名無しで生年月日不明の人間オブジェクトを作りたくなったら、今まで通り、引数に何も入れずにnewすればいいことになります。その場合、名前は「不明」、生年月日は「0」、満腹度は「50」の状態でインスタンスが作られるようにしました。
 こうして2つのコンストラクタができたわけですが、やっている処理はよく似ていると言えば似ていますよね。ただ単にフィールドに与えられた値を代入しているだけですから。まだ2つだけなら大したことないですが、もし3つも4つも引数が違うだけで処理内容のよく似たコンストラクタをズラズラ書くのはなんとなく不効率な感じがします。そんな時使えるのが、

this()

です。
 これまた初心者に厳しいところです。「this( )」は、「このインスタンス」を意味する「this」とは全く関係ありません。「this( )」は「このクラスのコンストラクタ」という意味なんです。「( )」が付いただけで全然違うものを指します。けど、「このクラスのコンストラクタ」と言っても、このクラスには2つのコンストラクタがあります。どっちのことを言っているのか?「this( )」は1つ目のコンストラクタを指します。
 1つめ、つまり一番上に書いたコンストラクタのことです。このHumanクラスで言うと、Stringとintの二つの引数を受け取るコンストラクタです。

訂正:this( )が指すのは1つ目とか2つ目とか書いた順番は関係ありません。メソッドのオーバーロードと同じように引数から自動的に判断されて適当なコンストラクタが呼ばれるようになっています。

 以下の文章の中で明らかに正しくない記述は薄字にしてあります。
 本文を半端に訂正するとかえって読みにくく、理解しづらくなる恐れがある為、そして間違った解釈との比較でかえって理解が深まるかと思うので、極力訂正前の状態も残しつつ、最後にまとめて訂正します。何度か読み返して、僕が何をどう勘違いしていたのか理解できればバッチリです。

 とりあえず「this( )」をどうやって使うのかやってみましょう。

Human.java

public class Human{
	String name;
        int birthday;
        int manpukudo;

        Human(String name, int birthday){
                this.name = name;
                this.birthday = birthday;
                this.manpukudo = 50;
        }
        Human(){
                this("不明", 0);
        }

        void eat(){
                this.manpukudo += 60;
        }
}

 こうです!
 ちょっと頭パニックになりがちなところですが、理解できますでしょうか?2つ目のコンストラクタの中で1つ目のコンストラクタを呼んでいる状態ですね。こうすることで、2つ目のコンストラクタの中身が非常にスッキリしました。
 では、理解を深める為にもう一つコンストラクタを作ります。今度は満腹度も操作できるコンストラクタを作りましょう。

Human.java

public class Human{
	String name;
        int birthday;
        int manpukudo;

        Human(String name, int birthday){
                this.name = name;
                this.birthday = birthday;
                this.manpukudo = 50;
        }
        Human(){
                this("不明", 0);
        }
        Human(String name, int birthday, int manpukudo){
                this(name, birthday, manpukudo);   //①
        }

        void eat(){
                this.manpukudo += 60;
        }
}

 さあ、ちょっと難しくなってきました。これ、何をしているか分かりますでしょうか?頭パニックの人も落ち着いてよく見てください。これではコンパイルエラーになります。「this( )」は一番上のコンストラクタを指すんでした。その一番上のコンストラクタはStringとintを引数として受け取れます。しかし、①では「this( )」に対して3つの引数を渡してしまっています。これでは「引数が間違っています」ということでコンパイルエラーです。(訂正:コンパイルエラーになるのは、3つの引数を受け取るコンストラクタが存在しない為)

 う~ん、せっかくよく似たコンストラクタを書く時に便利な「this( )」を覚えたのに、引数を増やせないんじゃ使えないじゃん。
 どうしましょう?
 賢明な読者様ならお気づきですよね?
 一番引数が多いコンストラクタを一番上に持ってきたらいいんです!
 一番上に、↓このコンストラクタを置きましょう。3つの引数を受け取って、それぞれのフィールドに代入するコンストラクタです。(訂正:場所はどこでもOK)

        Human(String name, int birthday, int manpukudo){
                this.name = name;
                this.birthday = birthday;
                this.manpukudo = manpukudo;
        }

 2番目に、nameとbirthdayの2つの引数を受け取って、それぞれのフィールドに代入するコンストラクタを置きます。

        Human(String name, int birthday, int manpukudo){
                this.name = name;
                this.birthday = birthday;
                this.manpukudo = manpukudo;
        }
        Human(String name, int birthday){
                this(name, birthday, 50);
        }

 「this( )」は1つ目の、引数を3つ受け取るコンストラクタのことです。(訂正:とは限りません)そこに受け取ったnameとbirthdayをそのまま渡して、第三引数には「50」を渡しています。
 3番目に、引数を受け取らないコンストラクタを置きます。

        Human(String name, int birthday, int manpukudo){
                this.name = name;
                this.birthday = birthday;
                this.manpukudo = manpukudo;
        }
        Human(String name, int birthday){
                this(name, birthday, 50);
        }
        Human(){
                this("不明", 0, 50);
        }

 3つ目のコンストラクタは引数を渡さずにnewされた時に、名前「不明」、生年月日「0」、満腹度「50」でインスタンスを作るコンストラクタです。
 以上、3つのコンストラクタを作ってみました。
 では、実際にこれらのコンストラクタを使ってオブジェクトを作ってみたいと思います。そしてまた出来たインスタンスのそれぞれのフィールドを出力します。

HumanTest.java

public class HumanTest{
	public static void main(String[] args){
		Human human = new Human("ノブオ", 19770101, 100); //引数3つ
                Human human2 = new Human("アヤネ", 19801231);     //引数2つ
                Human human3 = new Human();                      //引数なし

                System.out.println("名前:" + human.name);
                System.out.println("生年月日:" + human.birthday);
                System.out.println("満腹度:" + human.manpukudo);
                System.out.println("");

                System.out.println("名前:" + human2.name);
                System.out.println("生年月日:" + human2.birthday);
                System.out.println("満腹度:" + human2.manpukudo);
                System.out.println("");

                System.out.println("名前:" + human3.name);
                System.out.println("生年月日:" + human3.birthday);
                System.out.println("満腹度:" + human3.manpukudo);
	}
}

 これを実行すると、

const4

出来ました。3つ定義したそれぞれのコンストラクタが呼ばれているのが分かりますでしょうか?このようにnewする時に、後ろの『( )』の中に渡す引数の数や型によって適したコンストラクタを呼ぶことができます。もちろん定義したものと違う引数を渡してしまうとコンパイルエラーになります。一番多く引数を受け取るコンストラクタを一番上に書いておいて、2つ目以降は「this( )」を上手く使って書いていけばコンストラクタが多くなっても効率よく書けると思います。
 さあ、異常に長かったですが、コンストラクタについてはこれで終わりです。どんなしょうもないクラスでもいいので自分で作ってインスタンス化してみたら理解が深まると思うので、挑戦してみてください。お手本を写すなんてことしても全く勉強になりません。自分で考えて書くのが大事です。こんなクラスを作ってみよう!と自分で設計してみるのが何より勉強になると思います。
 次回は「static」についてちょっと詳しくやります。

改めて訂正
 僕はなぜかthis( )が一番上のコンストラクタを指すものだと勘違いしていました。正しくは、書いてある順番なんて関係はなく、this( )に渡された引数によって実際に呼ばれるコンストラクタは変わります。
 上記本文内で書く順番にこだわった記述がありますが、全て間違いということになります(薄字にしてあります)。

 以上の間違いを踏まえて、理解度チェックをいたしましょう。以下の二つのコードを見比べてみて下さい。
 Humanクラスのコンストラクタ部分だけ書いてあります。

Human(String name, int birthday, int manpukudo){ //①
    this.name = name;
    this.birthday = birthday;
    this.manpukudo = manpukudo;
}
Human(String name, int birthday){ //②
    this(name, birthday, 50);
}
Human(){ //③
    this("不明", 0, 50);
}
Human(String name, int birthday, int manpukudo){ //①
    this.name = name;
    this.birthday = birthday;
    this.manpukudo = manpukudo;
}
Human(String name, int birthday){ //②
    this(name, birthday, 50);
}
Human(){ //③
    this("不明", 0);
}

 違いは、3つ目のコンストラクタ内にあるthis( )の引数です。ただしHumanTestクラスによる実行結果は全く同じです。
 
 引数が二つの場合(下の例)は、このthis( )によって呼ばれるのは二つ目のコンストラクタということになります。引数が三つの場合(上の例)は一つ目のコンストラクタが呼ばれます。

 この微妙な違いが理解出来れば、コンストラクタ及びthis( )の使い方に関して理解できていると言えると思います。本文に余計な訂正が入ってしまって読みづらいかも知れませんが、じっくり読んでみて下さい。

P.S 間違いをご指摘していただいたシロさん、ありがとうございました。

sponsored link

Androidアプリを作ろう

コメント

  • おっしゃる通りです。お恥ずかしい。

    ありがとうございます。

    by Nobuo@管理人 €2015/07/17 15:51

  • 「this( )」は1つ目ののコンストラクタを指します。→1つ目のコンストラクタ

    by あさやん €2015/11/16 21:22

  • 質問なのですが…。
    私の認識不足でしたら申し訳ありません。this()は”一つ目のコンストラクタ”ではなく、あくまで引数なしのコンストラクタを呼び出しているのではないでしょうか…?
    仮に
    コンストラクタ(引数)
    コンストラクタ(引数,引数)
    コンストラクタ()
    という順序で定義してあったとしても、this(引数)ならば引数1つのコンストラクタ、
    this(引数,引数)ならば引数2つのコンストラクタ、this()ならば引数なしのコンストラクタを呼び出すものと認識していたのですが、これは間違いでしょうか??

    by シロ €2016/01/11 16:24

  • シロさん、
    そういうのは誰かに聞くよりも、ご自身で試してみるのが一番確実です。
    人間は間違ったり嘘をついたりしますが、プログラミングは正直です。(^^)

    あなたの認識通り動くかどうかを確かめられるコードを自分で考えて書いてみて下さい。その結果、もし僕が間違ってたらまた教えて下さい。

    by Nobuo@管理人 €2016/01/13 10:01

  • 返信ありがとうございます。
    システム上は先日申し上げたように動きますので自分はそう理解していたけれども、それは邪道だったのかなぁ(動作はするけれども、本来の望ましいthisの使い方ではないのかな)…と思いまして、先日質問させて頂きました。
    ご対応頂きありがとうございます。
    再度自分で色々試してみたいと思います。

    by シロ €2016/01/13 14:42

  • シロさん、
    どうやら、一番上というのは関係なさそうですね。混乱させてしまって申し訳ないです。邪道でもなんでもなく、シロさんの認識は正しいと思います。

    要訂正ですね。

    重要なご指摘ありがとうございました。

    by Nobuo@管理人 €2016/01/13 16:22

  • daubleじゃなくてdoubleじゃないですか?細かくてすみません。
    (その勝手に初期化する際に、intやdaubleなどの…の所)

    by sun €2016/02/26 21:24

down

コメントする



CAPTCHA


一番かんたんなJava入門

Androidアプリの作り方

忘備録

私の作ったAndroidアプリ

私の作ったWordPressテーマ

プロに教わるオンライン学習

管理人

Nobuo_CREATE

Nobuo_CREATE

WordPressテーマPrinciple、マテリアルを作ったり、Androidアプリを作ったり、Java入門サイトを作ったり、本を書いたりしています。どうぞよろしく。 [詳細]



sponsored link

オススメ書籍

[オススメpoint]

 この本は全く何も分からない初心者の方にお勧めです。プログラミングをするには覚えなければならない事が無茶苦茶いっぱいありますが、この本は教えてくれる順番、その構成が素晴らしいです。RPGのゲームを作るというストーリーにのっとってちょっとずつ難しいことを教えてもらえます。
 無機質で膨大なデータが載っているような本は読む気にならないという方は、こういうストーリー仕立ての本でチャレンジしてみてはいかがでしょうか?(注:RPGを作る為の本ではありません。)

[オススメpoint]

 ある程度、Javaを読み書きできるようになったら、オブジェクト指向について学ぶべきです。本書は、抽象的で分かったような分からんようなオブジェクト指向について、非常に分かりやすい例を出して説明してくれています。オブジェクト指向とは何なのか?という本質を掴むのにこれほど適した本はないと思います。オブジェクト志向の理念を理解できれば、より効率のいいコードをより楽に書けるようになるはずです。Java上級者を目指すなら必読の一冊!

只今、急拡大中

ゲームを作りたい人専門

個人フットサル予約サイト

ガチ専門

JavaからのRuby on Rails入門

JavaからのRuby on Rails入門