Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

Javaプログラミング初心者の方は、「クラス」「メソッド」「クラスメソッド」など似たような言葉が多すぎて混乱してしまいがちです。

本記事では、Javaの学習を始めたばかりの方向けに、「クラス」「メソッド」「クラスメソッド」それぞれの意味合いの違いについてご紹介していきます。

Javaのクラスとは


Javaなどのオブジェクト指向プログラミング言語では、「クラス」という概念を理解することが最初の難関として挙げられます。

クラスは「設計図」として例えられることが多いのですが、簡単にいうと役割毎に必要な機能をまとめたもののことを指します。

クラスとインスタンス

Javaにはクラスと混乱する概念として「インスタンス」の存在が挙げられます。

先程クラスが設計図と説明したように、基本的にクラスに定義した機能はインスタンス化して利用する必要があります。

建築に例えると、クラスが設計図で、インスタンスが実際のビルということです。

クラスに定義されるもの

クラスに定義されるものとして「フィールド」と「メソッド」が挙げられます。

フィールドは、データの値を保管するために利用する機能です。

対してメソッドは、処理を記述する機能で、クラスの振る舞いを定義することが出来ます。

Javaのメソッドとは


Javaのメソッドは上述したように、クラスの中で処理を定義する機能のことを指します。

もう少し詳細を確認してみると、メソッドには「クラスメソッド」と「インスタンスメソッド」が存在します。

クラスメソッド

クラスメソッドは、クラスに紐付けられたメソッドであり、クラス全体に関連する処理を定義します。

別名「静的メソッド」とも呼ばれており、「static」と明示する必要があります。

クラスメソッドからは直接後述するインスタンスメソッドやインスタンスフィールドを呼び出すことは出来ず、クラスをインスタンス化して呼び出すことが必要です。

記述法

アクセス修飾子 static 戻り値 メソッド名(引数) {
  // 処理内容
}
ポテパンダの一言メモ

クラスメソッドは別名staticメソッドとも呼ばれています。

インスタンスメソッド

インスタンスメソッドは名前の通り、インスタンスに紐付けられたメソッドであるため、クラスからインスタンスを生成しないと利用することが出来ません。

別名「動的メソッド」とも呼ばれるインスタンスメソッドでは、インスタンス固有の処理を定義していきます。

基本的にJavaでは、役割を明確に分けることが特徴となるため、クラスメソッドで定義しなければいけない理由がない限り、インスタンスメソッドを利用するのが一般的です。

記述法

アクセス修飾子 戻り値 メソッド名(引数) {
  // 処理内容
}

クラスメソッドとインスタンスメソッドの違いをJavaサンプルコードで確認


ではここから実際にクラスメソッドとインスタンスメソッドの違いを、Javaのサンプルコードで確認していきましょう。

クラスメソッドの利用サンプル

まずクラスメソッドの動きからですが、staticメソッドとして定義することにより、呼び出し側でインスタンス化を行わずにメソッドを利用することが出来るようになります。

public class Main {

	public static void main(String[] args) {
			Sub.classMethod();
			// Sub.instanceMethod(); インスタンスメソッドは直接呼び出せない
	}
}

class Sub {
	int num = 2;
	static String str = "クラスフィールドとして定義しました。";
	
	public static void classMethod() {
		System.out.println("クラスメソッドから出力しています。");
		// instanceMethod(); インスタンスメソッドは呼び出せない
		// System.out.println(num); インスタンスフィールドは呼び出せない
		System.out.println(str);
	}
	
	public void instanceMethod() {
		System.out.println("インスタンスメソッドから出力しています。");
	}
}

実行した結果が下記です。

クラスメソッドから出力しています。
クラスフィールドとして定義しました。

4行目がクラスメソッドを呼び出している処理ですが、インスタンス化の工程を実施せず、いきなりクラスから直接メソッドを呼び出していることをご確認頂けます。

ちなみに15,16行目でコメントアウトしているように、同じクラス内に定義されたフィールドやメソッドの場合でも、インスタンスフィールドとインスタンスメソッドをクラスメソッドから直接呼び出すことは出来ません。

ただし、11行目でクラスフィールドとして定義している変数に関しては、17行目で利用しているようにクラスメソッドの中から呼び出すことが可能です。

インスタンスメソッドの利用サンプル

次はインスタンスメソッドの利用方法についてサンプルコードで確認しておきましょう。

基本的にJavaのプログラム開発では、今回のサンプルのようなインスタンスメソッドが利用されます。

public class Main {

	public static void main(String[] args) {
			Sub subClass = new Sub();
			subClass.instanceMethod();
			subClass.classMethod(); // staticの呼び出し方ではないためIDEで警告は出るが、実行は可能
	}
}

class Sub {
	int num = 2;
	static String str = "クラスフィールドとして定義しました。";
	
	public static void classMethod() {
		System.out.println("クラスメソッドから出力しています。");
		System.out.println(str);
	}
	
	public void instanceMethod() {
		System.out.println("インスタンスメソッドから出力しています。");
		System.out.println(num);
	}
}

実行結果が下記です。

インスタンスメソッドから出力しています。
2
クラスメソッドから出力しています。
クラスフィールドとして定義しました。

インスタンスメソッドに関しては、呼び出し元で一度インスタンスを生成し、作成したインスタンスからメソッドを呼び出す必要があります。

4行目がインスタンス化を実施している部分で、生成されたインスタンスから「インスタンス名.メソッド名()」の形式で、5行目のようにインスタンスメソッドを呼び出しています。

11行目で定義している変数はインスタンスフィールドですが、21行目で利用しているように、もちろんインスタンスメソッド内部から参照することが可能です。

ポテパンダの一言メモ

6行目に記述しているように実はクラスメソッドはインスタンス化したオブジェクトからでも呼び出すことが可能です。
ただし、正式な呼び出し方ではないため、上述したクラスメソッドの呼び出し方で利用するようにしましょう。

さいごに: Javaのクラスメソッドを使いこなそう


本記事では、Javaの「クラス」「メソッド」「クラスメソッド」という3つのワードについて、初心者向けに解説してきました。

クラスやインスタンスの説明では、クラスに定義されたメソッドはインスタンス化してからしか利用出来ないと記述されていることも多いのですが、クラスメソッドならインスタンス化せずに利用することが可能です。

ただしオブジェクト指向の考え方では、機能を細分化することが望ましいとされているため、クラスメソッドはあくまで補助的な役割と認識し、基本はインスタンスメソッドを利用して開発出来るようチャレンジしてみてください。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。