Javaのコンストラクタとメソッドの違いとは?初心者向けに徹底解説
コンストラクタはオブジェクトを生成・初期化するために使われる特別なメソッドである一方、メソッドは特定の処理(ステートメント)を実行するために使われます。一見似ている両者ですが、役割や動作には明確な違いがあります。
ここでは、コンストラクタとメソッドの重要な違いを7つの観点から表形式で整理して解説します。
| No. | 項目 | コンストラクタ | メソッド |
|---|---|---|---|
| 1 | 目的 | オブジェクトの生成と初期化を行うために使用される。 | 特定の処理やステートメントを実行するために使用される。 |
| 2 | 呼び出し方 | システムによって暗黙的に自動呼び出しされる。 | プログラムコードの中で明示的に呼び出す必要がある。 |
| 3 | 呼び出しタイミング | newキーワードでオブジェクトを生成した瞬間に呼び出される。 | プログラム内でそのメソッドが呼ばれたときに実行される。 |
| 4 | 戻り値の型 | 戻り値の型を指定することはできない。 | 戻り値の型を持つことができる(voidも含む)。 |
| 5 | 対象オブジェクト | まだ存在しないオブジェクトを初期化する。 | 既に存在するオブジェクトに対してのみ呼び出せる。 |
| 6 | 名前のルール | クラス名と同じ名前にしなければならない。 | クラス名と同じ名前にはできない。 |
| 7 | 継承 | サブクラスに継承されない。 | サブクラスに継承される。 |
コンストラクタとメソッドの比較サンプルコード
それでは、実際のコードでコンストラクタとメソッドの動作の違いを確認してみましょう。次の例では、コンストラクタでフィールドnumを3に設定し、init()メソッドで5に変更しています。
JavaTester.java
public class JavaTester {
int num;
JavaTester(){
num = 3;
System.out.println("Constructor invoked. num: " + num);
}
public void init(){
num = 5;
System.out.println("Method invoked. num: " + num);
}
public static void main(String args[]) {
JavaTester tester = new JavaTester();
tester.init();
}
}このコードでは、new JavaTester() の時点でコンストラクタが自動的に呼び出され、続けて tester.init() を呼び出すことでメソッドが実行されます。
実行結果
Constructor invoked. num: 3 Method invoked. num: 5
このように、コンストラクタはオブジェクト生成時に自動的に一度だけ呼び出されるのに対し、メソッドは必要なタイミングで何度でも明示的に呼び出せる点が大きな違いです。それぞれの特性を理解して使い分けることで、より安全で読みやすいJavaプログラムを書くことができます。
-
Javaのlist()メソッドとlistFiles()メソッドの違いをわかりやすく解説
java.ioパッケージに含まれるFileクラスは、システム上のファイルやディレクトリ(パス名)を抽象的に表現するためのクラスです。特定のディレクトリ内に存在するすべてのファイルやフォルダの一覧を取得したい場合、このクラスが提供するlist()メソッドとlistFiles()メソッドを利用できます。 両者の主な違いは次のとおりです。 list()メソッド:指定したディレクトリ内の全ファイル・ディレクトリの「名前」を、String型の配列として返します。 listFiles()メソッド:指定したディレクトリ内の全ファイル・ディレクトリを表すFileオブジェクトを、File型の配列として返します
-
JavaでのArrayListとHashSetの違いを徹底解説!使い分けのポイントも紹介
HashSetとArrayListは、どちらもJavaコレクションフレームワークにおいて最も重要なクラスの一つです。それぞれ特徴が異なるため、用途に応じた適切な使い分けが求められます。本記事では、ArrayListとHashSetの主な違いを6つの観点から比較し、実際のサンプルコードとともにわかりやすく解説します。ArrayListとHashSetの違い一覧No.項目ArrayListHashSet1実装インターフェースListインターフェースを実装しています。Setインターフェースを実装しています。2内部構造内部的には配列(動的配列)を使って実装されています。内部的にはHashMapを使って