*

Java超入門 with Eclipse[3:クラスに関する基礎知識(クラスとインスタンスとパッケージ)]

公開日: : 最終更新日:2015/05/02 Eclipse, Java


スポンサードリンク



Javaといえば、「オブジェクト指向」とのイメージがとっても強いですよね。
そう、そうです。間違いなく「オブジェクト指向」です。

ということで、第2回の「プリミティブ型(基本データ型)とは」に引き続き、
今回は「オブジェクト指向」の根幹をなす「クラス」に関する基礎知識の説明をさせていただきます。
と言っても、本エントリーは、クラスの概要、クラスとインスタンスの関係、パッケージの説明となります。

次回に、修飾子と、及び今回扱えなかったクラスに関する基礎知識の説明をさせていただきます。

本エントリーの内容は以下の通りです。

  1. クラスとオブジェクト(インスタンス)
  2. packageの説明

 

1 クラスとオブジェクト(インスタンス)

クラスの説明でよく例に出されますが、クラスはあくまでもひな形であり、ひな形を利用してオブジェクト(インスタンス)を作成する。
これがクラスとオブジェクト(インスタンス以降ではインスタンスとします。)の関係です。

例をあげると、
たい焼きを焼く型(器具)ありますよね、あれが「たい焼き」クラスで、その型で焼きあがった「たい焼き」がインスタンスです。

たい焼きを焼く型を作るひな形もあるだろう!、と言われると話がややこしくなるのでツッコミ厳禁でお願いします。

以降では、たい焼きを例に、クラスの宣言方法を超簡単な例で説明をさせていただきます。

クラスの宣言方法

一番シンプルなクラスの宣言方法の例は以下の様になります。

見ていただいて分かる通りですが、
class + 半角スペース + クラス名 {
}
が最もシンプルな宣言方法です。クラス名に日本語を利用することは一般的ではないですが・・・
分かりやすさ重視で日本語にしています。

クラスを宣言するにあたって、決定しなければならない事柄が3つあります。
1つ目がクラスの中身で、2つ目がパッケージ、3つ目がクラスの修飾子です。

クラスの中身とは、クラスが保持する定数、変数、メソッドです。
クラスのパッケージと修飾子については、後ほど詳細な説明をさせていただきますので、とりあえず考えないでOKです。
(修飾子については第四回となります。)

定数、変数、メソッドについても「第四回」で詳しく説明させていただきますが、
ザックリとした感じを見ていただくために、シンプルな定義例を先に説明させていただきます。

定数

定数は、定まった数ですので、箱の中身の値を変更できない箱となります。
この箱を作成するためにconst修飾子を利用します。すいません、修飾子は無視してくださいと言いながら・・・
const修飾子を付けると変更不可な変数、すなわち定数になります。
(実質的にfinal修飾子でも同様のことが実現可能)

同じ型で焼かれたたい焼きのサイズ(身長?、体長?)はほぼ同じですよね。このサイズを定数として定義してみます。
たい焼きクラスに型:int、名前:SIZE、値:15を追加してみます。

定数の名前は全て大文字とし、複数単語で表現したい場合は間をアンダースコアで連結します。
例:HEIGHT_SSIZE

変数

変数のちゃんとした説明を行わずにここまできていますが、今までの通り箱として認識ください。

たい焼きの値段は、つぶあん、こしあん、クリーム等の中身により異なりますよね。という事で、
たい焼きクラスに型:int、名前:price、値:指定無しを追加してみます。
あ!、そう言えばプリミティブ型のデフォルト値の説明してなかったですね、intは0がデフォルト値です。

メソッド

ついに出ました。メソッドです。

メドッドとは何からの「動作」に相当する物です。メソッドには戻り値や引数が指定できますが、
とりあえずなので、戻り値は、戻り値が無いことを意味するvoidを、引数は指定無しのメソッドを追加します。

たい焼きの「動作」といえば・・・
泳ぐしかないですよね。
メソッド名:swimを追加しました。中身が空では寂しいのでコンソールに”泳いでいます。”と表示するようにしています。

以上が、クラスのザックリとした宣言方法です。

クラスの利用方法

一般的なクラスはインスタンスを作成してから利用します。
たい焼きクラスのインスタンスを作成するコンストラクタ(インスタンス作成用の特別なメソッド)を呼び出すには
new + 作成したいクラス名 + ();と記述し、
作成されたインスタンスを、同じたい焼き型の変数に代入します。

たい焼きのswimメソッドを呼び出すには、たい焼き型の変数 + ドット + swim();を記述します。

以下のコードがクラスの作成とswimメソッドを呼び出す例となります。

このコードについても、クラスのパッケージと修飾子が実際は影響しますが、一番シンプルな例が上記コードとなります。

2 packageの説明

先ほど説明した「たい焼きクラス」ですが、机上で考えただけの例でしたので、
まだjavaプロジェクトも.javaファイルも未作成ですので、Eclipse上にプロジェクトと.javaファイルの作成を行います。

Eclipseの環境作成につきましては「第一回」をご覧ください。

プロジェクトとクラスの作成

プロジェクトの作成

TaiyakiSampleと言う名前のJavaプロジェクトを作成します。

「パッケージ・エクスプローラー」で右クリック
表示されたメニューの[新規]>[Javaプロジェクト]をクリックし
表示された画面の「プロジェクト名」にTaiyakiSampleと入力し、「完了」ボタンをクリックしてください。
スクリーンショット 2014-05-09 21.58.34

作成されたプロジェクトを「パッケージ・エクスプローラー」で開いて
スクリーンショット 2014-05-09 22.03.26

srcフォルダを選択後に右クリック
表示されたメニューの[新規]▶︎[クラス]をクリックし
表示された画面の「名前」にTaiyakiを入力し、「完了」ボタンをクリックしてください。
ここからはクラス名は「たい焼き」ではなくTaiyakiにします。
スクリーンショット 2014-05-09 22.09.09

生成されたTaiyaki.javaは以下の通りです。classの前にpublicとの修飾子が記載されています。
これは、全てのクラスから参照可能との修飾子です。詳細は、他の修飾子と合わせて「第四回」で説明させていただきます。

packageとは

パッケージの役割

Javaのパッケージは、クラスを管理しやすくするために存在しています。

  1. 同じ様な責務のクラスを同一のパッケージ指定にする。
  2. パッケージ名は階層構造を表す事ができ、機能のつながり等を表すことができる。
  3. パッケージの概念が存在することにより同じ名前のクラスを作成することができる。

 

上記の項目3を逆読みすると、パッケージ名を明示しないとクラス名は解決できないことになります。(コンパイラが見つけられないでエラーとなる)

例えば、hogeパッケージのBarTestクラスとfooパッケージのBarTestクラスが存在している場合に、
new BarTest();
とのコードを書いた時に、どちらのパッケージのクラスをnewするのか冗長になってしまいます。

.javaファイルのパッケージの指定方法

指定方法は、.javaファイルの先頭に(コメントを除いた)
package + 半角スペース + パッケージ名 + セミコロン(;)を記載すればOKです。

先ほども少し触れましたが、階層構造を持ったパッケージ名はドットで各文字列を連結して表記します。

一般的にはありがちなパッケージ名は、商業ベースであれば、
com + ドット + 会社名 + ドット + プロダクト名 + ドット + 機能名 + ドット + サブ機能名
みたいな物や、共通機能のユーティリティのパッケージであれば、
com + ドット + 会社名 + ドット + プロダクト名 + ドット + util + ドット + サブ機能名
みたいな物をよく見かけます。

利用するクラスのパッケージ名の指定方法

利用する方法として以下の3つがあります。なお、フルパッケージ名とは、そのクラスのパッケージ名+.+クラス名と記載することを意味します。

  1. 利用するクラスと時クラスのじパッケージを同じにする。
  2. import文を書いて利用するクラスを指定する。
  3. コードの利用する部分、部分でクラスをフルパッケージ名で指定する。

 

クラスAからクラスBを利用する場合で説明させていただきます。

・方法1の説明
方法1は、方法と言うより、結果的にクラスAとクラスBのパッケージが同一になる時の事を指しています。

・方法2の説明
クラスBのファイルの上部に
import クラスAのパッケージ名 + ドット + クラスA + ;
と記載する事で、クラスAの名前がコンパイラに認識されます。

方法2は
import クラスAのパッケージ名 + ドット + * + ;
と個別のクラス名ではなく、’*’一文字にすることも可能ですが、
クラスAのパッケージ名と同じパッケージに属するクラスが全て見えるようになってしまい、参照している名前空間が大きくなり、
クラス名の衝突等の問題が発生しやすくなりますので、利用には注意が必要です。

・方法3の説明
クラスAを利用する箇所全てで、フルパッケージ名を記載する方法です。

例えば、インスタンスを生成する際は。
クラスAのパッケージ名.クラスA インスタンス名 = new クラスAのパッケージ名.クラスA();
と記載します。これによってコンパイラが迷う事がなくなります。

パッケージの実際の利用例

指定方法は分かったけど、じゃあ実際にはどうやって利用するの?、って感じですよね。
実際の利用方法をこれから説明させていただきます。

・TaiyakiCreatorクラスの作成
まだ.javaファイルが1つしか存在していませんので、もう1つ追加します。そうしないとパッケージを利用する意味がありません。

Taiyaki.javaと同様の手順でTaiyakiCreator.javaを新規追加してください。

生成されたTaiyakiCreator.javaは以下の通りです。

・TaiyakiCreatorクラスからTaiyakiクラスを利用
まずは、mainメソッドをTaiyakiCreatorクラスに追加し、TaiyakiCreatorクラスを実行可能なクラスにします。
mainメソッドについても「第四回」で詳細に説明させていただきますので、
とりあえずこう書けば「Java VM」が実行してくれるんだぐらいでお考えください。

次に、Taiyakiクラスのインスタンス作成処理を追加します。

追加後に、TaiyakiCreatorをセーブします。Eclipseがセーブ時に自動的にコンパイルを実行しますが、コンパイルエラーは発生していません。
先ほど「利用するクラスのパッケージ名の指定方法」で説明させていただいた3つの方法のどれにも当てはまらないように見えます。

Javaにはデフォルトパッケージという考え方がありまして、パッケージの指定が無い状態がこれにあたります。

現状のTaiyaki、TaiyakiCreator共にデフォルトパッケージですので、同じパッケージ名と認識されて問題なくコンパイルが通っています。
Eclipseのパッケージ・エクスプローラーでもデフォルト・パッケージに格納されています。
スクリーンショット 2014-05-10 17.52.36

・Taiyakiクラスのパッケージ名を変更
Taiyakiのパッケージ名をhoge.fooに変更してみます。
やり方は何通りかあるのですが、私がオススメの方法でやってみます。

package hoge.foo;をTaiyakiの1行目に追加し、セーブします。
するとコンパイルエラーが発生します。エラー内容は
「宣言されたパッケージ “hoge.foo” が、予想されているパッケージ “” に一致しません」となります。
スクリーンショット 2014-05-10 17.35.58

Taiyakiのパッケージ名(hoge.foo)がEclipse上で管理されているパッケージと不整合を起こしています。
Eclipseには、エラーの修正機能が存在していますので、この修正機能を使って不整合を解消します。

以下の画像の赤枠の部分をクリックします。
スクリーンショット 2014-05-10 17.39.00

すると以下のような小画面が2つ表示されます。
左の小画面は、エラーの修正方法の候補です。どちらかの候補を選んで「リターン」キーを押すことで修正が行われます。
スクリーンショット 2014-05-10 17.42.07

「’Taiyaki.java’ を パッケージ ‘hoge.foo’に移動」を選んだまま「リターン」キーを押してください。
すると、パッケージ・エクスプローラーでもTaiyakiはhoge.fooパッケージの配下に格納されました。スクリーンショット 2014-05-10 17.56.09

しかし、今度はTaiyakiCreatorからTaiyaki型が解決できないとのエラーが発生します。
スクリーンショット 2014-05-10 18.00.19

再び、Eclipseのエラー修正機能を使います。import文をTaiyakiCreator.javaに追加してもらうつもりです。
問題が発生している行の左側(以下の画像の赤枠部分)をクリックします。
スクリーンショット 2014-05-10 18.00.19

するといくつかの画面が表示されます。行いたいのは「Taiyakiをimportします」ですので、何も変更せずに「リターン」キーを押してください。
スクリーンショット 2014-05-10 18.08.56

この操作の結果TaiyakiCreator.javaは以下のようになり、コンパイルエラーは無くなりました。

Eclipseの修正候補に存在しないのですが、taiyakiをフルパッケージ指定で表現すると以下のようになります。

「Java超入門[3:クラスに関する基礎知識(クラスとインスタンスとパッケージ)]」は以上です。


スポンサードリンク



関連記事

Selenium入門その3[Selenium WebDriver(Java/Junit4)の使い方]

WebDriverでは、予め中継サーバを起動しなくても、テスト実行時にブラウザ拡張機能や、OSのネイ

記事を読む

EclipseでAndroidアプリケーションの開発環境の構築と”Hello World!”まで

対象のOSはMac(OS X 1.9.5)とWindows7 64bitとなります。 といっても手

記事を読む

JDK8(java 8)の新機能のラムダ式の利用方法[その3:java8が用意している関数型インターフェース]

[その2:関数型インターフェースを例としたラムダ式] と説明させていただいておりますが、

記事を読む

Eclipse(4.4)でJava言語のリファクタリング機能の使い方[「メソッド・シグニチャーの変更」と基本的な抽出処理、及び「インライン化」、「定数の抽出」]

本エントリーでは、Eclipse(4.3)でJava言語のリファクタリング機能の使い方に引き続き

記事を読む

Eclipse4.3のチュートリアル機能で”Hello World”アプリケーションの作成方法を説明する。

Eclipseのインストールが終了したので、各画面エリアの名称の説明、各画面エリアの使い方の説明を

記事を読む

Java8の新機能に完全対応のEclipseメジャーリリースとなる Eclipse 4.4 Luna (ルナ) が遂にリリース

Eclipse メジャーリリースとなる Eclipse 4.4 Luna (ルナ) が遂にリリースさ

記事を読む

Eclipseの「DBViewer」プラグインの使い方[前編]

「HyperSQL」の環境を作成し、Eclipseの「DBViewer」プラグインを利用してSQLを

記事を読む

Java超入門 with Eclipse[4:クラスに関する基礎知識(修飾子とクラスとインスタンスと変数)]

前回は、Javaの基本であるクラスの基本的な知識をざっくりと説明させていただいたあと、 packa

記事を読む

Eclipse4.4,4.3の使い方[エディタのフォントサイズの変更方法]

今回は、Eclipse4.4と,4.3におけるエディタエリアのフォントサイズの変更方法を説明させてい

記事を読む

JDT betaを利用してJDK8(java 8)対応のEclipse開発環境を作成する[Mac編]

「Java 8の新機能について」では、どんな新機能があるか紹介させていただきました。 今後、少

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Selenium入門その6[Selenium3でWebDriver(Java/Junit4)の環境を作成しEdge,Chrome,Firefoxで確認してみる]

Selenium3も3.0.1がリリースされましたし、今後は本格的にS

Selenium利用時のトラブルシューティング方法[クリック編]

Seleniumは便利なテスト自動化ツールですし、今後は更なる利用者の

Java8のラムダ式とStream APIを利用してコーディング量の削減サンプル集

Java8になりラムダ式と「Stream API」が利用できるようにな

Selenium入門その5[ページオブジェクトパターン(Page Object Design Pattern)を利用して変更に強いテストを作成する方法]

Selenium入門その2 では「UIマップファイル」と言う仕組みが

Javaによる非同期処理入門その1[非同期処理の実装方法の概説]

Javaによる非同期処理に関するエントリーを前々から作成したいと思って

→もっと見る

Optimization WordPress Plugins & Solutions by W3 EDGE
PAGE TOP ↑