201871010111-劉嘉華学習要約の「オブジェクト指向プログラミング(Java)の」第4週
実験時間 201 。9 -9- 20であります
パートI:第IV章は、理論的な知識をまとめたもの
4.1:クラスとオブジェクトの概念。
クラス:クラステンプレートオブジェクトの構築です。プロセスは、クラスのインスタンスを作成するように構成されたオブジェクト・クラスと呼ばれます。
オブジェクト:OOPを使用するには、オブジェクトの三つの特徴をクリアしてください:
動作1)目的:定義された方法を使用してオブジェクトの動作を呼び出すことができます。
状態-2)は、オブジェクト:各オブジェクトは、現在の機能を記述する情報を保持しています。
3)オブジェクト識別子:類似点が同じ振る舞いを持つ特定する方法。
4.2:クラス間の関係。
一般的な関係は以下のとおりです。依存性( "-Aを使用しています")、重合は、( "(「-aがある) '-Aを持っている)、継承されました"。
4.3:事前に定義されたクラスを使用します。
私たちは、このような数学、数学、文字列、スキャナなどというように事前に定義されたクラスを学んできました。
1)オブジェクトとオブジェクト変数。
Java言語では、コンストラクタを使用して新しいインスタンスを構築します。クラスのコンストラクタは、生成したオブジェクト、初期化するために、特別な方法でそのクラス名と同じのメソッド名を。
私たちは、コンストラクタの前にnew演算子を追加する必要があり、(java.utilでの定義された)データオブジェクトを構築したい:新しいデータを()
データ期限として定義されている場合、ステートメントが間違っています。
オブジェクト変数は、オブジェクト変数は、deadlin = NULLとして、任意の変数を参照しないことを示す、NULLに設定されてもよいです。
4.4:アクセサに変更します。
変更:インスタンスフィールドを編集します。プレフィックスセットは、現在のクラスのプロパティを変更します。
アクセス制御:インスタンスフィールドを変更します。プレフィックスが得ます。
4.4:ユーザ定義のクラス;
4.5:staticフィールド、および静的メソッド。
4.6:メソッドのパラメータ、オブジェクトコンストラクタ
4.7:パッケージ
4.8:クラスパス
4.9:ドキュメントのコメント
4.10:クラスデザインのヒント
パートII:実験の部
実験名:オブジェクトを用いた実験の3種類の定義と使用
1.目的:
(1)オンラインテスト環境のためのPTAのプラットフォームに精通しています。
(2)ユーザ定義の理解クラス。
(3)オブジェクト宣言を把握します。
(4)オブジェクトを初期化するコンストラクタを使用することを学びます。
(5)マスターを使用してのクラス属性および方法を使用して、
(6)パッケージとインポートステートメントの使用を習得します。
2. 実験の詳細と手順
実験 1 個人アカウントのログイン使用 https://pintia.cn/を、使用して結合コード 620 781を結合するために PTAプラットフォーム NWNU-2019CST1のクラス(西北師範大学 コンピュータサイエンスとエンジニアリング 2018」が完了し、レベルのコンピュータ科学と技術) 2019北西秋通常のプログラミングオブジェクト指向プログラミング機能テスト 1」、50分の試験時間。
実験 2は、 第4章と試験サンプルプログラムで導入されました。
試験手順 1 :
L編集、コンパイル、デバッグ、実行中のプログラム4-2(教科書104)。
Lは、クラス定義およびクラスオブジェクトの使用を習得し、プログラムコードにおける知識アプリケーションのオブジェクトとクラスに注釈を付けるために、プログラムの結果を合わせました。
lはプロジェクト内のプログラムをコンパイルして実行、文書(Employee.java、EmployeeTest.java)の2種類を編集してみてください。
リットルの参考資料104 EmployeeTest.java、デザインStudentTest.javaは、プログラムを書く、名前(名)、性別(ジェンダー)、javascore(Javaのパフォーマンス)の3つのフィールドが含まれている学生のクラスを定義し、キーボード入力からの留学生の数、入力された学生情報以下の学生情報テーブルヘッダの出力に応じて:
名前 セックス Javaの結果を
次のようにケースの教科書には、コンパイルされた結果は以下のとおりです。
- 教科書のプログラムのプログラムコードを適応として:
インポートjava.util.Scanner; / ** *このプログラムは、学生のクラスをテストします。 *時刻2019年9 21 * @author 劉嘉華の * / パブリック クラスメイン{ 公共 静的 ボイドメイン(文字列[]引数) { 学生[] STU = 新しいスチューデント[2 ]。 System.out.println( "入力名前、性別、スコアを喜ば" ); スキャナ = 新しいスキャナ(System.in); 用(int型 ; iがstu.lengthを<I ++はiが0 = {) STU [I] =新しい学生(in.next()、in.next()、in.nextFloat()); } のSystem.out.println( "名前" + " "+"性別"+" "+" "+" javascore" )。 用(学生0:STU) のSystem.out.println(o.getName() + " "+ o.getSex()+"" + o.getJavaScore()); in.close(); } } クラスの学生{ プライベート文字列名; プライベート文字列のセックス。 プライベート フロートjavascore。 公共学生(文字列のnは、文字列sの、N; セックス =のS; javascore = M。 } パブリック文字列のgetName(){ 戻り名。 } パブリック文字列getSex(){ 戻り性別; } 公共 フロートgetJavaScore(){ 戻りjavascore。 } }
次のようにコードを実行します。
試験手順2:
L編集、コンパイル、デバッグ、実行中のプログラム4-3(教科書116)。
プログラムlの合成結果、静的フィールド(netxtId)、及び静的メソッド(getNextId)の使用を追跡し、関連するコードのコメントを追加認識プログラムコードと
リットルの理解スキルのJava単位(クラス)をテストします。
結果は以下の通りであります:
静的フィールドを使用します。
フィールドはstaticとして定義されている場合、各クラスにのみ、そのようなドメイン。そして、各ドメインのすべてのインスタンスのオブジェクトが、自分自身のコピーを持っています。各従業員は、独自のドメインIDを持っていますが、このクラスのすべてのインスタンスがNEXTIDドメインを共有します。しかし、唯一の静的フィールドNEXTID、でも従業員オブジェクトずに、静的フィールドがありNEXTID。それはクラスにではなく、任意の別のオブジェクトに属します。
staticメソッド:
静的メソッドは、操作対象の実装方法を望んでいないです。どちらの場合も、あなたは、次の静的メソッドを使用することができます。
(1)一个方法不予要访问对象状态,其所需参数都是通过显示参数提供(例如:Math.pow)
(2)一个方法只需要访问类的静态域(例如:Employee.getNextId)
测试程序3:
l 编辑、编译、调试运行程序4-4(教材121);
l 结合程序运行结果,理解程序代码,掌握Java方法参数的用法,在相关代码后添加注释;
/** * This program demonstrates parameter passing in Java. * @version 1.01 2018-04-10 * @author Cay Horstmann */ public class ParamTest { public static void main(String[] args) { //该方法不能修改数值参数 System.out.println("Testing tripleValue:"); double percent = 10; System.out.println("Before: percent=" + percent); tripleValue(percent); System.out.println("After: percent=" + percent); //该方法可以改变对象参数的状态 System.out.println("\nTesting tripleSalary:"); var harry = new Employee("Harry", 50000); System.out.println("Before: salary=" + harry.getSalary()); tripleSalary(harry); System.out.println("After: salary=" + harry.getSalary()); //该方法可以将新对象附加到对象参数 System.out.println("\nTesting swap:"); var a = new Employee("Alice", 70000); var b = new Employee("Bob", 60000); System.out.println("Before: a=" + a.getName()); System.out.println("Before: b=" + b.getName()); swap(a, b); System.out.println("After: a=" + a.getName()); System.out.println("After: b=" + b.getName()); } public static void tripleValue(double x) // doesn't work { x = 3 * x; System.out.println("End of method: x=" + x); } public static void tripleSalary(Employee x) // works { x.raiseSalary(200); System.out.println("End of method: salary=" + x.getSalary()); } public static void swap(Employee x, Employee y) { Employee temp = x; x = y; y = temp; System.out.println("End of method: x=" + x.getName()); System.out.println("End of method: y=" + y.getName()); } } class Employee // simplified Employee class { private String name; private double salary; public Employee(String n, double s) { name = n; salary = s; } public String getName() { return name; } public double getSalary() { return salary; } public void raiseSalary(double byPercent) { double raise = salary * byPercent / 100; salary += raise; } }
运行结果如下:
测试程序4:
l 编辑、编译、调试运行程序4-5(教材129);
结合程序运行结果,理解程序代码,掌握Java用户自定义类的用法,掌握对象构造方法及对象使用方法,在相关代码后添加注释。
对程序的理解:
在这个程序当中,用了Java的第三种初始化数据域的方法,称为初始化块。在一个类的声明中,可以包含多个代码块。只要构造类的对象,这些块就会被执行。在这个程序的25行开始,无论使用哪个构造器类对象,Id域都在对象初始化块中被初始化。首先运行初始化块,然后才运行构造器的主题部分。
在这个程序清单中展示了很多特性:重载构造器、用this(...)调用另一个构造器、无参数构造器、对象初始化块、静态初始化块、实例域初始化等。
测试程序5:
l 编辑、编译、调试运行程序4-6、4-7(教材135);
l 结合程序运行结果,理解程序代码,掌握Java包的定义及用法,在相关代码后添加注释;
1)实例4-6
包的放法:
运行结果:
程序分析:
在这个程序当中介绍我们介绍了怎么使用类的导入,可以使用import语句导入一个特定的类火整个包,Import语句是一种应用包含在保重的类的简明描述,一旦使用了import语句,在使用类时,就不必写出包的全名了。而且在实验当中也有将类放入包中,就必须将包的名字放在源文件的开头,包中定义类的代码之前。如果没有在源文件中放置package语句,这个源文件中的类就被放置在一个默认包中。默认包是一个没有名字的包。再次之前,我们定义的所有类都在默认包中。
4. 实验总结:
通过这个周的学习,我明白了用户自定义类是如何去定义的。在第三章我已经学习了如何设计复杂应用程序所需要的各种主力类,同是,这些类没有main方法,却有自己的实例域和实例方法。在学习了类之后,有学习了静态域和静态方法的用法,在这一届的学习过程当中,觉得颇有收获,觉得比较简单易懂,了解了静态域、静态常量、静态方法、工厂方法和main方法的概念,并通过实例程序去真正理解了这些概念。接着学习了对象构造,在这一节主要就学习了参数化,初始化块。最后又学习了包,虽然在之前已经解除了包这个概念,但在这一节有学习了新的概念,比如说类的导入、静态导入、将类放入包中。这些都是自己在自主学习,希望在以后老师的讲解过程中有更大的进步。