
―Javaプログラミングの前提知識―
2001/7/13
|
クラスの定義とオブジェクトの生成を理解する |
|
今回の内容
|
Javaは、オブジェクト指向的な考え方を表現しやすいように考えられたプログラミング言語です。ここでは、Java言語でどのようにクラスを定義し、オブジェクトを生成し、オブジェクトを操作すればよいかを説明します。
オブジェクト指向の考え方については「オブジェクト指向とクラスを理解する」を参照してください。
|
クラスを定義する |
クラスを定義するにはキーワードclassを用います。最初にclassを書き、続いて定義するクラスの名前を書きます。次に、中カッコ“{}”を書けば、クラスの完成です。例えば車を表すクラスCarは以下のように書けます。
public class Car { // クラス定義
|
上のクラスCarの定義では、キーワード“public”を指定することにより、Carクラスが含まれているパッケージ以外のパッケージ中のクラスがこのクラスを参照できるようにしています。ここでいう、パッケージとはクラスの集まりのことです。詳しくは「パッケージを理解し利用する」を参照してください。
上のクラスCarの定義を“Car.java”というファイルに書いて実際にjavacでコンパイルすると、正しくコンパイルできて、“Car.class”というファイルができます。javacコマンドの使い方については、「javacコマンドを使いこなす」を参照してください。
■クラスの中身を書く
上記のCarクラスは立派なクラス定義ですが、オブジェクトが外部とどのように相互作用するかや、どのような状態を持つか、どのように振る舞うかについては何も記述していません。次に、クラスの中にどのようにオブジェクトの外部との相互作用、状態、振る舞いを定義するかについて説明します。
<オブジェクトの状態>
Java言語では、オブジェクトの状態はフィールドとして定義します。フィールドとは、データを格納する場所のことです。オブジェクトのフィールドのことをメンバ変数といいます。
メンバ変数はクラス定義の中に定義します。具体的には、次の3つのことを指定して定義します。
- 外部のクラスからの見え方
- データの種類
- メンバ変数の名前
以下は、クラスCarの定義に車の速度を表すspeedという名前のメンバ変数を追加した例です。
public class Car { // クラス定義 private int speed;
// メンバ変数speed} |
上の例では、privateが、メンバ変数であるspeedの外部のクラスからの見え方を指定しています。privateを指定することで、speedはクラスCar以外のクラスからのアクセスを禁止しています。
また、intはspeedが格納するデータの種類を指定しています。intはspeedが、32bit整数のプリミティブ値データを格納していることを表しています。メンバ変数に指定できるデータの種類は、大きく分けてプリミティブ値とオブジェクト参照の2つがあります。プリミティブ値とは、整数や浮動小数点数などのことです。オブジェクト参照とは、オブジェクトが存在する場所を表すデータのことです。オブジェクトの操作は、常にそのオブジェクトへのオブジェクト参照を介して行います。
<オブジェクトの外部との相互作用、振る舞い>
Java言語では、オブジェクトの外部との相互作用やオブジェクトの振る舞いは、メソッドとして定義します。例えば、運転手が車を運転する例では、車を表すクラスには「スピードを上げる」メソッドと、「スピードを落とす」メソッドが定義されています。それぞれのメソッドには車がスピードを上げたり下げたりするための細かい手順が記述されています。運転手はスピードを上げるために、アクセルペダルを踏み込んで、車の「スピードを上げる」メソッドを呼び出します。すると、車はメソッドに記述されている細かい手順に従って実際に作業を行い、スピードを上げます。
メソッドもメンバ変数と同様に、クラス定義の中に定義します。例えば、車の速度を上げるためのメソッドspeedUpは以下のように定義できます。
public class Car { // クラス定義 private int speed;
// メンバ変数 public void
speedUp() { // メソッド |
ここまでで、クラスの定義の仕方を説明しました。 次に、実際にクラスからオブジェクトを生成し、操作する方法を説明します。
|
クラスからオブジェクトを生成する |
■オブジェクトの生成
クラスからオブジェクトを生成するには、キーワードnewを用います。例えば、クラスCarのオブジェクトを生成するには以下のように書きます。
new Car(); |
ちなみに、Carの後ろのカッコ“( )”は、クラスCarのオブジェクトを生成するときに呼び出されるコンストラクタという特別なメソッドに値を何も渡さないことを表しています。コンストラクタについては、「コンストラクタとは何ですか」を参照してください。
さて、上のようにすればオブジェクトを生成することができますが、このままでは、生成したオブジェクトがどこに存在するか分からないため、そのオブジェクトを操作することができません。生成したオブジェクトのメソッドを呼び出したいのならば、そのオブジェクトへのオブジェクト参照を保存しておく必要があります。オブジェクト参照があればメソッドを呼び出すことができます。
オブジェクト参照を保存する方法は2種類あります。第1の方法は、すでに説明した、オブジェクトのメンバ変数に保存する方法です。例えば、クラスCarのオブジェクトを保存するには、クラスに、
private Car car; |
のようなメンバ変数carを定義します。そして、オブジェクトを生成するときに、
car = new Car(); |
のように書くと、生成されたオブジェクトへのオブジェクト参照がメンバ変数carに保存されます。
第2の方法は、メソッドの一時変数に保存する方法です。メソッドの一時変数とは、メソッドが呼び出されている間だけ有効な、データの保存場所です。一時変数は、メンバ変数と同じようにプリミティブ値やオブジェクト参照を保存することができます。一時変数を定義するには、メソッド中に、保存するデータの種類と変数名を書きます。例えば、クラスCarのオブジェクトへのオブジェクト参照を保存する一時変数carを定義するには、メソッド中に以下のように書きます。
Car car; |
そして、同じメソッド中で、オブジェクトを生成するときに、
car = new Car(); |
のように、生成したオブジェクトへのオブジェクト参照を一時変数carに保存します。
■オブジェクトの操作
オブジェクト参照を保存していれば、そのオブジェクト参照が指し示すオブジェクトを操作することができます。オブジェクトに対する操作には、メンバ変数のアクセスと、メソッド呼び出しの2種類があります。
<オブジェクトのメンバ変数のアクセス>
オブジェクトのメンバ変数にアクセスするには、アクセスしようとするオブジェクトへのオブジェクト参照と、メンバ変数の名前を“.”でつなげて書きます。例えば、クラスCarのオブジェクトへのオブジェクト参照が一時変数carに保存されているときに、そのオブジェクトのメンバ変数speedを一時変数currentSpeedに保存するには以下のようにします。
int currentSpeed = car.speed; // メンバ変数speedにアクセス
|
<オブジェクトのメソッド呼び出し>
オブジェクトのメソッドを呼び出すには、そのオブジェクトへのオブジェクト参照と、呼び出そうとしているメソッド名を記号"."でつなげて書きます。例えば、クラスCarのオブジェクトへのオブジェクト参照が一時変数carに保存されているときに、メソッドspeedUpを呼び出すには、以下のようにします。
car.speedUp(); //メソッドspeedUpを呼び出す
|
|
サンプルコード |
この節で説明した、クラスの定義やオブジェクトの生成、操作の方法を以下のような具体的なプログラムにまとめてみました。
このプログラムは、車を表すクラスCarと運転手を表すクラスTestDriverの2つのクラスでできています。クラスCarをソースファイルCar.javaに、クラスTestDriverをソースファイルTestDriver.javaに書いて、javacでコンパイルしてください。実行するには、javaコマンドを用いてコマンドプロンプトで以下のように入力します。
java TestDriver
public void
speedUp() { // メソッドspeedUpの定義 } // 運転手を表すクラス
// プログラムの始まり Car car = new Car();
car.speedUp(); int after
= car.getSpeed(); System.out.println("スピードアップ前の速度は
" + before + " です。"); // プログラムの終わり} |
ホワイトペーパー(TechTargetジャパン)
- Webの表示速度を遅くする「SSLハンドシェイク」とは (2010/2/9)
安全性を担保しようとWebページにSSLを適用すると、負荷の高い処理が実行される。速度と安全性は両立できるのか? - クラウド活用「雲活」のために押さえるべき39のポイント (2010/2/2)
活用するべきサービスか否か、クラウドの利点・問題点、クラウドプラットフォーム提供企業になるための条件、開発者がするべきことに分けて紹介 - 再利用性の高いクラス作成に重要な“アクセス制御” (2010/1/28)
Javaのアクセス修飾子public、private、protectedや、Eclipseで簡単に作れるアクセサメソッドgetter、setterについて解説 - DB設計の神ツール「ERMaster」なら、ここまでできる (2010/1/21)
直感的なUIに、カスタマイズ可能な、Excel出力のテーブル定義書、辞書機能など多機能なERモデリングの無料Eclipseプラグインです
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
- - PR -
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | 企業の仮想化に足りない“発想”とは? 仮想化運用管理のキモは意外なところに! New! |
| ◆ | 操作もマニュアルも分かりやすい! ユーザー視点で開発されたPC管理ツール New! |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |

| ◆ | セキュリティを知り尽くす上野氏が登壇! @ITメールソリューションLive! in Tokyo |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
| ◆ | 世界に通用するストレージの作り方とは? 製品に込めた思いを富士通の開発者に聞く |

| ◆ | OSSで手間も時間も、障害も減った―― 「マピオンの事例」オープンソース活用法 |
| ◆ | 「ノートPCの持ち出し禁止」で大丈夫? 情報漏えいを防ぐ管理手法とインフラは? |
| ◆ | 1日の処理を1秒に――MySQLの達人が語る 「コスト削減」できるチューニング |

| ◆ | ドキュメント作成を自動化して、SEの作業 効率を大幅アップ! Visio 2007の魅力 |
| ◆ | 急速に広がるHyper-Vでのサーバ仮想化 そのベストプラクティスをデルが解説 |
| ◆ | @IT主催セミナーで語られた、「担当者に 求められるセキュリティ対策」をレポート |

| ◆ | @IT「Windows 7」 特設サイトオープン! 最新情報・移行ノウハウを公開しています |






