Java クラスとオブジェクトの包括的な理解

高洛峰
リリース: 2017-01-20 17:47:10
オリジナル
1161 人が閲覧しました

オブジェクト指向プログラムはオブジェクトで構成されており、各オブジェクトにはユーザーに公開される特定の機能部分と隠された実装部分が含まれています。オブジェクト指向プログラミング (OOP) では、オブジェクトの特定の実装について心配する必要はありません。従来の構造化プログラミングでは、アルゴリズムが最初にあり、データ構造が 2 番目にあります。つまり、まず数値の操作方法を決定し、次に操作を容易にするデータの編成方法を検討します。 OOP ではこの順序が逆で、データが最初に配置され、次にデータを操作するためのアルゴリズムが考慮されます。

1. クラス

クラスは、オブジェクトを構築するためのテンプレートと設計図です。平たく言えば、クラスは建築図面に相当し、オブジェクトは建物に相当します。クラスからオブジェクトを構築するプロセスは、オブジェクトのインスタンスの作成と呼ばれます。

Java では、「クラス」はキーワード class とそれに続くクラス名によって定義されます。例:

class Person{
  // 类的主体内容
}
ログイン後にコピー

は Person クラスを定義します。

1. フィールドとメソッド

クラスを定義するとき、クラス内にデータ メンバーとメンバー関数の 2 種類の要素を設定できます。データ メンバーはオブジェクトであり、任意の型にすることができます。オブジェクトを指すハンドルの場合、ハンドルを初期化し、コンストラクターを通じて実際のオブジェクトに接続する必要があります。基本的なデータ型の場合は、クラスが定義されている場所で直接初期化できます。

各オブジェクトは、独自のデータ メンバーの記憶域を維持します。データ メンバーはオブジェクト間で共有されません。

class Person{
  String name;
  double salary;
}
ログイン後にコピー


new キーワードを使用してオブジェクトを作成します。例:

Person p = new Person();
ログイン後にコピー


(1) メインメンバーのデフォルト値

特定のメインデータ型はクラスメンバーに属しているため、明示的に初期化されていなくても、デフォルト値を取得することが保証されています。

Java クラスとオブジェクトの包括的な理解

変数がクラスのメンバー変数として使用される場合、メインの型は必ず初期化されます。初期化された値には特に注意してください。ローカル変数の場合、次のようなランダムな値が取得されます。 int x は自動的に 0 に初期化されません。

(2) メソッド

メソッドの基本コンポーネントには、名前、引数、戻り値の型、本体が含まれます。メソッドの基本形式は次のとおりです:

戻り値の型 メソッド名 (/*引数リスト*/) {/* メソッド本体 */}

戻り値の型は、メソッドの呼び出し後に返される数値型を指します。メソッド名は、特定のメソッドの識別および参照です。引数リストには、メソッドに渡す情報のタイプと名前がリストされます。

Javaにおけるメソッドの呼び出し形式はオブジェクト名.メソッド名

1. オブジェクトを操作するにはハンドルを使用します

Javaは完全にオブジェクト指向ですが。ただし、操作の識別子は実際には、「参照」とも呼ばれるオブジェクトの「ハンドル」を指します。ハンドルは独立して存在できますが、ハンドルがあるからといってそれに対応するオブジェクトがなければならないというわけではありません。たとえば、int i; は整数変数 i を定義しますが、値がなければならないという意味ではありません。たとえば、String 型のハンドルを作成します。

String s;
ログイン後にコピー


ここでは、ハンドルのみが作成され、オブジェクトは作成されません。 s には関連付けられたオブジェクトがないため、s を呼び出すと例外が発生します。そのため、作成時に初期化が必要となります。

String s = "hello";
ログイン後にコピー


Java では、オブジェクトは new キーワードを通じて作成され、オブジェクトの参照 (つまり、ハンドル) が返されます。したがって、

String s = new String("hello");
ログイン後にコピー


は、コンテンツ「hello」を持つ String オブジェクトを作成し、オブジェクトのハンドル (参照) を s に渡して保存します。

2. データの保存場所

1.プロセッサー内にある最速の保存領域。レジスタのサイズは制限されており、コンパイラによって割り当てられます。

2.スタック。通常の RAM (ランダム アクセス メモリ) 領域に常駐し、「スタック ポインタ」を介してサイズを変更できます。スタック ポインタを下に移動すると新しいメモリ領域が作成され、上に移動するとメモリ領域が解放されます。プログラムを作成するとき、Java コンパイラーは、スタック上に保持されているすべてのデータの「長さ」と「経過時間」を正確に把握しておく必要があります。コンパイラーは、それらのデータから、ポインターを移動するための適切なコードを生成します。 Java オブジェクトのハンドルはそこに保存されますが、Java オブジェクトはスタックには保存されません。

3. ヒープ。 Java オブジェクトを保持する汎用メモリ プール。コンパイラーは、「メモリー・ヒープ」または「ヒープ」から割り当てられる記憶域スペースの量と、データが保持される期間を知りません。また、知る必要もありません。

4. 静的ストレージ。静的とは、固定の場所 (RAM 内) に配置されることを意味します。プログラムの実行中、静的に保存されたデータはいつでも呼び出すことができます。 static キーワードは、オブジェクトの特定の要素が静的であることを示します。 Java 自体を静的ストレージ領域に配置することはできません。

5. 一定のストレージ。定数値は通常、プログラム コード内に配置され、変更されることはありません。

6. 非 RAM ストレージ。データがプログラムから完全に独立している場合、プログラムが実行されていないときでもデータは存在し、プログラムの制御内にあります。たとえば、ストリーミング オブジェクトや固定オブジェクトなどです。

2. オブジェクト

オブジェクトの 3 つの主な特性:

• オブジェクトの動作 - オブジェクトにどのような操作を適用できるか、またはオブジェクトにどのようなメソッドを適用できるか?

•オブジェクトの状態 - これらのメソッドが追加されたときにオブジェクトはどのように応答しますか?

•オブジェクトの識別 - 同じ動作とステータスを持つ異なるオブジェクトを識別するにはどうすればよいですか?

オブジェクトの動作は、呼び出し可能なメソッドによって定義されます。各オブジェクトには、その現在の特性を説明する情報が保存されます。これがオブジェクトの状態です。オブジェクトの状態は自発的に変化しません。適切に設計されたクラスの場合、そのオブジェクトはメソッドを呼び出すことによってのみ実装できます。メソッドを呼び出さずにオブジェクトの状態を変更できる場合、それはカプセル化が破損していることを意味します。

カプセル化: データと動作をパッケージに結合し、オブジェクトのユーザーからデータ実装メソッドを隠します。カプセル化の重要な点は、クラス内のメソッドが他のクラスのインスタンス フィールドに直接アクセスしてはならないということです。プログラムは、オブジェクトのメソッド フィールドを通じてのみオブジェクト データと対話します。

オブジェクト内のデータは、インスタンスフィールドまたは属性と呼ばれます。データを操作するプロセスはメソッドと呼ばれます。特定のオブジェクトごとに、インスタンス フィールド値 (プロパティ値) の特定のセットがあり、これらの値のセットがオブジェクトの現在の状態になります。

クラス間の関係

クラス間の一般的な関係:

•依存関係 (「use-a」): あるクラスのメソッドが別のクラスのオブジェクトを操作します。

•集約 (「has-a」): あるクラスのオブジェクトには、別のクラスのオブジェクトが含まれます。

•継承 (「is-a」): 特別および一般的な関係を表すために使用されます。クラス A がクラス B を拡張する (A が B を継承する) 場合、クラス A にはクラス B のメソッドが含まれるだけでなく、メソッドも拡張されます。

オブジェクトには実際にはオブジェクトが含まれているのではなく、オブジェクトを参照しているだけです。

Java では、オブジェクト変数の値は、別の場所に保存されているオブジェクトへの参照です。 new 演算子の戻り値も参考になります。

上記の Java クラスとオブジェクトの包括的な理解は、編集者によって共有されたすべての内容です。参考になれば幸いです。また、PHP 中国語 Web サイトをサポートしていただければ幸いです。

Java クラスとオブジェクトの包括的な理解に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート