オブジェクトと参照の間のいくつかの基本概念
オブジェクトと参照に関するいくつかの基本概念。
初めて Java を学んだとき、長い間、基本的な概念が非常に曖昧だと常に感じていました。後で知ったのですが、多くの Java 書籍では、オブジェクトとオブジェクト参照が混同されています。しかし、オブジェクトとオブジェクト参照を区別できないと、次のオブジェクト指向技術をよく理解できません。自分の知識の一部を書き留めておくと、Java を初めて使用する友人が回り道をしなくて済むようになるかもしれません。
}
このテンプレートを使用してオブジェクトを作成できます:
Vehicle veh1 = new Vehicle();
通常、このステートメントのアクションはオブジェクトの作成と呼ばれます。実際には、4 つのアクションが含まれています。
1) 右側の「新しい Vehicle」は、Vehicle クラスをテンプレートとして使用して、ヒープ領域に Vehicle クラス オブジェクト (Vehicle オブジェクトとも呼ばれる) を作成します。
2) 最後の () は、オブジェクトの作成後、Vehicle クラスのコンストラクターがすぐに呼び出され、新しく生成されたオブジェクトを初期化することを意味します。必ずコンストラクターが存在します。これを記述しない場合、Java によってデフォルトのコンストラクターが追加されます。
3) 左側の「Vehicle veh 1」は、Vehicle クラス参照変数を作成します。いわゆる Vehicle クラス参照は、将来 Vehicle オブジェクトを指すために使用できるオブジェクト参照です。
4) 「=」演算子は、オブジェクト参照が作成したばかりの Vehicle オブジェクトを指すようにします。
このステートメントは 2 つの部分に分割できます:
Vehicle veh1;
veh1 = new Vehicle();
効果は同じです。このように書くと、2 つのエンティティがあることがより明確になります。1 つはオブジェクト参照変数で、もう 1 つはオブジェクト自体です。
ヒープ空間に作成されるエンティティは、データセグメントやスタック空間に作成されるエンティティとは異なります。それらは実在しますが、私たちは見ることも触れることもできません。それだけではなく、
2 番目の文を注意深く調べて、今作成したオブジェクトの名前を調べてみましょう。それを「ビークル」と呼ぶ人もいます。いいえ、「Vehicle」はクラス (オブジェクトの作成テンプレート) の名前です。
Vehicle クラスは無数のオブジェクトを作成できますが、これらのオブジェクトをすべて「Vehicle」と呼ぶことはできません。
オブジェクトには名前すらないため、直接アクセスすることはできません。オブジェクト参照を通じて間接的にのみオブジェクトにアクセスできます。
オブジェクト、参照、およびそれらの間の関係を生き生きと説明するために、あまり適切ではないかもしれない比喩を作ることができます。その物体は非常に大きな風船のようなもので、大きすぎて私たちには捕まえることができません。参照変数は、風船を結ぶために使用できるロープです。
最初のステートメントのみが実行され、2 番目のステートメントが実行されない場合、このとき作成される参照変数 veh1 はオブジェクトを指しておらず、その値は null になります。参照変数はオブジェクトを指すことも、null にすることもできます。
それはロープ、まだどの風船にも結ばれていないロープです。 2 番目の文を実行した後、新しい風船が作成され、ロープ veh1 に結び付けられます。ロープを掴むときは風船を掴むことになります。
別の文: h vehicle veh2;
は別のロープを作り、ボールをプレーしませんでした。別の文を追加すると:
veh2 = veh1;
は同点です。ここで、コピー動作が発生します。ただし、オブジェクト自体はコピーされず、オブジェクト参照のみがコピーされることに注意してください。その結果、veh2 も veh1 が指すオブジェクトを指します。 2 本のロープは同じ風船に結び付けられます。
次の文を使用して別のオブジェクトを作成すると:
veh2 = new Vehicle();
、参照変数 veh2 は 2 番目のオブジェクトを指すように変更されます。
上記の説明から推論すると、次の結論が得られます。
(1) オブジェクト参照は 0 または 1 つのオブジェクトを指すことができます (ロープを風船に結び付けることはできません、または風船に結び付けることはできます) );
(2) オブジェクトは、それを指す N 個の参照を持つことができます (バルーンを結ぶための N 個のロープが存在する可能性があります)。
次のステートメントを使用して using を使用します。
上記の推論によれば、veh1 は 2 番目のオブジェクトも指します。問題ない。問題は、最初のオブジェクトがどこにあるのかということです。それを保持するロープがなかったため、飛んでいきました。ほとんどの本には、Java のガベージ コレクション メカニズムによってリサイクルされると記載されています。
それは正確ではありません。正しく言えば、ガベージコレクションの対象になっています。実際にいつリサイクルされるかについては、ガベージ収集メカニズムの気分によって異なります。
このことから、次の発言は違法であると考えられますよね?少なくともそれは無駄ですよね?
新しい車両();
不正解です。合法で利用可能です。たとえば、印刷のためだけにオブジェクトを作成する場合、それを参照変数に結び付ける必要はありません。最も一般的なのは、文字列を出力することです:
System.out.println("I am Java!");
文字列オブジェクト「I am Java!」は、出力後に破棄されます。この種のオブジェクトを一時オブジェクトと呼ぶ人もいます。
以上がオブジェクトと参照の間のいくつかの基本概念の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。

カプセルは3次元の幾何学的図形で、両端にシリンダーと半球で構成されています。カプセルの体積は、シリンダーの体積と両端に半球の体積を追加することで計算できます。このチュートリアルでは、さまざまな方法を使用して、Javaの特定のカプセルの体積を計算する方法について説明します。 カプセルボリュームフォーミュラ カプセルボリュームの式は次のとおりです。 カプセル体積=円筒形の体積2つの半球体積 で、 R:半球の半径。 H:シリンダーの高さ(半球を除く)。 例1 入力 RADIUS = 5ユニット 高さ= 10単位 出力 ボリューム= 1570.8立方ユニット 説明する 式を使用してボリュームを計算します。 ボリューム=π×R2×H(4

Java は、初心者と経験豊富な開発者の両方が学習できる人気のあるプログラミング言語です。このチュートリアルは基本的な概念から始まり、高度なトピックに進みます。 Java Development Kit をインストールしたら、簡単な「Hello, World!」プログラムを作成してプログラミングを練習できます。コードを理解したら、コマンド プロンプトを使用してプログラムをコンパイルして実行すると、コンソールに「Hello, World!」と出力されます。 Java の学習はプログラミングの旅の始まりであり、習熟が深まるにつれて、より複雑なアプリケーションを作成できるようになります。
