今まで学習してきたことを利用して、Javaプログラムを作ってみる。
今回は人間を表すHumanクラスを作成し、それを元にHuman型のインスタンスを生成し、そのインスタンスのフィールドを表示させるプログラムである。

  1. Humanクラスを定義する

  2. クラスを定義する場合は以下のように記述するのであった。
    修飾子 class  クラス名{
       クラスの定義
    }

    今回は1つのファイルに2つのクラスを定義する。
    Humanクラスはmainメソッドを持たないクラスなのでアクセス修飾子にpublicは使用しない。
    では、実際にHumanクラスを定義してみる。
    class Human{
       クラスの定義
    }
    

    クラス定義に用いるclassというキーワードの後にクラス名であるHumanを記述し、中括弧の中にクラスの定義(フィールドの宣言やメソッドの定義)を書くようにする。

  3. フィールドの宣言

  4. 次にHumanクラスのフィールドを以下の記述法に従って宣言する。
    修飾子 変数の型 変数名;
    

    Humanクラスには名前を入れるためのフィールドとしてString型の変数nameを定義する。
    class Human{
       //名前を入れるためのフィールドnameの宣言
       private String name;
    }
    

    nameフィールドはどこからでも値が書き換えられては困るので、クラスの内部からしかアクセスできないようにアクセス修飾子privateを指定する。
    また、名前は文字列なので文字列を表すString型で定義する。
    ソース(プログラム)では追加した部分を黄色の文字で表している。

  5. コンストラクタの定義

  6. 次はインスタンスを生成する場合に必要なコンストラクタを定義する。
    コンストラクタは以下の形で定義していた。
    アクセス修飾子 コンストラクタ名(引数){
    	処理
    }
    

    今回のプログラムでは、引数つきコンストラクタを定義してインスタンスの生成時にフィールドに値を入れる。
    引数つきコンストラクタを定義しているため、明示的に引数なしコンストラクタを定義しなければ、引数なしコンストラクタを使用することはできない。
    これを踏まえて以下のようにHumanクラスに引数なしと引数つきのコンストラクタを2つ定義する。
    class Human{
       //名前を入れるためのフィールドnameの宣言
       private String name;
    
       //引数なしのコンストラクタを明示的に定義
       public Human(){
       }
       //nameフィールドに値を入れる引数ありのコンストラクタの定義
       public Human( String name ){
          this.name = name;
       }
    }
    

    まず、引数なしのコンストラクタを明示的に記述。普段から明示的に記述する癖をつけておくとよい。
    次に、呼び出された時に引数として渡された値をnameフィールドに入れる処理を行う引数つきコンストラクタを定義している。
    また、this.nameというのは、このクラスで宣言されている各インスタンスの持つnameフィールドを表している。
    このように引数のnameとnameフィールドの区別を行わなければ期待した結果と違う動きをしてしまうことがある。
    【thisについての詳細は[今までのまとめ]の「第9回プログラミング実践」の映像を参照】

  7. メソッドの定義
  8. 最後にメソッドの定義を行う。
    メソッドは以下の様な形で定義していた。
    修飾子 返り値の型 メソッド名(引数){
    	処理
    	return 式;
    }
    

    今回のプログラムでは
    nameフィールドに値を入れるためのsetNameメソッド、
    nameフィールドの値を返すgetNameメソッド、
    nameフィールドの値を表示するためのprintDataメソッドを定義する。
    class Human{
       //名前を入れるためのフィールドnameの宣言
       private String name;
    
       //引数なしのコンストラクタを明示的に定義
       public Human(){
       }
       //nameフィールドに値を入れる引数ありのコンストラクタの定義
       public Human( String name ){
          this.name = name;
       }
    
       //nameフィールドに値を入れるためのsetNameメソッドの定義
       public void setName( String name ){
          this.name = name;
       }
       //nameフィールドの値を返すgetNameメソッドの定義
       public String getName(){
          return name;
       }
       //nameフィールドの値を表示するpringDataメソッドの定義
       public void printData(){
          System.out.println( "名前" + name );
       }
    }
    

今回定義したメソッドはどこからでも呼び出せるように全てpublicで定義している。

【setNameメソッド】
【getNameメソッド】
【printDataメソッド】


これでHumanクラスの定義は終わりである。