1日目のゴール
1日目のテーマは
「Javaの“クラス”ってそもそも何者なのか」と「mainメソッドとの関係」を、頭の中でスッキリさせること です。
いきなり「クラス分割しよう!」と言われても、
クラスの正体がふわっとしていると、全部がモヤモヤします。
今日はまず、
クラスとは何かmain はどこに書くのか
「1クラスだけの世界」から「クラスを分ける世界」への入り口
ここを、超やさしく、でも本質は外さずに押さえていきます。
まずは「クラスなしっぽいJava」から見てみる
Javaは必ず「クラスの中」から始まる
Javaのコードは、必ずクラスの中に書きます。
でも、最初に習うコードは、だいたいこんな感じですよね。
public class Main {
public static void main(String[] args) {
System.out.println("こんにちは Java!");
}
}
Java初心者目線だと、こう思うはずです。
public class Main って何?public static void main(String[] args) って何?
とりあえず書けと言われたから書いてるだけ…
今日は、この「とりあえず書いてるだけ」の部分を、
ちゃんと意味のあるものとして理解していきます。
クラスとは「設計図」であり「箱」
「クラス=モノの設計図」とイメージしてみる
クラスを一言で言うと、
「何かのモノの設計図」 です。
例えば、「人」を表すクラスを作るとしたら、
こんなイメージです。
public class Person {
String name;
int age;
void sayHello() {
System.out.println("こんにちは、" + name + "です。");
}
}
Javaここでやっていることを、かみ砕いて説明します。
public class Person { ... }
「Person という名前のクラス(設計図)を定義します」という宣言です。
String name; int age;
Person が持つ「情報(データ)」を定義しています。
名前と年齢ですね。
void sayHello() { ... }
Person ができる「動き(処理)」を定義しています。
ここでは「自己紹介する」という動きです。
この時点では、まだ「Personという設計図」を作っただけで、
実際の「人」は一人も生まれていません。
クラスから「実体(オブジェクト)」を作る
設計図から“本物”を作るイメージ
さっきの Person クラスを使って、
実際に「人」を作ってみます。
public class Main {
public static void main(String[] args) {
Person p = new Person();
p.name = "太郎";
p.age = 20;
p.sayHello();
}
}
Javaここでの流れを、丁寧に追ってみましょう。
Person p = new Person();Person という設計図から、実体(オブジェクト)を1つ作っています。p は「Person型の変数」で、中身は「Personの実体」です。
p.name = "太郎";
その人の名前を「太郎」に設定しています。
p.age = 20;
年齢を20に設定しています。
p.sayHello();
「pという人」に自己紹介させています。
中で System.out.println("こんにちは、" + name + "です。"); が実行されます。
ここで大事なのは、
クラス(Person)は「設計図」new Person() で「実体(オブジェクト)」が生まれるmain の中では、その「実体」を使って処理を進める
という役割分担です。
mainメソッドは「アプリのスタート地点」
Javaは「どこから実行を始めるか」を決めないと動けない
Javaのプログラムを実行するとき、
Javaはこう考えます。
「どのクラスの、どのメソッドから始めればいいの?」
その答えが、public static void main(String[] args) です。
public class Main {
public static void main(String[] args) {
System.out.println("ここからプログラムが始まる");
}
}
Javaこの main メソッドには、特別なルールがあります。
クラスの中に書かれていることpublic static void main(String[] args) という形で書かれていること
この形のメソッドを、Javaは「スタート地点」として認識します。
つまり、
クラスはたくさんあってもいい
でも、「実行の入り口(スタート)」は main で決まる
という構造になっています。
「mainクラス」と「その他のクラス」の関係
mainは“司令塔”、他のクラスは“役割を持った部品”
さっきの Person の例をもう一度見てみましょう。
public class Person {
String name;
int age;
void sayHello() {
System.out.println("こんにちは、" + name + "です。");
}
}
Javapublic class Main {
public static void main(String[] args) {
Person p = new Person();
p.name = "太郎";
p.age = 20;
p.sayHello();
}
}
Javaここでの役割分担は、こうなっています。
Person クラス
「人」という概念を表すクラス。
名前・年齢というデータと、「挨拶する」という動きを持っている。
Main クラスの main メソッド
「アプリ全体の流れ」を決める司令塔。
Personを作って、値を入れて、メソッドを呼ぶ。
大事なのは、
main の中に全部の処理を書き込むのではなく、
「役割ごとにクラスを分けて、main はそれらを組み立てる側に回る」
という考え方です。
1日目では、
「クラスを分ける意味」を、まずこのレベルで理解しておけば十分です。
まずは「全部mainに書いたバージョン」を見てみる
クラス分割前の“ごちゃっとしたコード”
クラス分割の良さを感じるには、
あえて「分けていない状態」を見るのが一番早いです。
例えば、「2人の自己紹介をするプログラム」を
全部 main の中に書くと、こうなります。
public class Main {
public static void main(String[] args) {
String name1 = "太郎";
int age1 = 20;
System.out.println("こんにちは、" + name1 + "です。年齢は" + age1 + "歳です。");
String name2 = "花子";
int age2 = 25;
System.out.println("こんにちは、" + name2 + "です。年齢は" + age2 + "歳です。");
}
}
Java動きとしては問題ありません。
でも、すでにちょっとイヤな感じがします。
同じようなコードが2回出てくる
人が増えるたびに、同じパターンをコピペすることになる
「人」という概念がバラバラに散らばっている
この状態から、「クラス分割」していきます。
同じ処理を「Personクラス」にまとめる
重複している“人の情報+挨拶”を1つのクラスにする
さっきのコードを、Person クラスを使って書き直してみます。
public class Person {
String name;
int age;
void introduce() {
System.out.println("こんにちは、" + name + "です。年齢は" + age + "歳です。");
}
}
Javapublic class Main {
public static void main(String[] args) {
Person p1 = new Person();
p1.name = "太郎";
p1.age = 20;
Person p2 = new Person();
p2.name = "花子";
p2.age = 25;
p1.introduce();
p2.introduce();
}
}
Javaここでの変化を、しっかり感じてほしいです。
「人の情報+挨拶の仕方」が Person クラスにまとまったmain の中から、「人としてのロジック」が消えたmain は「誰を作って、どの順番で挨拶させるか」だけを考えればよくなった
これが、クラス分割の一番シンプルな効果です。
1日目のミニアプリ:簡単な「自己紹介アプリ」
仕様を言葉で決める
1日目の仕上げとして、
こんなミニアプリを作ってみましょう。
Personクラスを作る
Mainクラスのmainで、Personを2人作る
それぞれに名前と年齢を設定する
2人に順番に自己紹介させる
コードはこうなります。
public class Person {
String name;
int age;
void introduce() {
System.out.println("こんにちは、" + name + "です。年齢は" + age + "歳です。");
}
}
Javapublic class Main {
public static void main(String[] args) {
Person p1 = new Person();
p1.name = "太郎";
p1.age = 20;
Person p2 = new Person();
p2.name = "花子";
p2.age = 25;
p1.introduce();
p2.introduce();
}
}
Java実行すると、こんな感じの出力になります。
こんにちは、太郎です。年齢は20歳です。
こんにちは、花子です。年齢は25歳です。
ここまで動かせたら、
「クラスを分ける意味」と「mainとの関係」が、かなりクリアになっているはずです。
今日いちばん大事な“頭の中の図”
クラスとmainの関係を、こうイメージしてほしい
1日目で絶対に持って帰ってほしいイメージは、これです。
クラス
何かを表す「設計図」。
データ(フィールド)と動き(メソッド)をセットで持つ。
main メソッド
「アプリのスタート地点」であり、「司令塔」。
必要なクラスのオブジェクトを作って、使って、処理の流れを組み立てる。
そして、
クラスはたくさんあっていいmain は基本的に1つ(または「スタート用」が1つ)main は「全部自分でやる人」ではなく、「クラスたちに仕事を振る人」
この感覚が入っていれば、
2日目以降の「クラスをどう分けるか」「メソッドをどこに置くか」が、
一気に理解しやすくなります。
次のステップでは、
Personのようなクラスをもう少し増やして、
「役割ごとにクラスを分ける」練習をしていきましょう。
もう、クラスにビビる段階は抜けてるよ。

