【Javaの勉強】クラスとは何だ?

Java入門書のオブジェクト指向のページを見ると最初に出てくるのがクラスというものです。クラスは「Hello World!」を書いた時から書いているのですぐわかる・・・と思いがちですが、勉強が進むにつれてあれっ?なんだっけ?となって混乱してきます。困ったときには基本に戻るのが一番ということで、ひとまず「クラス」の基本について、おさえていくことにしましょう。

クラスを使った例文

クラスを使った例文といっても、クラスがないとコードは動きませんのであらゆるコードにクラスが書いてあります。何を使っても構わないのですが、とりあえずfor文のところで使った簡単なコードを使ってクラスついて見ていきます。

実行結果0123456789

このコードについての詳細はこちらの記事に書いています。
【Javaの勉強】for文

このコードの「クラス」を見ながら説明していきます。

クラスとは?

1行目に書かれている「class ForTest{」から7行目の「}」の閉じカッコまでがクラスと呼ばれるものです。見ての通り、コードの全てですね。ただし、コードはクラスがないと動きませんが、クラスだけで動くことはありません。このクラスの中にいろいろな変数メソッドという「部品」を配置することで動き出すものです。

クラスというものを定義するときによく「オブジェクト作成のための雛形」や「設計図」といわれることがありますが、まず「オブジェクトってなんだ?」ということもありますので、ひとまず「コードを書くときの枠組み」くらいに捉えておけばいいと思います。

では、クラスを作るときの決まりごとを書いていきます。

クラスの決まりごと① 構文

クラスの構文は次のような形です。

【構文】

[修飾子] class クラス名{ }

構文は至って単純です。[修飾子]の部分にはクラスの公開範囲などを指定するものです。こういった簡単なコードでは特に指定しなくても大丈夫ですので、ひとまず置いておきましょう。

クラスの決まりごと② クラス名

クラス名はここでは「ForTest」となっています。このようにして、先頭と単語の区切りを大文字にします(パスカル記法といいます)。

クラス名については、「mainメソッドがあるクラスはソースコードと同じにしなくてはいけない」という決まりがありますが(後述)、それ以外は自分で自由に付けても大丈夫です。ただし、通常はコードの中身がわかりやすい名前を付けます。例1では「for文のテスト」という意味なので、「ForTest」というクラス名をつけています。

クラスの決まりごと③ ひとつのソースファイルにひとつ以上のクラス

クラスはひとつのソースファイルに1つ以上書かなくてはいけません。また、ひとつのソースファイルにいくつも書くことができます

ソースファイルというのはメモ帳で言うとメモ帳ファイル一つ分です。

メモ帳で「ForTest.java」を作り、コンパイルすると「ForTest.class」ができます。このうち「ForTest.java」のほうがソースファイル、コンパイルによって「ForTest.class」というクラスファイル生成されるという仕組みです。

たとえば、この「ForTest.java」にクラスを二つ作るとクラスファイルが2つ作成されます。

ほら、このとおり。

「ForTest」とは別に「ForTest2」というクラスを作ってコンパイルしてみました。クラスファイルが二つできていることが確認できますよね。

ちなみに、統合開発環境eclipseでは左側の「プロジェクト・エクスプローラー」にある「J」と書いてあるフォルダのようなものがソースファイルです。その直下に「c」と書かれたクラスファイルが生成されます。

クラスの決まりごと④ クラスの構成員

クラスの中に変数やメソッドなどの部品を書き込む・・・ということを書きましたが、これらのことをメンバと呼びます。このうち変数のことをメンバ変数、メソッドのことをメンバメソッドと呼びます。

ただし、例1のコードではメンバ変数はなく(※for文の中の変数iはメンバ変数ではなく、ローカル変数といいます)、メンバメソッドはmainメソッド一つしかありません。このあたりのことは後述します。ほとんどの入門書ではクラスの説明の時点では変数やメソッドの説明が不十分で、なかなかこのあたりの理解が難しい部分があります。一旦変数やメソッドを学んでからここに立ち戻るとわかりやすいと思います。

まとめ

クラスの概念というとかなり難しいもので、勉強が進むにつれて一体なんなんだ感が深まってきます。私自身まだきちんとわかる段階までは来ていないのですが、ひとまず「最初に書いて、そのなかに色々部品を書き込んでみるものなんだな」というものだと捉えればいいと思っています。

勉強が進むとオブジェクトやインスタンスといったものが絡んできてさらにわかりにくくなってきますが、乗り越えていきましょう。