狄慧201771010104《面向對象程序設計(java)》第四周學習總結
一、知識點總結:
1.類與對象概念
(1)類是構造對象的模板或藍圖,由類構造對象的過程稱為創建類的實例。
(2)對象:即數據,對象有三個特性,行為、狀態、標識。
2.類與對象的關系
(1)類是對象,事物的描述和抽象,是具有相同屬性和行為的對象集合。對象則是該類事物的實例。
(2)類是一個靜態的概念,類本身不攜帶任何數據。當沒有為類創建任何對象時,類本身不存在於內存空間中。對象是一個動態的概念。每一個對象都存在著有別於其它對象的屬於自己的獨特的屬性和行為。對象的屬性可以隨著它自己的行為而發生改變。
3.對象與對象變量的關系
Java中想使用對象就必須先構造對象,並指定其初始狀態。
4.通過實驗掌握了預定義類的基本使用方法,熟悉Math類、String類、math類、Scanner 類、LocalDate類的常用API。
5.掌握用戶自定義類的語法規則,包括實例域、靜態域、構造器方法、更改器方法、訪問器方法、靜態方法、main方法、方法參數的定義要求
(1)實例域:可將實例域定義為final,構建對象時必須初始化這樣的域。
(2)靜態域:絕大多數面向對象程序設計語言中,靜態域被稱為類域。如果將域定義為static,每個類中只有一個這樣的域。而每個對象對於所有的實例域卻都有自己的一份拷貝。
(3)靜態方法:靜態方法是一種不能向對象實時操作的方法。可以使用對象調用靜態方法。
(4)構造器方法:構造器與類同名。構造器總是伴隨著new操作符的執行被調用,而不能對一個已經存在的對象調用構造器來達到重新設置實例域的目的。
(5)更改器方法:調用更改器方法後對象的狀態會改變。
(6)訪問器方法:只訪問對象而不修改對象的方法。
(7)main方法:main方法不對任何對象進行操作。靜態的main方法將執行並創建程序所需要的對象。
6.重載
多個方法有相同的名字、不同的參數、便產生了重載。Java允許重載任何方法,而不只是構造器方法。
7.包
Java允許使用包將類組織起來。借助包可以方便地組織自己的代碼,並將自己的代碼與別人提供的代碼庫分開管理。而且使用包可以確保類名的唯一性。
8.文檔註釋技術
包括類註釋,方法註釋,域註釋,通用註釋,包與概述註釋等。
二、實驗目的與要求:
1、 理解用戶自定義類的定義;
2、掌握對象的聲明;
3、學會使用構造函數初始化對象;
4、使用類屬性與方法的使用掌握使用;
5、掌握package和import語句的用途。
三、實驗內容和步驟:
實驗1:
測試以下程序,掌握文件輸入輸出程序設計技術(文件輸入輸出,教材61-62).
import java.io.*; import java.util.*; public class FileWriteReadTest { public static void main(String[] args) throws IOException{ //寫入文件演示 PrintWriter out = new PrintWriter("myfile.txt"); out.println("姓名 高數 Java 數據結構 平均成績 總成績"); out.println("張三 20 30 40 0 0"); out.println("李四 50 60 70 0 0"); out.close();//輸出完畢,需要close //讀入文件演示 Scanner in = new Scanner(new File("myfile.txt"));//為myfile.txt這個File創建一個掃描器in int number = 1;//行號 System.out.println(in.nextLine()); while(in.hasNextLine()){//判斷掃描器是否還有下一行未讀取,該循環把文件的每一行都讀出 String line = in.nextLine();//讀出myfile.txt的下一行 System.out.print("第"+(++number)+"行的內容: "); Scanner linescanner = new Scanner(line);//行內容建立掃描器 linescanner.useDelimiter(" ");//使用空格作為分隔符 String name = linescanner.next(); String math = linescanner.next(); String java = linescanner.next(); String ds = linescanner.next(); String avg = linescanner.next(); String total = linescanner.next(); System.out.println("name="+name+" math="+math+" java="+java+" ds="+ds+" avg"+avg+" total="+total); } in.close();//讀入完畢,最後需要對其進行close。 } } |
mport java.io.*; import java.util.*; public class FileWriteReadTest { public static void main(String[] args) throws IOException{ //寫入文件演示 PrintWriter out = new PrintWriter("myfile.txt"); out.println("姓名 高數 Java 數據結構 平均成績 總成績"); out.println("張三 20 30 40 0 0"); out.println("李四 50 60 70 0 0"); out.close();//輸出完畢,需要close //讀入文件演示 Scanner in = new Scanner(new File("myfile.txt"));//為myfile.txt這個File創建一個掃描器in int number = 1;//行號 System.out.println(in.nextLine()); while(in.hasNextLine()){//判斷掃描器是否還有下一行未讀取,該循環把文件的每一行都讀出 String line = in.nextLine();//讀出myfile.txt的下一行 System.out.print("第"+(++number)+"行的內容: "); Scanner linescanner = new Scanner(line);//行內容建立掃描器 linescanner.useDelimiter(" ");//使用空格作為分隔符 String name = linescanner.next(); String math = linescanner.next(); String java = linescanner.next(); String ds = linescanner.next(); String avg = linescanner.next(); String total = linescanner.next(); System.out.println("name="+name+" math="+math+" java="+java+" ds="+ds+" avg"+avg+" total="+total); } in.close();//讀入完畢,最後需要對其進行close。 } }
實驗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成績
1 import java.util.Scanner; 2 public class StudentTest 3 { 4 @ 5 public static void main(String[] args) 6 { 7 Student[] staff = new Student[2]; 8 System.out.println("請輸入學生的信息"); 9 10 Scanner in = new Scanner(System.in); 11 for(int i=0;i<staff.length;i++) { 12 staff[i]=new Student(in.next(),in.next(),in.nextInt()); 13 } 14 System.out.println("name"+" "+"sex"+" "+"javascore"); 15 16 for (Student e : staff) 17 System.out.println(e.getName() +" "+e.getSex()+" "+e.getJavaScore()); 18 } 19 } 20 21 class Student 22 { 23 private String name; 24 private String sex; 25 private int javascore; 26 27 public Student(String n, String s, int j) 28 { 29 name = n; 30 sex = s; 31 javascore =j; 32 } 33 34 public String getName() 35 { 36 return name; 37 } 38 39 public String getSex() 40 { 41 return sex; 42 } 43 44 public int getJavaScore() 45 { 46 return javascore; 47 } 48 }
測試程序2:
l 編輯、編譯、調試運行程序4-3(教材116);
l 結合程序運行結果,理解程序代碼,掌握靜態域(netxtId)與靜態方法(getNextId)的用法,在相關代碼後添加註釋;
l 理解Java單元(類)測試的技巧。
測試程序3:
l 編輯、編譯、調試運行程序4-4(教材121);
l 結合程序運行結果,理解程序代碼,掌握掌握Java方法參數的用法,在相關代碼後添加註釋;
測試程序4:
l 編輯、編譯、調試運行程序4-5(教材129);
l 結合程序運行結果,理解程序代碼,掌握Java用戶自定義類的用法,掌握對象構造方法及對象使用方法,在相關代碼後添加註釋。
測試程序5:
l 編輯、編譯、調試運行程序4-6、4-7(教材135);
l 結合程序運行結果,理解程序代碼,掌握Java包的定義及用法,在相關代碼後添加註釋;
實驗3: 編寫長方形類Rectangle與圓形類Circle,其中Rectangle類設置私有屬性:width,length;Circle類設置私有屬性radius。編寫Rectangle類的帶參構造函數Rectangle(int width,int length), Circle類的帶參構造函數Circle(int radius),編寫兩個類的toString方法(Eclipse可自動生成)。上述2個類均定義以下方法:
求周長的方法public int getPerimeter()
求面積的方法public int getArea()
在main方法中完成以下任務:
(1) 輸入1行長與寬,創建一個Rectangle對象;
(2) 輸入1行半徑,創建一個Circle對象;
(3) 將兩個對象的周長加總輸出,將兩個對象的面積加總輸出。
1 package four; 2 import java.util.Scanner; 3 public class 實驗3 { 4 @SuppressWarnings("resource") 5 /** 6 * This program is the circumference and area of rectangles and circles. 7 * time 2018 9 24 8 * @author dihui 9 */ 10 public static void main(String[] args) { 11 Scanner sc = new Scanner(System.in); 12 System.out.println("請輸入矩形的x y:"); 13 int x = sc.nextInt(); 14 int y = sc.nextInt(); 15 System.out.println("矩形周長 "+Perimeter.getPerimeter(x,y)); 16 System.out.println("矩形面積"+Area.getArea(x,y)); 17 18 System.out.println("請輸入圓的r:"); 19 int r = sc.nextInt(); 20 System.out.println("圓周長 "+Perimeter.getPerimeter(r)); 21 System.out.println("圓面積"+Area.getArea(r)); 22 23 double c = Perimeter.getPerimeter(x,y)+Perimeter.getPerimeter(r); 24 double s = Area.getArea(x,y)+Area.getArea(r); 25 System.out.println("矩形與圓的周長和為:"+c); 26 System.out.println("矩形與圓的面積和為:"+s); 27 28 } 29 } 30 class Perimeter{ 31 public static double getPerimeter(double width, double height) { 32 return 2*(width + height); 33 } 34 35 public static double getPerimeter(int r) { 36 return 2*3.14*r; 37 } 38 39 } 40 class Area{ 41 public static double getArea(double width, double height){ 42 return width * height; 43 } 44 45 public static double getArea(int r) { 46 return 3.14*r*r; 47 } 48 }
四、實驗總結:
通過對本次實驗的學習與完成,我對類與對象的基礎概念有了更深的了解,學會了使用構造函數初始化對象,並掌握了使用類屬性與方法, 學會了package和import語句的用途。同時也掌握了用戶自定義類的語法規則,如實例域、靜態域、構造器方法、更改器方法、訪問器方法、main方法、方法參數等的定義要求。在本周的學習中,我深刻認識到通過閱讀並理解已有代碼的重要性,在以後的Java學習中,我會學會將已有代碼中的方法更好的掌握,將其轉化為自己的知識,舉一反三,並且還要自己多動手編寫。
狄慧201771010104《面向對象程序設計(java)》第四周學習總結