《Java技術》第三次作業
(一)學習總結
1.書中對面向對象封裝性的定義為:指把對象的屬性和行為看成一個密不可分的整體,把不需要讓外界知道的信息隱蔽起來。簡單來說,就是定義的一些對象,只有在本類中才可以使用,在外界是不可以訪問和調用的。
Java中通過使用private和public聲明來區別私有和公由,例如:
class setting{private int a=1;public int b=1;
}
public class Test {public static void main(String[] args){setting get;int c,d;c=get.a;d=get.b;}
}
這段代碼是不能通過編譯的,會提示“a不可視”,即"a"不能被調用:
2.閱讀下面程序
(1)如代碼:
class A{private int secret = 5;
}
public class Test{public static void main(String args[]){A a = new A();System.out.println(a.secret++);}
}
此段代碼不能通過編譯,提示“A.secret不可視”,因為封裝性的緣故,在Test類的main()方法中是不能調用".secret"的。
(2)如代碼:
public class Test{int x = 50;static int y = 200;public static void method(){System.out.println(x+y);}public static void main(String args[]){Test.method();}
}
此段代碼不能通過編譯,因為"x"為非靜態變量,不能對非靜態變量進行靜態引用。
3.修改后的代碼如下:
class Book{static int bookId;String bookName;double price;// 聲明靜態 變量static int count;//定義靜態代碼塊對靜態變量初始化static {count=0;bookId=1000;}//構造方法public Book(){}public Book(String bookName,double price) {this.bookName=bookName;this.price=price;count++;} public int getBookId(){return ++bookId;}public String getBookName() {return bookName;}public void setBookName(String bookName) {this.bookName = bookName;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}//定義方法求圖書總冊數public static int totalBook(){return count;}//重寫toString方法public String toString(){return "書名為:"+getBookName()+"圖書編號為:"+getBookId()+",價格為:"+getPrice();}
}
public class Test{public static void main(String args[]){ Book[] books = {new Book("c語言程序設計",29.3),new Book("數據庫原理",30),new Book("Java學習筆記",68)};System.out.println("圖書總數為:"+ Book.totalBook()); for(Book book:books){System.out.println(book.toString());}}
}
4. 單例設計模式只能有自己創建的唯一一個實例,并且必須給所有其他對象提供這一實例。
class Sun{private static Sun instance = new Sun() ;private Sun(){}public static Sun getInstance(){return instance ;}
}
5.如下代碼:
public class Test {String str = new String("你好 ");char[] ch = { 'w','o','l','l','d' };public static void main(String args[]) {Test test = new Test();test.change(test.str, test.ch);System.out.print(test.str);System.out.print(test.ch);}public void change(String str, char ch[]) {str = "hello";ch[0] = 'W';}
}
運行結果為:“你好 Wolld”
為什么不為“hello Wolld”呢?原因很簡單,通過調用傳參,傳遞的為str字符串和ch[]字符數組的地址,所以修改字符數組,即為修改內容;而修改的字符串內容,可以理解為是在修改形參,并不影響實參的值,因為傳遞的是內容而不是地址。
6.使用構造方法后,我覺得很多的程序變的更加清晰,即使出錯也可以很快地確認錯誤的位置,十分方便。還有就是感覺前邊的知識不能忘啊,例如比較,比較double數值是十分重要的一個點,用到了很多次。
(二)實驗總結
1.按照下列要求完成類的設計
(1)設計一個日期類,用于記錄年、月、日,提供對日期處理的常用方法(日期輸出格式xxxx-xx-xx)。
(2)設計一個職工類,該職工類至少具有下面的屬性:職工號,姓名,性別,生日,工作部門,參加工作時間,設計相應的方法。
(3)設計一個部門類,包括下列屬性:部門編號,部門名稱,經理,設計相應方法。
(4)設計一個測試類,采用對象數組模擬一個擁有兩個部門,10個職工的單位,實現對相關信息的查詢功能。
- 程序設計思路:
(1)日期類:用set和get方法記錄年月日即可;
(2)職工類:用set和get方法記錄職工號、姓名、性別,并用Date(日期類)定義生日和工作時間,用Department(部門類)定義所屬部門;
(3)部門類:用set和get方法記錄部門編號、部門名稱,并用Employee(職工類)定義經理;
(4)測試類:輸入數據并輸出。
2.設計一個計算工具類,要求:
(1)為用戶提供幾個常見的幾何體面積和體積的算法(如球的體積和表面積,圓柱體的體積和表面積,圓錐體的體積和表面積)(可以學習使用static關鍵字)
(2)設計一個測試類,給出幾個不同的圓柱體,圓錐體,球體的尺寸,用計算工具類分別求它們體積的累加和與表面積的累加和。
(3)設計一個測試類,隨機產生球,圓柱、圓錐體的尺寸,模擬考試,要求用戶回答它們的體積和面積,并判斷用戶的回答是否正確
- 程序設計思路:
(1)輸入類:將半徑、高、母線長等參數輸入;
(2)計算類:定義π的值為3.14,調用輸入類中的參數,對所有公式進行計算;
(3)測試類:分兩個部分。第一個部分,輸入參數存入輸入類,調用計算類中的公式進行計算;第二個部分,使用Random類生成隨機數,即對用戶出題,讓用戶輸入答案,判斷答案是否正確。 - 實驗問題分析:
問題:在對用戶出題時,結果無法判斷。
原因:精度不同。
解決方案:將兩個值四舍五入后判斷內容是否一致,就可以進行判斷了。
3.用面向對象編程思想完成評分系統
- 程序設計思路:
(1)定義各選手的信息變量和分數數組變量,并寫出接口,方便用Arrays.sort()進行排序;
(2)輸入各選手的信息,在排序后進行輸出。
4.用面向對象編程思想編寫猜拳游戲
- 程序設計思路:
(1)電腦類:定義電腦的名字,和分數,使用隨機數生成電腦的出拳;
(2)選手類:與電腦類定義相同,只不過在出拳的方法不再使用隨機數生成;
(3)游戲類:分別生成電腦類變量和選手類變量,輸出規則,并決定是否開始,使用循環實現多次游戲,并定義變量記錄游戲次數,每次游戲結束調用判斷方法判斷游戲結果,并詢問是否繼續;
(4)調用游戲類中的初始化和開始游戲的方法。
(三)代碼托管
- 碼云commit歷史截圖