201871010111-劉佳華《面向對象程序設計(java)》第四周學習總結java
實驗時間 2019-9-20編程
第一部分:總結第四章理論知識函數
4.1:類與對象的概念。oop
類:類是構造對象的模板。由類構造對象的過程稱爲建立類的實例。學習
對象:想要使用oop,必定要清楚對象的三個特性:測試
1)對象的行爲:對象的行爲使用可調用的方法定義的。this
·2)對象的狀態:每一個對象都保存着描述當前特徵的信息。spa
3)對象標識:如何辨明具備相同行爲的類似性。設計
4.2:類之間的關係。3d
常見關係有:依賴(「uses-a」)、聚合("has-a'')、繼承("is-a")。
4.3:使用預約義類。
已學過的預約義類如math,Math,String,Scanner等。
1)對象與對象變量。
在Java語言中,使用構造器構造新實例。構造器是類中一個特殊的方法,生成並初始化對象,它的方法名與類名相同。
想要構造一個Data對象(定義在java.util中),須要在構造器前加上new操做符:new Data()
若定義爲Data deadline;則該語句錯誤。
可將一個對象變量設置爲null,表示該對象變量未引用任何變量,如deadlin=null。
4.4:更改器與訪問器。
更改器:修改實例域。前綴set,更改當前類中的屬性。
訪問器:更改實例域。前綴get。
4.4:用戶自定義類;
4.5:靜態域與靜態方法;
4.6:方法參數 ;對象構造
4.7:包
4.8:類路徑
4.9:文檔註釋
4.10:類設計技巧
第二部分:實驗部分
實驗名稱:實驗三 類與對象的定義及使用
1. 實驗目的:
(1) 熟悉PTA平臺線上測試環境;
(2) 理解用戶自定義類的定義;
(3) 掌握對象的聲明;
(4) 學會使用構造函數初始化對象;
(5) 使用類屬性與方法的使用掌握使用;
(6) 掌握package和import語句的用途。
2.實驗內容和步驟
實驗1 採用我的帳號登陸https://pintia.cn/,使用綁定碼620781加入PTA平臺NWNU-2019CST1教學班(西北師範大學 計算機科學與工程學院 2018級計算機科學與技術),完成《2019秋季西北師範大學面向對象程序設計程序設計能力測試1》,測試時間50分鐘。
實驗2 導入第4章示例程序並測試。
測試程序1:
l 編輯、編譯、調試運行程序4-2(教材104頁);
l 結合程序運行結果,掌握類的定義與類對象的用法,並在程序代碼中添加類與對象知識應用的註釋;
l 嘗試在項目中編輯兩個類文件(Employee.java、 EmployeeTest.java ),編譯並運行程序。
l 參考教材104頁EmployeeTest.java,設計StudentTest.java,定義Student類,包含name(姓名)、sex(性別)、javascore(java成績)三個字段,編寫程序,從鍵盤輸入學生人數,輸入學生信息,並按如下表頭輸出學生信息表:
姓名 性別 java成績
課本案例編譯運行結果以下:
import java.util.Scanner; /** * This program tests the Student class. * time 2019 9 21 * @author liu jiahua */ public class Main { public static void main(String[] args) { Student []stu=new Student[2]; System.out.println("please input name,sex,score"); Scanner in =new Scanner(System.in); for (int i=0;i<stu.length;i++){ stu[i]=new Student(in.next(),in.next(),in.nextFloat()); } System.out.println("name"+" "+"sex"+" "+" "+"javascore"); for (Student o : stu) System.out.println(o.getName() +" "+o.getSex()+" "+o.getJavaScore()); in.close(); } } class Student{ private String name; private String sex; private float javascore; public Student(String n, String s, float m) { name = n; sex = s; javascore =m; } public String getName(){ return name; } public String getSex(){ return sex; } public float getJavaScore(){ return javascore; } }
運行代碼結果以下:
測試程序2:
l 編輯、編譯、調試運行程序4-3(教材116);
l 結合程序運行結果,理解程序代碼,掌握靜態域(netxtId)與靜態方法(getNextId)的用法,在相關代碼後添加註釋;
l 理解Java單元(類)測試的技巧。
運行結果以下:
靜態域的使用方法:
若是將域定義爲static,每一個類中只有這樣的一個域。而每個對象對於全部的實例域卻都有本身的一個拷貝。每一個僱員都有一個本身的id域,但這個類的全部實例將共享一個nextId域。可是,只有一個靜態域nextid,即便沒有一個僱員對象,靜態域nextId也存在。它屬於類,而不屬於任何獨立的對象。
靜態方法的用法:
靜態方法是一種不能想對象實施操做的方法。在下面兩種狀況下可使用靜態方法:
(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-六、4-7(教材135);
l 結合程序運行結果,理解程序代碼,掌握Java包的定義及用法,在相關代碼後添加註釋;
1)實例4-6
包的放法:
運行結果:
程序分析:
在這個程序當中介紹咱們介紹了怎麼使用類的導入,可使用import語句導入一個特定的類火整個包,Import語句是一種應用包含在保重的類的簡明描述,一旦使用了import語句,在使用類時,就沒必要寫出包的全名了。並且在實驗當中也有將類放入包中,就必須將包的名字放在源文件的開頭,包中定義類的代碼以前。若是沒有在源文件中放置package語句,這個源文件中的類就被放置在一個默認包中。默認包是一個沒有名字的包。再次以前,咱們定義的全部類都在默認包中。
4. 實驗總結:
經過這個周的學習,我明白了用戶自定義類是如何去定義的。在第三章我已經學習瞭如何設計複雜應用程序所須要的各類主力類,同是,這些類沒有main方法,卻有本身的實例域和實例方法。在學習了類以後,有學習了靜態域和靜態方法的用法,在這一屆的學習過程中,以爲很有收穫,以爲比較簡單易懂,瞭解了靜態域、靜態常量、靜態方法、工廠方法和main方法的概念,並經過實例程序去真正理解了這些概念。接着學習了對象構造,在這一節主要就學習了參數化,初始化塊。最後又學習了包,雖然在以前已經解除了包這個概念,但在這一節有學習了新的概念,好比說類的導入、靜態導入、將類放入包中。這些都是本身在自主學習,但願在之後老師的講解過程當中有更大的進步。