Java
2022.08.25
【超入門】Javaのclass(クラス)とは?基本的な使い方を網羅!
2023.11.15

Javaプログラミング学習をするうえで、「classってなに?」と悩んでいる方も多いのではないでしょうか?


「Javaのclass(クラス)とは?」

「クラスファイルの作成・実行方法は?」


といった疑問に対して、本記事ではJavaのclass(クラス)について初心者エンジニア向けに詳しく解説していきます。



※本記事で紹介するサンプルコードは、Java18で動作確認しています。


1.Javaのclass(クラス)とは?

Javaのclass(クラス)とは、オブジェクト指向プログラミングの基本的な概念のひとつで、オブジェクトが持つ属性やメソッドを定義します。

「オブジェクトがどんなもので、何をするのか」を定義することから、よく設計図に例えられます。

2.クラスの中身


クラスにはどんなことを記述するのか中身を見てみましょう。

主にフィールド、メソッド、コンストラクタを定義します。それぞれ具体的に説明します。

①フィールド

フィールドと呼ばれるメンバ変数は、オブジェクトの属性や状態を表す変数です。


車で例えてみましょう。車は排気量、燃費、走行距離などの情報を持っており、これがフィールドです。フィールドを宣言することにより、そのオブジェクトがどのような属性を持っているかを定義できます。 

②メソッド

メソッドには、オブジェクトの機能や操作を記述します。車で例えてみると、「走る」「止まる」「クラクションを鳴らす」といった操作がメソッドになります。

③コンストラクタ

コンストラクタは、クラスのインスタンス生成時に実行される処理のことです。コンストラクタを使用すると、メンバ変数を初期化できるので、最初に変数を定義しておけます。



3.クラスの書き方


クラスの中身を理解したところで、クラスの書き方を見てみましょう。

クラスを定義する場合、次のように書きます。

class クラス名{
    //ここにフィールドやメソッドなどを記述する
    
}

classのあとにクラス名を記述し、{ から } までのブロック内に、フィールドやメソッド、コンストラクタなどを定義します。

①クラスの命名規則

Javaのクラスには以下のような命名規則があります。


・先頭文字は大文字、それ以降は小文字

・先頭文字に数字は使用不可

・単語区切りは大文字

例)Car、RentalService


②クラスの修飾子

クラスの修飾子とは、クラスへのアクセスを制御するJavaの予約語です。

修飾子をまとめると以下のようになります。

アクセス修飾子説明
public制限はなく、どこからでもアクセス可能
protected同一パッケージ内、またはサブクラスからのみアクセス可能
なし同一パッケージ内のみアクセス可能
private同一クラス内でのみアクセス可能

これらの違いを理解したうえで、クラスへのアクセス制限を設定する必要があります。



4.クラスを使ってみよう


では、具体的にクラスの使い方を解説していきます。

①クラスを作成する

まず「Car」というクラスを作成します。

class Car{
    //フィールド
    private int fuel;           //燃料
    private int consumption;    //燃費

    //コンストラクタ(初期値を設定)
    Car(int fuel,int consumption){
        this.fuel = fuel;
        this.consumption = consumption;
    }

    //メソッド
    //運転
    public void run(int mileage){
        this.fuel -= mileage / consumption;
    }

    //燃料計の表示
    public void dispFuelGauge(){
        System.out.println("残量:" + this.fuel + "ℓ");
System.out.println("残量:" + this.fuel + "L");

    }
}

Carクラスには、フィールドとして「fuel」、「consumption」、メソッドとして「run」と「dispFuelGauge」、コンストラクタを定義しています。


Carクラスは燃料と燃費を保持する変数、「運転する」動作と「燃料計を表示する」動作を表すメソッド、変数を初期化するコンストラクタを記述しています。

②オブジェクトを生成する

設計図であるクラスを作成したので、次は実体を表すオブジェクトを生成してみましょう。

class App {
    public static void main(String[] args) {
        //インスタンス化
        Car car = new Car(70,10); //燃料70Lℓ、燃費10km/Lを設定
    }
}

ここでは、車の初期設定値として、燃料70L、燃費10km/Lを設定しています。

③メソッドを実行する

オブジェクトが生成されたので、メソッドを実行してみましょう。

オブジェクト名.メソッド名(引数);

とすることで、メソッドを実行できます。

car.run(50);    	//50km走行する
car.dispFuelGauge();    //燃料計を表示

最後に、サンプルコードのメソッドを実行してみましょう。

class App {
    public static void main(String[] args) {
        //インスタンス化

        Car car = new Car(70,10); 		//燃料70Lℓ、燃費10km/Lを設定
        car.run(50);			//50km走行する
        car.dispFuelGauge();    	//燃料計を表示
    }
}

class Car{
    //フィールド
    private int fuel;           //燃料
    private int consumption;    //燃費

    //コンストラクタ(初期値を設定)
    Car(int fuel,int consumption){
        this.fuel = fuel;
        this.consumption = consumption;
    }

    //メソッド
    //走行
    public void run(int mileage){
	//燃料の残量を計算
        this.fuel -= mileage / consumption;
    }

    //燃料計の表示
    public void dispFuelGauge(){
	System.out.println("残量:" + this.fuel + "L");
    }
}

実行結果:

残量:65L

Carクラスに、燃料70L、燃費10km/Lの初期値を設定しています。


50km走行したので、燃料消費量は5Lで、残量は70L – 5Lの65Lとなります。

燃料計は残量を表示するので、65Lと表示されていますね。

5.一歩進んだクラスの使用方法

ここまではクラスの基本的な使い方を説明してきましたが、ここからは一歩進んだクラスの使用方法について説明します。

①final修飾子

クラスにおけるfinal修飾子の機能は、クラスを継承できなくすることです。


final修飾子を使うケースとしては、「そのクラスがすでに完成している」「クラスを継承させたくない」などがあります。


Javaのクラスは誰でも継承でき、メソッドをオーバーライドできるので、クラス制作者は意図通りに使用させる配慮が必要です。


クラスをfinal指定するには以下のように記述します。

final class クラス名{
    //処理
}

以下のように、final修飾子を指定したComputerクラスを継承しようとするとコンパイルエラーになります。

final class Computer{
    //処理
}

class Tablet extends Computer{
    //処理
}

エラー:

The type Tablet cannot subclass the final class Computer

②static修飾子

staticは、クラスをインスタンス化せずにメソッドや変数に直接アクセスできる修飾子です。「クラス名.メンバー名」の形式でアクセスできます。


フィールド変数やメソッドにstatic修飾子を付けたメンバーのことを、「静的フィールド」、「静的メソッド」と呼びます。


サンプルコードで確認してみましょう。

class App {
    static String stafield = "これは静的フィールドです";
    static void Introduction(){
        System.out.println("これは静的メソッドです");
    }
    public static void main(String[] args) {
        System.out.println(App.stafield);
        App.Introduction();
    }
}

実行結果:

これは静的フィールドです
これは静的メソッドです

クラスをインスタンス化せずに、フィールドやメソッドを直接アクセスできることがわかりますね。


静的フィールドの値を変更すると、すべてのインスタンスに影響します。静的フィールドを多用すると、クラス間の依存が強くなり、コードの可読性が低下する点に注意が必要です。


そのため、静的フィールドは読み取り専用の用途で利用することが推奨されています。



6.クラスファイルの作成・実行


ここからは、クラスファイルの作成・実行について見ていきましょう。

①Javaファイルを作成

Javaファイルの作成ルールに、ファイル名は 「クラス名.java」 にするルールがあります。


例えば、次のようなプログラムのファイル名は、App.javaとなります。

class App {
    public static void main(String[] args) {
        System.out.println("Hello");
    }
}

②コンパイルして.classファイルを作成

Javaファイルは、「人間だけが理解できる言語で記述されている」ため、「コンピュータが理解できる言語」に翻訳する必要があります。この翻訳する作業を「コンパイル」といいます。


Javaファイルをコンパイルする方法は、コマンドプロンプトなどで、次のように入力しましょう。

javac Javaファイル名

実際にApp.javaをコンパイルする場合は、以下のようになります。

javac App.java

コンパイルが成功すると、「App.class」ファイルが作成されます。

③実行

Javaを実行するには以下の通りです。クラスファイル名は拡張子の.classを付けずに指定します。

java クラスファイル名

App.classを実行する場合は、コマンドプロンプトで次のように入力します。

java App

コマンドプロンプトに「Hello」と表示されたら、プログラム実行は成功です。




この記事をシェア