クラスやオブジェクトの知識点は比較的難しく、含まれる知識点が非常に広範囲かつ複雑であるため、ここではそれらを単一の知識点として学習します。この知識ポイントをさまざまなビデオ、さまざまな資料を通じて、さまざまな特性に応じて学習します。
1. クラスとオブジェクトとは何かを理解します。
クラスはオブジェクトのクラスのテンプレートであり、オブジェクトのクラスが持つプロパティとメソッドを定義します。
以下の図を参照してください。スタックとヒープのナレッジ ポイントを組み合わせると、user4 がスタックに格納され、new Class(~) がヒープに格納されます。
手続き型とオブジェクト指向:
コンストラクター (構築メソッド):
一般に、クラスの属性はメンバー変数とも呼ばれます。属性のスコープはクラス本体全体であり、メンバー変数を定義するときに、アライメント初期化がない場合、Java はデフォルト値を使用します。例: o、null (通常、null はオブジェクトのデフォルト値です。)
そして、クラス内のプロパティを初期化するにはどうすればよいでしょうか? コンストラクターを使おう!
コンセプト:
コンストラクターの作成に関する注意事項:
例: 2 番目の図を見てください。x、y が 2 つあります。これは 2 つのスペースを作成するのと同じです。そして、x、yと名付けました。
Getter メソッドと Setter メソッドをコンストラクター メソッドと比較します。
JVM メモリ分析:
Java 仮想マシンのメモリは、次の 3 つの部分に単純に分割できます。
仮想マシンスタック(JVMスタック)、ヒープ、メソッド領域メソッド領域。
それらの概要を以下の図に示します。
プログラム実行のプロセス メモリ分析 (強調):
このセクションの知識ポイントは、以前に学習した知識ポイントを要約したものです。次の例を通して、プログラム実行中のさまざまな部分のメモリ変更についてよく説明します。!
概要:(覚えておく必要があります)
同じクラスの各オブジェクトには、スペースを格納するための異なるメンバー変数があります。
同じクラスのすべてのオブジェクトは、そのクラスのメソッドを共有します。
クラス内の属性 (インスタンス変数のみを考慮) の割り当てプロセス:
実際、これは初期化とインスタンス化の違いです。クラス内の属性はインスタンス変数と呼ばれ、メンバー変数とも呼ばれます。
パラメータ受け渡しメカニズム:
2 つのパス値に分割されます。ただし、共通しているのは、値渡しはすべて「値渡し」であるということです。
別の場所:
さらに、参照型パラメータが渡された場合、元のパラメータ オブジェクトは null スペースを指します。これには Gc メカニズムが関係します。(つまり、ガベージ コレクション メカニズムです。)
ガベージコレクションのメカニズム:
Java のメモリ管理の大部分は、実際にはヒープ内のオブジェクト インスタンスの管理です。これには、オブジェクト空間の割り当てと割り当て解除が含まれます。(注意! これはオブジェクト スペースの割り当てである必要があります! これは初期化や作成ではありません。作成とは、たとえば Person クラスです。オブジェクトの作成は次のようになります: person user。person 自体がスペースを作成しており、user はその名前ですこのスペースの名前。変数についての以前の理解では、駐車スペースの例でその名前を非常によく説明しました。)
インタビューの質問: 初期化とインスタンス化の違いは何ですか?
メモリーリーク:
メモリ リークが発生する可能性が最も高いのは、次の 3 つの状況です。
実際、後者のタイプ、または 2 番目のタイプを含むライフサイクルが長すぎる場合、特に接続が閉じられていないプロセスの場合、メモリ リークが発生する可能性があります。
静的とこれ:
これの本質は、作成されたオブジェクトのアドレスです。(実際には、これは現在のオブジェクトのアドレスです。)
これは静的メソッドでは使用できません。
静的に宣言されたメンバー変数は静的メンバーであり、クラス変数とも呼ばれます。(クラス変数のライフサイクルはクラスのライフサイクルと同じです)
特徴: このクラスの共通変数であり、すべてのインスタンスで共有されます。
このクラスのすべてのオブジェクトには、このクラスのすべてのオブジェクトで共有される静的メンバー変数が 1 つだけあります。
インスタンス化する必要はなく、クラス名を使用して直接呼び出されます。
非静的プロパティとメソッドを静的メソッド内に配置することはできません。
コンストラクターはオブジェクトを初期化するために使用されます。
変数:
変数は通常、ローカル変数 (スタックに保存される)、メンバー変数 (インスタンス変数とも呼ばれ、ヒープに保存される)、および静的変数 (クラス変数とも呼ばれ、スタックに保存される) に分類されます。
パッケージの仕組み:
パッケージのメカニズムにより、クラスの重複の問題が解決されます。パッケージはクラスに相当し、フォルダーはファイルに相当します。
import を使用してパッケージをインポートします。import com.util.* を使用する場合は注意が必要です。* を使用するとコンパイル速度は低下しますが、実行速度は低下しません。
質問: 静的プロパティもインポートできます。Java.lang パッケージはインポートせずに直接使用できます。
2、オブジェクト指向プログラミングの 3 つの主要な特徴
オブジェクト指向プログラミングには、継承、カプセル化、ポリモーフィズムという 3 つの特徴があります。
継承は次のように拡張されます。
Java にはクラスの多重継承はありませんが、インターフェイスの多重継承はあります。
サブクラスは親クラスを継承し、親クラスのすべてのプロパティとメソッドを取得できます (プライベートなものは許可されません)。
定義されたクラスが extends を呼び出さない場合、その親クラスは java.lang.Object になります。
インスタンスオブ演算子:
これは、左側にオブジェクト、右側にクラスを持つブール型の二項演算子です。左側のオブジェクトが右側のクラスによって作成されたオブジェクトである場合、True を返します。
メソッドのオーバーライド:
たったの3点。自分で調べた覚えがありません。これは何度も何度も言われてきました。
最後のキーワード:
継承と構成:
定義したクラスのコードは継承することで簡単に再利用できますが、もちろん組み合わせて再利用することも可能です。
実際、合成とは、あるクラス内に別のクラスのオブジェクトのインスタンスを作成し、このオブジェクトをテスト クラスに追加することです。以下に示すように:
概要: 組み合わせはより柔軟であり、継承には親クラスが 1 つしかありませんが、組み合わせには複数の属性を含めることができ、それぞれに独自の利点があります。OB
カプセル化:
なぜカプセル化を学ぶ必要があるのでしょうか?
カプセル化とは:
カプセル化を実現する方法:
実際には、権限修飾子を使用して定義されます。
カプセル化を使用した例:
組み合わせにはアプリケーション シナリオもあり、顧客クラスとアカウント クラスの作成など、構成の関係で使用されます。これら 2 つのクラスは独立しています。顧客とアカウントクラスを相互に関連付ける方法。設計から組み合わせまでの知識ポイント:
権限修飾子:
クラスのプロパティをプライベートとして設定すると、クラスのプロパティにはテスト クラスの setter メソッドを介してのみアクセスできます。
優先順位: private>default(デフォルトでは修飾子なし)>protected>public
クラス: パブリックおよびデフォルトの装飾のみを使用できます。
クラスの内部メンバー: 4 つのアクセス許可を変更に使用できます。
JSP では、カプセル化が反映されます。
たとえば、データベースに接続する場合、POJO クラスは JavaBean と呼ばれます。
オブジェクトクラス:
これは、すべての Java クラスのルート基本クラスです。コンストラクターを除くすべてのプロパティとメソッドは継承されます。ただし、すべてのクラスが使用できるわけではありません。
toString():
Object クラスで定義され、戻り値の型は String 型です。返される内容は、クラス名とその参照アドレスです。ただし、実際のアプリケーションでは、toString メソッドをオーバーライドすることがよくあります。
に等しいおよび ==:
オブジェクト内の == は同じオブジェクトかどうかを判断することを意味します。[等しい] は、2 つのオブジェクトが同じ論理値を持つかどうかを判断します。
違い: 「=」は基本データ型に使用され、equals は参照データ型に使用されます。例: String は参照データ型です。文字列が等しいかどうかを比較するには、equals を使用します。
手動プロジェクトトレーニング: (学習強度のテスト)
参考ブログ:
参考ビデオ:
92-オブジェクト指向 (上級)-プロジェクト 2: ピンイン電子商取引顧客管理システムのデモンストレーションとコード実装_哔哩哔哩_bilibili
ミッションターゲット:
- Customer は、顧客情報をカプセル化するために使用されるエンティティ オブジェクトです。
- CustomerList は Customer オブジェクトの管理モジュールであり、内部で配列を使用して Customer オブジェクトのグループを管理し、CustomerView が呼び出す追加、変更、削除、および走査の対応するメソッドを提供します。
- CustomerView はメインモジュールであり、メニュー表示とユーザー操作の処理を担当します。
タスクの UML クラス図は次のとおりです。
これらのメソッドの具体的な役割は次のとおりです。
後の 3 つについては説明しません。非常に単純で、属性に一致する戻り値です。
これらのメソッドを作成した後、単体テストを実行できます。
ビュービューページを実現するための3番目のステップからは、一時的に書き込むことができません。主に最初の 2 つを実現します。最初の 2 つの方法についてはすでに説明しました。最初の 2 ページを書いたら、効果をテストできます。
これは、入力するメインのインターフェイス ビューです。このビューによって設計された知識ポイントは非常に興味深いものです。取り出して試すことができます。
switch ステートメントが関係しています。selectメソッドの使い方!いい案!
問題が発生しました:
deleteメソッド内で。判定文を追加しようかとも思いましたが、要素が1つしかない場合はnullに代入するだけです。しかし、最終的には何か問題が発生しました。一番良い方法は、以下の for ループを判定条件としても利用できることです。
public boolean delete(int index){
if(index<0 || index>total){
return false;
}
//涉及的思想就是,当只有一个元素时,这个for循环就不运行。(这个用法请牢记!)
//这样,直接运行下面,把这个元素赋值为null。
//删除的操作,有两步:第一步,找到删除的元素。将其指向下一位元素。(如果只有一个元素,这一步就跳)
第二步,将下一位元素指向null。并把元素总数减一。
for(int i=index;i<total;i++){
customers[i]=customers[i+1];
}
customers[total]=null;
total--;
return true;
}