2016-10-20 11 views
-2

jvmでは、クラスローディング時に初期化されるメソッド領域に関数がロードされ、ヒープ内のオブジェクトはパフォーマンスを向上させるためにこれらの関数を呼び出します。カプセル化は、データメンバーとメンバー関数のバインディングです。この場合、私はオブジェクトレベルでカプセル化を見ていません。 また、クラスに何千ものインスタンスがある場合、関数がさまざまなオブジェクトによって共有されたリソースとして表示されるため、同じ関数を何度も何度も何度も何度も何度も何度も何度も何度も繰り返しても問題ありません。
を明記してください。なぜカプセル化がオブジェクト内にないのか/私たちがカプセル化と呼んでいるのはどうしてですか?

+0

オブジェクトは、1つのソフトウェアコンポーネントにまとめられた状態と動作です。 "オブジェクトにない"?違う。あなたは同じ機能を持つ多くのインスタンスを持つことができますが、共有されていません。それぞれは独自のカプセル化状態で動作します。 – duffymo

+0

はい。しかし、メソッドはメソッド領域に格納され、Javaオブジェクトインスタンスはスタック領域に存在する参照IDを介してアクセスメソッドからヒープにあります。メソッドは同じで、異なるオブジェクトインスタンスによってアクセスされています。メソッドとインスタンスのデータメンバがクラスに含まれているので、私はカプセル化に疑問を抱いています。異なるインスタンスを作成して、同じ機能を何度も何度も共有しています。 –

+0

間違っています。申し訳ありませんが、あなたはそれを取得しないでください。これはすべてのOO言語の一部であるアイデアです。できます。おそらくあなたが誤解したと認めても構わないのですか? – duffymo

答えて

0

機能は、Javaが機能を持っていない

、それだけで、常にクラスに関連付けられているメソッドを持つクラスのロード時に初期化された方法領域にロードされています。これらのメソッドのロード方法は、JVMによって異なります。 HotSpot JVMでは、メソッドを最適化し、JVMの存続期間にわたって多くの時間を再構築することができます。

クラス内の静的変数の初期化を一度行うことと、異なる時間にメソッドのコードを異なる方法で操作する方法を混同しないでください。

カプセル化は、データメンバーとメンバー関数のバインディングです。

私は同意しません。オブジェクト指向プログラミングでは、カプセル化は実装の詳細を隠すことです。オブジェクト上のメソッドの呼び出し側は、メソッドの実装方法や使用されるフィールドを知る必要はありません。

これは、関数がさまざまなオブジェクトで共有されているリソースとして表示されるため、同じ関数を何度も何度も何度も何度も何度も何度も何度も何度も繰り返しても大丈夫でしょうか。

メソッドは読み取り専用ですので、コピーは何個でも問題はありません。そのようなものとして、彼らはリソースの競合の源ではありません。

彼らはクラスそれらが結合している正確にどのように

であるとしてメンバーが一緒に結合されていないメソッドとインスタンスデータは重要ではありません。あなたが知る必要があるのは、オブジェクトにクラスがあり、そのクラスにメソッドがあることだけです。パフォーマンスに関係なく、任意の数のオブジェクトが同じクラスを持つことができます。 (メモリが不足する可能性を除いて)

+0

ありがとうございます。情報は確かに良いです –

関連する問題