まず、パッケージは何ですか
1、パッケージの概要
オブジェクト指向プログラミング言語は客観的世界のシミュレーション、客観的世界で、メンバ変数は、オブジェクトの内部に隠されている、外の世界は、直接操作し、変更することはできません。パッケージは、クラスコードに対する保護バリアとして考えることができ、他のタイプのデータは、ランダムにアクセスされます。
この種のデータにアクセスするには、経由する方法を指定する必要があります。適切なカプセル化を理解し、維持、およびセキュリティコードを強化するためのコードが容易になり
2、原則
図3に示すように、パッケージング工程
1.プライベートメンバ変数を変更するためのキーワード。
2.メンバ変数にアクセスする必要性、getXXXメソッドの対応する対を提供するが、方法のsetXXX
第二に、パッケージのキー操作-private
1.問題の説明:人の年齢を定義する場合、不当な値がでてくるように設定されて防ぐことはできません。
ソリューション:秘密鍵はメンバ変数を変更することができ、保護する必要があります。
変更され、その後、このクラスの私的使用後は、まだ自由にアクセスすることができました。しかし!もはやカテゴリを越えて、この範囲の外に直接アクセスできるようにします。
間接アクセスプライベートメンバ変数、子供getter / setterメソッドのペアの定義です
- これは、のsetXXXかのgetXXXの命名規則と呼ばれている必要があります。
- ゲッターのために、パラメータは、戻り型と対応するメンバー変数を持っていません。
- セッターのために、あなたは値、パラメータの型、および対応するメンバ変数を返すことができません。
2、サンプルコード
Personクラス
Personクラス{公共 の文字列名; //名前 プライベートint型の年齢; //年齢 ます。public voidショー(){ System.out.printlnは( "私の名前:" +名+ "年齢:" +年齢); } //この設定データ年齢に専用部材の方法 公共ボイドsetAge(INT NUM){ IF(NUM <100 && NUM> = 9){//この場合、妥当であれば 年齢NUM =; }他{ するSystem.out.printlnは( "データ無理「);! } } //年齢データ取得、具体的ささやきこの方法メンバー パブリックINT getAge(){ 戻り年齢; } }
テストカテゴリ
day06.demo03パッケージ; publicクラスDemo03Person { メインパブリック静的ボイド(文字列[]引数){ 人人=)新しい人(新; person.show(); PERSON.NAME = "趙麗穎"; // person.age = -20 ; //プライベートコンテンツ、間違った文言に直接アクセス! person.setAge(20)と; person.show(); } }
業績
"D:\プログラムファイル\のJava \ jdkの-13.0.2 \ binに\ java.exeを"「-javaagent:D:\プログラムファイル\ジェットブレーンズ\のIntelliJ IDEA 2019.2 \ libに\ idea_rt.jar = 62064:D:\プログラムファイル\ジェットブレーンズ\のIntelliJ IDEA 2019.2 \ binに 「の-Dfile.encoding = UTF-8 -classpath C:\ oneDrive \ javaの\ SRC \生産\うち\ oneDrive day06.demo03.Demo03Person 私の名前:ヌル、年齢: 私の名前:趙麗穎年齢:20の 終了コードで仕上げプロセス0
図3は、プライベートキー定義を使用して練習します
クラスの定義
パッケージday06.demo03; / * 基本的なタイプの中でブール値のために、メソッドは、フォームゲッターisXxxで記述する必要があります、とのsetXXXは変わらないルール。 * / パブリッククラスの学生{ プライベート文字列名; //名前 のプライベートint型の年齢; //年齢 プライベート男性ブール; //男の子ではない 公共のボイドsetMale(ブールB){ MALE = B; } パブリックブールIsMale(){ リターンMALE; } 公共ボイドのsetName(文字列STR){ 名前= STR; } パブリック文字列のgetName(){ 戻り名; } 公共ボイドsetAge(INT NUM){ 年齢= NUM; } 公共のint getAge(){ 年齢を返します。 } }
テストクラスを定義します
パッケージday06.demo03。 パブリッククラスDemo04Student { パブリック静的無効メイン(文字列[] args){ 学生STU =新しい学生()。 stu.setName( "鹿晗"); stu.setAge(20)。 stu.setMale(真の); System.out.println( "姓名:" + stu.getName()); System.out.println( "年龄:" + stu.getAge()); System.out.println( "是不是爷们儿:" + stu.isMale()); } }
業績
"D:\プログラムファイル\のJava \ jdkの-13.0.2 \ binに\ java.exeを"「-javaagent:D:\プログラムファイル\ジェットブレーンズ\のIntelliJ IDEA 2019.2 \ libに\ idea_rt.jar = 62152:D:\プログラムファイル\ジェットブレーンズ\のIntelliJ IDEA 2019.2 \ binに」の-Dfile.encoding = UTF-8 -classpath C:\ OneDrive \ javaの\ SRC \ \生産\うちOneDrive day06.demo03.Demo04Student 姓名:晗鹿 年龄:20 是不是爷们儿:真の プロセスは、終了コードを終了0
第三に、メンバ変数名と同じ名前のパラメータの変数名さてどのように行いますか?
問題の1説明
私たちは、あなたがそれの意味を知っている名前を見れば、あなたは、メンバ変数名と一致を変更している場合は、名前を知って見ることを意図し、正式なパラメータ名のsetXXXメソッドは、規定を遵守していないことがわかりましたか?コードは以下の通りであります:
パブリッククラス学生{ プライベート文字列名; プライベートint型の年齢; 公共ボイドのsetName(文字列名){ 名前=名前。 } 公共ボイドsetAge(int型の年齢){ 年齢=年齢。 } }
修正やテストの後、我々は新たな問題を発見し、変数代入のメンバーに失敗しました。すなわち、のsetXXX()パラメータの変数名を変更した後、この方法は、メンバ変数の割り当てを与えるものではありません!これは、メンバ変数名が得られメンバ変数名と同じ名前のパラメータの変数名は、隠されているので、ある
変数名のメソッドが変数にアクセスすることができませんので、割り当てに失敗しました。だから、私たちはこの問題に同じ名前を解決するために、このキーワードを使用することができます
2、その意味
このクラスの現在のオブジェクトが、そのオブジェクトが参照する場所(アドレス値)を表す参照。
注意:メソッドが呼び出されたオブジェクトは、このメソッドは、そのオブジェクトを表します。つまり、このが表す人、コールする人です。
図2に示すように、このフォーマットを使用します
。このメンバ変数名;
図3に示すように、次のように隠されたコードの問題を解決するために、この修正された方法変数、メンバ変数を使用することです
Personクラス
day06.demo04パッケージ; / * 「近接の原則」に従い、プロセス変数と授業時間の同じ名前のローカル変数は、優先的にローカル変数を使用するメンバー。 :あなたは形式を使用する必要があり、このクラスのメンバ変数にアクセスする必要がある場合 。このメンバー変数名を *「これは誰で、呼び出すメソッドにより、」 / パブリッククラス人{ ; //自分の名前の文字列名を //パラメータ名人の名前です //メンバ変数名は彼の名前である 公共のボイドのsayHello(文字列名){ System.out.printlnは(名前+「、こんにちは私は」+ this.name); System.out.printlnは(この); } }
テストカテゴリ
day06.demo04パッケージ変更のため、 パブリッククラスDemo01Person { 公共の静的な無効メイン(文字列[] args){ 人人=新しい新しい人(); 自分の名前の設定// person.name =「王健林を」; person.sayHello(「Sicong」 ); のSystem.out.println(人物); //アドレス値 } }
業績
"D:\プログラムファイル\のJava \ jdkの-13.0.2 \ binに\ java.exeを"「-javaagent:D:\プログラムファイル\ジェットブレーンズ\のIntelliJ IDEA 2019.2 \ libに\ idea_rt.jar = 62613:D:\プログラムファイル\ジェットブレーンズ\のIntelliJ IDEA 2019.2 \ binに」の-Dfile.encoding = UTF-8 -classpath C:\ OneDrive \ javaの\ SRC \ \生産アウト\ OneDrive day06.demo04.Demo01Person 王思聪、你好我是王健林。 day06.demo04。人@ 9807454の day06.demo04.Person@9807454の プロセス終了コード0で終了
第四に、最適化パッケージ構築方法2--
定義フォーマット1、コンストラクタ
修飾コンストラクタ名(パラメータリスト){ //メソッドメンバ }
2、サンプルコード
学生カテゴリ
day06.demo04のためのパッケージ変更; / * 私達はキーワードnewでオブジェクトを作成するとき、コンストラクタメソッドは、実際には、コンストラクタメソッドを呼び出して、オブジェクトを作成するために設計されています。 フォーマット: パブリッククラス名(パラメータの型パラメータ名){ メソッド本体 } 注意: 1.コンストラクタの名前と場所は、クラス名とまったく同じであること、さらには同じ総額持っている必要があります 。2.ドゥ書き込みませんコンストラクタの戻り値の型を、でも、ボイド書き込みませ コンストラクタは、特定の戻り値を返すことができません。3. あなたが任意のコンストラクタを記述しない場合、コンパイラはパラメータなしで、コンストラクタを発表デフォルト設定されます。4.を、メソッド本体は全く何もしません。 学生パブリック(){} 5.一度にプログラムされる少なくとも1つのコンストラクタは、コンパイラは提示されないであろう。 前記構成の方法もオーバーロードすることができます。 オーバーロード:同じメソッド名が異なるパラメータリスト。 * / パブリッククラスの学生{ //メンバ変数 プライベート文字列名; プライベートint型の年齢; //引数なしのコンストラクタ 公共学生(){ System.out.printlnは(「引数なしのコンストラクタはそれを実行!」); } 完全なパラメータ//コンストラクタ 公共学生(文字列名、int型年齢){ System.out.printlnは(「それを実行するためのフル引数のコンストラクタメソッド!」); This.name =名; this.age =年齢; } //ゲッターセッター 公共ボイドのsetName(文字列名){ this.name =名; } パブリック文字列のgetName(){ 戻り名; } setAge(INT年齢)ボイド公共{ this.age =年齢; } 公共のint getAge(){ 戻り年齢。 } }
テストカテゴリ
day06.demo04パッケージ; パブリッククラスDemo02Student { 公共の静的な無効メイン(文字列[] args){ 学生STU1新しい新しい学生=(); //引数なしのコンストラクタ のSystem.out.println(「========== == "); 学生STU2 =新新学生("趙麗穎"20); //引数全体のコンストラクタ のSystem.out.println("名: "+ stu2.getName()+" 、年齢:「+ stu2.getAge( )); //あなたがオブジェクト間のメンバ変数データの内容を変更する必要がある場合、まだのsetXXXメソッドを使用する必要があります stu2.setAge(21); //変更する年齢 のSystem.out.println(「名:」+ stu2.getName()+ "年齢:" + stu2.getAge()); } }
結果:
"D:\プログラムファイル\のJava \ jdkの-13.0.2 \ binに\ java.exeを"「-javaagent:D:\プログラムファイル\ジェットブレーンズ\のIntelliJ IDEA 2019.2 \ libに\ idea_rt.jar = 62708:D:\プログラムファイル\ジェットブレーンズ\のIntelliJ IDEA 2019.2 \ binに 「の-Dfile.encoding = UTF-8 -classpath C:\ oneDrive \ javaの\ SRC \ \生産\ oneDrive day06.demo04.Demo02Studentから 引数なしのコンストラクタはそれを実行! ============ それを実行するために、全引数のコンストラクタメソッド! 名前:趙麗穎、年齢:20 名:趙麗穎、年齢:21の プロセス終了コード0で終了
3ノート
1.あなたはコンストラクタを提供しない場合は、システムには、コンストラクタのパラメータを与えないだろう。 2.あなたはコンストラクタを提供する場合、システムはもはや引数なしのコンストラクタを提供しないでしょう。 前記構成方法は、パラメータが定義されてもよい、オーバーロードされた、またはパラメータを定義しなくてもよいです
第五に、-JavaBeanのための標準コード
JavaBeanは、言語のクラスで書かれたJavaの標準仕様です。JavaBeanの出会いクラス要件および特定のクラスには、セットを動作させるための方法を提供し、メンバ変数を取得するには、パブリック、および引数のないコンストラクタでなければなりません。
クラスクラス名{パブリック //メンバー変数 //コンストラクタ 引数なし//コンストラクタ[する必要があります] //コンストラクタたパラメータ[提案] //方法メンバー //のgetXXX() //のsetXXX() }
次のように標準のJavaBeanクラスに基づいて作成し、学生のクラスは、例えば、標準のコードは次のようになります。
標準クラスは、通常、次の4つのコンポーネントがあります。
1.すべてのメンバ変数は、秘密鍵使用して変更する必要があります
子供ゲッター/セッターメソッドのペアの各メンバ変数の準備のために2を
引数なしのコンストラクタの調製
4.書き込みフルコンストラクタパラメータ
また、Java Beanとして知られているような標準クラス、
パッケージday06.demo05。 パブリッククラス学生{ プライベート文字列名; プライベートint型の年齢; //コンストラクタ什么都不选择 公共学生(){ } //コード-コンストラクタ全选 公共学生(文字列名、int型の年齢){ this.name =名; this.ageは年齢を=。 } //コード生成ゲッターとセッター パブリック文字列のgetName(){ 戻り名。 } 公共ボイドのsetName(文字列名){ this.name =名。 } 公共INT getAge(){ 戻り年齢; } 公共ボイドsetAge(int型の年齢){ this.age =年齢。 } }
テストクラス、次のように:
パブリッククラスDemo01Student { パブリック静的無効メイン(文字列[] args){ 学生STU1 =新しい学生()。 stu1.setName( "迪丽热巴"); stu1.setAge(20)。 System.out.println( "姓名:" + stu1.getName()+ "年龄:" + stu1.getAge())。 System.out.println( "================="); 学生STU2 =新しい学生( "古力娜扎"、21); System.out.println( "姓名:" + stu2.getName()+ "年龄:" + stu2.getAge())。 stu2.setAge(22)。 System.out.println( "姓名:" + stu2.getName()+ "年龄:" + stu2.getAge())。 } }
業績
"D:\プログラムファイル\のJava \ jdkの-13.0.2 \ binに\ java.exeを"「-javaagent:D:\プログラムファイル\ジェットブレーンズ\のIntelliJ IDEA 2019.2 \ libに\ idea_rt.jar = 63198:D:\プログラムファイル\ジェットブレーンズ\のIntelliJ IDEA 2019.2 \ binに 「の-Dfile.encoding = UTF-8 -classpath C:\ oneDrive \ javaの\ SRC \生産\うち\ oneDrive day06.demo05.Demo01Student 名:ディリーレバ、年齢:20 == =============== 名:クーリーNazha、年齢:21 名:クーリーNazha、年齢:22の 終了コード0で仕上げプロセス