お疲れ様です。はるさらと申します。
Javaを学び始めると必ず登場するキーワードが「インスタンス化」と「new」です。
クラスとオブジェクトの関係を理解するうえで欠かせない概念ですが、
最初は少し抽象的に感じる方も多いと思います。
この記事では、「インスタンス化とは何か」「newの意味と使い方」「具体的なコード例」
を順を追ってわかりやすく解説していきます。
実際の実行結果も確認しながら進めるので、
プログラムの動きをイメージしながら見ていただければ
理解しやすいのではないかと思います。
インスタンス化とは?newでオブジェクトを作る仕組み
Javaでは、クラス(設計図)から実際に使える形を作ることを
「インスタンス化」と呼びます。
このとき使うのが new 演算子です。
クラスをただ定義しただけでは、まだ“設計図”の段階。new を使って初めて、メモリ上に実体(オブジェクト)が生成され、
プログラムで操作できるようになります。
基本の構文
クラス名 変数名 = new クラス名();
たとえば、次のように「Person」クラスを作成してインスタンス化してみましょう。
サンプル①:基本的なインスタンス化の例
public class Person {
String name;
int age;
void introduce() {
System.out.println("私の名前は " + name + " です。年齢は " + age + " 歳です。");
}
public static void main(String[] args) {
// Personクラスのインスタンスを生成
Person p1 = new Person();
// フィールドに値を代入
p1.name = "太郎";
p1.age = 25;
// メソッドを呼び出し
p1.introduce();
}
}
実行結果:
私の名前は 太郎 です。年齢は 25 歳です。
解説:
ここで new Person() が「インスタンス化」を行っている部分です。p1 は「Person型の変数」で、new によってメモリ上に確保された
オブジェクトを参照しています。
このように、new を使うことでクラスを“使える形”にしている、という点が重要です。
コンストラクタとnewの関係
new とセットで登場するのが「コンストラクタ」です。
インスタンス化の際に自動的に呼ばれる特別なメソッドで、
初期化処理を担当します。
サンプル②:コンストラクタを使ったインスタンス化
public class Animal {
String type;
int legs;
// コンストラクタ
Animal(String type, int legs) {
this.type = type;
this.legs = legs;
}
void info() {
System.out.println(type + " は足が " + legs + " 本あります。");
}
public static void main(String[] args) {
Animal dog = new Animal("犬", 4);
Animal bird = new Animal("鳥", 2);
dog.info();
bird.info();
}
}
実行結果:
犬 は足が 4 本あります。
鳥 は足が 2 本あります。
解説:
ここでは new Animal("犬", 4) のように、
引数付きのコンストラクタを呼び出しています。
これにより、インスタンス生成と同時に値の初期設定が可能になります。
業務システムなどでは、このパターンが非常によく使われます。
実務での利用例:複数インスタンスの管理
現実的な開発では、同じクラスを何度もインスタンス化して
リストやマップで管理することがよくあります。
サンプル③:複数のオブジェクトを生成して扱う
import java.util.ArrayList;
import java.util.List;
public class Product {
String name;
int price;
Product(String name, int price) {
this.name = name;
this.price = price;
}
public static void main(String[] args) {
// インスタンスを複数作成
List<Product> products = new ArrayList<>();
products.add(new Product("りんご", 120));
products.add(new Product("バナナ", 150));
products.add(new Product("ぶどう", 300));
// 拡張for文で一覧表示
for (Product p : products) {
System.out.println(p.name + ":" + p.price + "円");
}
}
}
実行結果:
りんご:120円
バナナ:150円
ぶどう:300円
解説:
ここでは、new Product(...) を繰り返し使ってインスタンスを生成し、List に格納しています。
現場ではこのように「データの塊」をオブジェクトで表現し、
コレクションにまとめて処理することが多いです。
代替手法:staticメソッドやシングルトンとの比較
Javaでは、インスタンス化しなくても使える仕組みもあります。
たとえば static 修飾子を使うと、
クラス名から直接アクセス可能です。
サンプル④:staticメソッドを使う例
public class MathUtil {
static int add(int a, int b) {
return a + b;
}
public static void main(String[] args) {
int result = MathUtil.add(3, 5);
System.out.println("結果:" + result);
}
}
実行結果:
結果:8
解説:MathUtil.add() のように呼び出す場合、new は不要です。
一方で、staticメソッドは共通処理やユーティリティに向いており、
状態を持つオブジェクト(name, ageなど)には不向きです。
つまり、
- 状態を持ちたい → インスタンス化して使う
- 単なる計算や共通処理 → staticメソッドでOK
という使い分けが大切です。
よくある間違い・注意点
- インスタンス化し忘れてnullエラー
Person p; p.name = "太郎"; // ← NullPointerException!newをしていないため、pはまだ実体を持っていません。p = new Person();を忘れずに書きましょう。 - コンストラクタの引数違い
new Animal(); // 引数なしのコンストラクタが存在しない場合エラー定義しているコンストラクタと一致する形で呼び出す必要があります。 - メモリの使いすぎ
インスタンスを大量に作りすぎると、メモリ負荷が高まります。
不要になった参照はnullにする、
またはスコープを小さく保つよう心がけましょう。
まとめ
- インスタンス化とは、クラス(設計図)を実際に使える形にすること。
- new演算子を使ってオブジェクトを生成し、メソッドやフィールドにアクセスできるようになる。
- コンストラクタを活用すれば、初期化処理をまとめて書ける。
- staticとの使い分けを意識することで、より効率的な設計が可能になる。
Javaの学習でインスタンス化は避けて通れない基礎部分です。
しっかり理解しておくと、今後のオブジェクト指向設計にも大きく役立ちます。
どなたかのお役に立てば幸いです。
それではまたー!





































