Javaとオブジェクト指向 クラス(4-2)

記事上広告

この記事では、クラスの説明を主に行っており、フィールドやメソッドについての詳細はそれぞれの記事で説明を行います。

クラスとは

Javaではプログラムを書く際にクラスという単位で作成する必要があります。クラスはclassの右側にクラス名を記述し{}(ブロック)で囲んで作成します。

具体的には以下のように作成します。

また、クラスの中にはフィールドメソッドといった部品を作成します。フィールドやメソッドの詳細は後述とします。

クラスは「設計図」です。記述での名称は「」となります。(この記事では、以降は型と表現します)

Javaには8種類の基本データ型があります。例えば、intであれば整数が保存できるといったように基本データ型ではどのようなデータを保存するか決まっています。

しかし、クラスはプログラマーが作成できる型になっており、状態と呼ばれるデータ保存だけでなく、操作とよばれる処理と合わせて利用することができます。

クラス名

クラス名は変数名と同様にプログラマーが自由に設定できる識別子とよばれるものです。他と区別できるようにクラス名の頭文字は大文字にするという暗黙のルールがあります。
※大文字にしなくてもエラーは起こりません

他は変数名を付けるときのルールと同じです。

クラス内にフィールドとメソッドを作成してみる

クラスの中にフィールドとメソッドを簡易で作成してみます。フィールドとメソッドの記述ルールは各々の記事で詳細を説明します。

クラス、フィールド、メソッドを色分けした図が以下になります。

インスタンス(オブジェクト)生成

オブジェクトインスタンスは文脈などで意味合いが変わることもありますが、基本的に同じ意味ととらえてください。(このサイトではオブジェクトとインスタンスは同じ意味で取り扱っています)

Javaはクラスという型からオブジェクト(インスタンス)という実体を作成し、プログラムで利用します。
※以下はインスタンスという用語で説明します

クラスからインスタンスを作成する際には、基本的に2つの手順が必要です。

クラスという型に基づいた変数を用意します。型が基本データ型でない場合は、この変数内にはインスタンスが代入される為、インスタンス変数と呼びます。
※別の記事で説明しますが、インスタンスという実体が変数内に保存されるわけではなく、インスタンスの参照値が保存されます

インスタンス変数の宣言 クラス名 インスタンス変数名 ;
記述例 Taiyaki taiyaki_anko ;

上記で作成したインスタンス変数内にインスタンスを生成し代入します。インスタンスを生成際には「new クラス名()」と記述します。

インスタンスの生成 インスタンス変数名 = new クラス名() ;
記述例 taiyaki_anko = new クラス名() ;

インスタンス変数の宣言と、インスタンス生成は1行にまとめることも可能です。

インスタンスの生成 クラス名 インスタンス変数名 = new クラス名() ;
記述例 Taiyaki taiyaki_anko = new Taiyaki() ;

クラス サンプルプログラム

以下のプログラムを「Taiyaki.java」という名前でworkフォルダ内に保存します。
保存が完了したら、コマンドプロンプトを起動し、コンパイルおよび実行を行ってみましょう。

実行例

C:\work>javac Taiyaki.java

C:\work>java Taiyaki
エラー: メイン・メソッドがクラスTaiyakiで見つかりません。次のようにメイン・メソッドを定義してください。
public static void main(String[] args)
またはJavaFXアプリケーション・クラスはjavafx.application.Applicationを拡張する必要があります

C:\work>

※実行例はコンパイルおよび実行までの例を表示しています。

実行クラスとmain()メソッド

Taiyakiクラスはコンパイルは問題なくできますが、実行時にエラーとなります。これはTaiyakiクラスにmain()メソッドがない為です。第3章までのプログラムは全てmain()メソッドがありましたが、Taiyakiクラスはmain()メソッドがない為にエラーとなっています。

コマンドプロンプトで実行できるクラスは、基本的にmain()メソッドが含まれているクラスで、main()メソッドを持つクラスは実行クラスと表現されます

Taiyakiクラス単体では実行できない為、Taiyakiクラスを利用する実行クラスを作成する必要があります。※もちろんTaiyakiクラスにmain()を作成することもできます

以下のプログラムを「Number25.java」という名前でworkフォルダ内に保存します。
保存が完了したら、コマンドプロンプトを起動し、コンパイルおよび実行を行ってみましょう。

実行例

C:\work>javac Number25.java

C:\work>java Number25
たい焼きの中身はあんこです

※実行例はコンパイルおよび実行までの例を表示しています。

【Taiyaki.javaとNumber25.javaのイメージ図】

クラスを分ける

第3章までは一つのクラスの中でプログラムを記述していました。しかし、プログラムが長くなると可読性が下がったり、記述の変更がしにくくなります。

Javaではクラスに分けることにより、再利用性や可読性を上げることができます。逆に、プログラムが短いとクラスを分けるメリットがあまりない為、Javaはどちらかというと中・大規模向けのプログラミング言語となっています。

あるプログラムをクラス分けする時の基準は「オブジェクト(モノ)単位」で考えることになりますが、いろんな人が書いたプログラムを読んでどのようにクラスを分けているかチェックしてみると勉強になります。

クラスを分けた際のコンパイル

複数のクラスに分けてプログラムを記述する際、コンパイルするクラスは実行クラスのみでもエラーは発生しません。

複数のクラスを利用しているJavaプログラムをコンパイルする際に、該当するクラスのjavaファイルのコンパイルを連動して行います。

例えば、A.java(Aクラス)を利用しているMain.java(Mainクラス【実行クラス】)があり、Main.javaをコンパイルする場合

  1. コマンドプロンプトでMain.javaをコンパイルする(javac Main.java)
  2. Mainクラス内でAクラスを利用している記述があった場合
  3. A.javaのコンパイルを行う(A.classがある場合、コンパイルを行わない場合もある)
  4. A.javaにエラーがなければそのままコンパイルが行われ、エラーがあればエラーが表示されコンパイルを行わない(エラーの際はAもMainもコンパイルされない)

クラス 復習問題

問題
  • 以下の説明で誤っている記述を選んでください。
  • クラス内に記述する部品の組み合わせとして正しいものを選んでください。
  • クラスからインスタンスを作成する際の正しい記述を選んでください。
  • お疲れ様でした。
解答群
    1. Javaではクラスを作成しなくともプログラミングできる
    2. クラスからnew演算子を利用してインスタンスを生成する
    3. 基本的にクラス名の頭文字は大文字で付ける
    4. クラス名の頭文字を数値で始めるとエラーとなる
    1. 「フィールド」「制御構文」
    2. 「フィールド」「インタフェース」
    3. 「制御構文」「メソッド」
    4. 「フィールド」「メソッド」
    1. create クラス名
    2. new クラス名()
    3. create クラス名()
    4. new クラス名

まとめ

  • Javaではクラスを作成する
  • クラスからインスタンスを生成して利用する
  • main()メソッドがあるクラスは実行クラスと呼ばれる
  • クラスには「フィールド」と「メソッド」と呼ばれる部品を作成する
  • インスタンス生成は「new クラス名()」で行う
スポンサーリンク
レクタングル