手を動かして学ぶ Java入門 (クラスの超基本)
環境構築不要! ブラウザから直接コードを実行できます。
本記事では、Java のクラスの基本の基本、はじめの一歩のところを学びます。
15分くらいで、さくっと終わる記事をめざしています。
(今回はいつもより少し長めです)
シリーズ一覧
- シリーズ
- 手を動かして学ぶ Java入門 (Hello world 編)
- 手を動かして学ぶ Java入門 (数値と演算)
- 手を動かして学ぶ Java入門 (数値と変数)
- 手を動かして学ぶ Java入門 (コメントの書き方)
- 手を動かして学ぶ Java入門 (文と式の違い)
- 手を動かして学ぶ Java入門 (if文)
- 手を動かして学ぶ Java入門 (if-else文、if-elseif文)
- 手を動かして学ぶ Java入門 (文字列の連結)
- 手を動かして学ぶ Java入門 (while文)
- 手を動かして学ぶ Java入門 (break文)
- 手を動かして学ぶ Java入門 (continue文)
- 手を動かして学ぶ Java入門 (for文)
- 手を動かして学ぶ Java入門 (クラスの超基本)
- 手を動かして学ぶ Java入門 (クラス・メソッド)
- 手を動かして学ぶ Java入門 (クラス・フィールド)
- 手を動かして学ぶ Java入門 (クラス・コンストラクタ)
- 手を動かして学ぶ Java入門 (文字列クラス)
- 手を動かして学ぶ Java入門 (静的メソッド)
- 手を動かして学ぶ Java入門 (静的フィールド)
- 手を動かして学ぶ Java入門 (定数の定義)
- 手を動かして学ぶ Java入門 (クラス継承の超基本)
- 手を動かして学ぶ Java入門 (メソッドのオーバーライド)
- 手を動かして学ぶ Java入門 (メソッドのオーバーロード)
続きは近日公開予定!
はじめに
この記事は paiza.IO の「Online Java compiler」を利用しています。
2024/12/17 現在、上記環境の Java バージョンは 18 です。(paiza.IO利用ガイド)
実行したコードは paiza.IO で保存および公開されることがあります。
そのため、個人情報などの機密性の高い情報は、コードとして入力しないようにご注意ください。
詳細は paiza.IO の利用規約およびプライバシーポリシーをご確認ください。
概要
クラスはとても奥が深く、そして難しい概念です。
熟練のプログラマでも、クラス設計にはいつも頭を悩ませている…と思います。
クラスと切っても切れない関係なのが オブジェクト指向 です。
ちなみに、Java は オブジェクト指向プログラミング 言語です。
ただ、オブジェクト指向の考え方は、プログラム入門者には敷居が高いといえます。
よって、本記事ではオブジェクト指向については解説しません。
とにかく、クラスの 具体的 なことを中心に解説します。
クラスのことが分かってきたら、ぜひオブジェクト指向についても学んでみましょう。
クラスとは
クラスとは、具体的に いうと…
- フィールド (変数)
- メソッド (関数)
この2つが集まったものです。
フィールド(変数) は、数値などを保存しておく箱のようなものです。
変数については 以前の記事 でも学びましたね。
例えば 変数 a の宣言と初期化は、
int a = 123;
こんな感じで書きます。
メソッド(関数) は、プログラムの実際の処理を書きます。
足し算や引き算などの計算をしたり、その結果を画面に出力したり、などなどです。
例えば print というメソッドは、
void print() {
System.out.println("a = " + a);
}
こんな感じで書きます。
さて、先ほどの変数(a) とメソッド(print) を持つクラスを作ってみましょう。
クラスの名前は Sample とします。
public class Sample {
private int a = 123;
public void print() {
System.out.println("a = " + a);
}
}
これが Sample クラスになります。
なんだか、フィールドやメソッドのところに
- public
- private
といったキーワードがついていますが、今はお気になさらず…
それでは、さっそくこのクラスを動かしてみましょう。
コードは変更せずに、そのまま「実行(Ctrl-Enter)」ボタンを押してください。
注意:コードは2ファイルあります。上部のタブで切り替え可能です。
(表示がおかしいときは「コードの再読み込み」ボタンを押してみてください)
いかがでしたでしょうか? 「出力」のところに
a = 123
と表示されたら成功です。
コードの解説
今回はクラスの 超基本 の記事ということで、かなりざっくりと解説していきます。
とにかく、クラスの雰囲気を感じていただけたらな、と思っています。
【Sampleクラスの宣言】(Sample.java)
public class Sample {
private int a = 123;
public void print() {
System.out.println("a = " + a);
}
}
【Sampleクラスを使う】(Main.java)
Sample sample = new Sample();
sample.print();
アクセス修飾子
Sample クラスには、3か所 public または private というキーワードが使われています。
これらは、
- アクセス修飾子
といいます。
ただし、今回の記事ではアクセス修飾子については解説しません。
とりあえず、
- クラス → public
- フィールド → private
- メソッド → public
と決め打ちしていただいて OK です。
(本当に簡単にいうと、public は外部に公開する、private は外部に公開しない、という意味になります)
- 関連 : アクセス修飾子の基本
クラスの宣言
次はクラスの宣言を見ていきましょう。
public class Sample {
^^^^^ <--- クラス宣言のためのキーワード
}
class は、クラスを宣言しますよ、というキーワードです。
このキーワードがないとクラス宣言ができません。
次に好きなクラスの名前をつけます。
public class Sample {
^^^^^^ <--- 任意のクラス名
}
今回は Sample と名づけました。
最後に、カッコ { ... } で囲みます。
public class Sample {
^ <--- クラスの開始
}
^ <--- クラスの終了
このカッコで囲まれた範囲がクラスの中身になります。
メソッド
メソッドとは、プログラムの実際の処理をまとめたものです。
例えば、足し算や引き算などの計算をしたり、その結果を画面に出力したり、などなどです。
Java 以外の言語ではメンバ関数と呼ぶこともあります。
public class Sample {
...
public void print() {
^^^^^^^^^^^^ <--- メソッドの宣言!
...
}
}
メソッドは、
- 戻り値の型
- メソッド名
- ( パラメータ )
- { メソッド本体 }
の順番で宣言します。
public void print() {
^^^^ <--- 戻り値の型
...
}
void とは「戻り値がない」ことを宣言します。
(戻り値については、今回は説明を割愛します)
public void print() {
^^^^^ <--- 任意のメソッド名
...
}
メソッド名には好きな名前がつけられます。
今回は print という名前にしました。
public void print() {
^^ <--- パラメータ
...
}
今回、パラメータは必要ないので ( ) の中身は空にしています。
(パラメータについては、今回は説明を割愛します)
最後に、カッコ { ... } で囲みます。
public void print() {
^ <--- メソッドの開始
...
}
^ <--- メソッドの終了
このカッコで囲まれた範囲がメソッドの本体になります。
フィールド
フィールドとは、クラスが持つ変数のことです。
Java 以外の言語ではメンバ変数と呼ばれることもあります。
フィールドは、以前の記事 で解説した変数と同じように宣言できます。
public class Sample {
private int a = 123;
^^^^^^^^^^^^ <--- フィールドの宣言!
...
}
宣言したフィールドは、メソッドから自由に使うことができます。
public class Sample {
...
public void print() {
System.out.println("a = " + a);
^ <--- フィールドを使う!
}
}
クラスの使い方
さて、クラスの宣言は終わりました。
しかし、宣言しただけではまだ使えていません。
new 演算子を使って、オブジェクトとして生成する必要があります。
このオブジェクトのことを インスタンス とも呼びます。
それでは先ほどの Sample クラスのインスタンスを作成してみます。
整数の変数宣言と比べてみましょう。
// 整数の例
int x = 123;
// クラスの例
Sample sample = new Sample();
クラスの場合は、new 演算子を使うのがポイントですね。
new 演算子の次にクラス名である Sample が続き、最後にカッコ ( ) となります。
Sample sample = new Sample();
^^^^^^ <--- インスタンスの型
Sample sample = new Sample();
^^^^^^ <--- 任意のインスタンス変数名
Sample sample = new Sample();
^^^ <--- new演算子
Sample sample = new Sample();
^^^^^^ <--- クラス名
Sample sample = new Sample();
^^ <--- カッコ
これで、sample という名前のインスタンスが作成できました。
このインスタンスを使って、Sampleクラスにアクセスすることになります。
Sample クラスには print メソッドがあるので、それを呼び出してみましょう。
メソッドの呼び出し方は、
- インスタンス + ピリオド(.) + メソッド名 + ( )
となります。
sample.print();
^^^^^^ <--- インスタンス
sample.print();
^ <--- ピリオド
sample.print();
^^^^^ <--- メソッド名
sample.print();
^^ <--- カッコ
これで sample インスタンスの print メソッドを呼び出すことができました。
print メソッドが呼び出されたので…
public class Sample {
...
public void print() {
System.out.println("a = " + a); <--- ★ここが実行される!
}
}
結果として、画面に変数 a が出力されるわけですね。
応用問題
【問題】
まずは、下記のプログラムをそのまま「実行(Ctrl-Enter)」してみましょう。
「出力」には
a = 0
a = 0
と表示されたはずです。
この表示を、Sample クラスの increment メソッドを呼び出すことにより、
a = 1
a = 2
になるようにしてください。
ちなみに increment は、「1を足す」という意味になります。
ポイントは、
- クラスのフィールド(変数) は、インスタンス毎に別で管理される
ということです。
追記するコードは、
- // ↓ ここから
- // ↑ ここまで
というコメントの間に書いてください。
// ↓ ここから
★ここにコードを追記!
// ↑ ここまで
それでは、指定の場所にコードを書き加えて「実行(Ctrl-Enter)」してみましょう。
注意:コードは2ファイルあります。上部のタブで切り替え可能です。
(表示がおかしいときは「コードの再読み込み」ボタンを押してみてください)
無事に、
a = 1
a = 2
と出力されましたでしょうか?
もし解けなかった場合は、下記の回答例をご参照ください。
回答例
【コード】
public class Main {
public static void main(String[] args) {
Sample sample1 = new Sample();
Sample sample2 = new Sample();
// ↓ ここから
sample1.increment();
sample2.increment();
sample2.increment();
// ↑ ここまで
sample1.print();
sample2.print();
}
}
【出力】
a = 1
a = 2
まとめ
Java言語でプログラミングするには、クラスは必須となります。
とはいえ、クラスはとても奥が深く、そして難しい概念です。
プログラム入門者にとって1つの壁といえるでしょう。
いろいろと新しい用語も出てくるので大変です。
いきなり全部を理解しようとせずに、できる範囲で少しずつ理解していくのがよいのかな…と思います。
次回は「手を動かして学ぶ Java入門 (クラス・メソッド)」になります。
関連記事
- シリーズ
- 手を動かして学ぶ Java入門 (Hello world 編)
- 手を動かして学ぶ Java入門 (数値と演算)
- 手を動かして学ぶ Java入門 (数値と変数)
- 手を動かして学ぶ Java入門 (コメントの書き方)
- 手を動かして学ぶ Java入門 (文と式の違い)
- 手を動かして学ぶ Java入門 (if文)
- 手を動かして学ぶ Java入門 (if-else文、if-elseif文)
- 手を動かして学ぶ Java入門 (文字列の連結)
- 手を動かして学ぶ Java入門 (while文)
- 手を動かして学ぶ Java入門 (break文)
- 手を動かして学ぶ Java入門 (continue文)
- 手を動かして学ぶ Java入門 (for文)
- 手を動かして学ぶ Java入門 (クラスの超基本)
- 手を動かして学ぶ Java入門 (クラス・メソッド)
- 手を動かして学ぶ Java入門 (クラス・フィールド)
- 手を動かして学ぶ Java入門 (クラス・コンストラクタ)
- 手を動かして学ぶ Java入門 (文字列クラス)
- 手を動かして学ぶ Java入門 (静的メソッド)
- 手を動かして学ぶ Java入門 (静的フィールド)
- 手を動かして学ぶ Java入門 (定数の定義)
- 手を動かして学ぶ Java入門 (クラス継承の超基本)
- 手を動かして学ぶ Java入門 (メソッドのオーバーライド)
- 手を動かして学ぶ Java入門 (メソッドのオーバーロード)