(一)學習總結
1.什麼是面向對象的封裝性,Java中是如何實現封裝性的?
在面向對象法則中爲了不用對象直接訪問類中的屬性,被封裝的屬性必須經過setter和getter方法得到。面向對象的封裝性不僅僅只是private關鍵字,用private關鍵字聲明的屬性或方法只能在其類的內部被調用。
例子:git
private String name; public void tell(){ System.out.println("姓名:"+getName()); public String getName(){ return name; } public void setName(String n){ name=n; } public class Text{ public static void main(String args[]){ Person per=new Person(); per.setName("李麗");
class A{ private int secret = 5; } public class Test{ public static void main(String args[]){ A a = new A(); System.out.println(a.secret++); } }
不能經過編譯,由於Private屬性是私有的不能由對象直接訪問,secret被封裝了,想要取得裏面的值必須經過方法。
(2) 不能執行,X的值不是靜態屬性,應該改成用Static關鍵字算法
public class Test{ static x = 50; static int y = 200; public static void method(){ System.out.println(x+y); } public static void main(String args[]){ Test.method(); } }
3 . 使用類的靜態變量和構造方法,能夠跟蹤某個類建立的對象個數。聲明一個圖書類,數據成員爲編號,書名,書價,並擁有靜態數據成員冊數記錄圖書的總數。圖書編號從1000開始,每產生一個對象,則編號自動遞增(利用靜態變量和構造方法實現)。下面給出了測試類代碼和Book類的部分代碼,將代碼補充完整。數據庫
class Book{ int bookId; String bookName; double price; static int booknum; // 聲明靜態變量 static{ booknum=1000; } //定義靜態代碼塊對靜態變量初始化 public Book(String BookName,double price) { this.bookName=BookName; this.price=price; bookId=booknum; booknum++; } //構造方法 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(){ int num=0; num=booknum-1000; return num; }//定義方法求圖書總冊數 public String toString() { return ("圖書編號爲:" + bookId + ", 圖書名爲:" + bookName + ", 圖書價格爲:" + price); } //重寫toString方法 } 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("圖書總數爲:"+ totalBook.numbook()); for(Book book:books){ System.out.println(book.toString()); } } }
4.什麼是單例設計模式?它具備什麼特色?用單例設計模式設計一個太陽類Sun。
Java中單例模式是一種常見的設計模式,單例模式主要介紹了三種:懶漢式單例、餓漢式單例、登記式單例。
單例模式有如下特色:
一、單例類只能有一個實例。
二、單例類必須本身建立本身的惟一實例。
三、單例類必須給全部其餘對象提供這一實例。
選擇單例模式就是爲了不不一致狀態,避免政出多頭
懶漢式單例設計模式
public class Sun { private static Sun instance=null; private Sun(){} public synchronized static Sun getInstance(){ if(instance==null){ instance=new Sun(); } return instance; } }
餓漢式單例數組
public class Esun { private Esun(){} private static final Esun es=new Esun(); public static Esun getes(){ return es; } }
5.理解Java參數傳遞機制,閱讀下面的程序,運行結果是什麼?說明理由。函數
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'; } }
運行結果爲 你好 World
程序中傳遞的雖是String類型的對象,由於字符串的內容一旦聲明是不可改變的,改變的只是其內存地址的指向。若須要更改類中屬性的內容能夠將
char[] ch = { 'w','o','l','l','d' };改成
Demo d1=new Demo();
d1.temp="wolld";
6.其餘須要總結的內容
內部類若是被外部所調用,必定要先產生外部類的實例化對象,以後再產生內部類的實例化對象。
外部類.內部類 內部類對象=外部類實例.new 內部類();
靜態內部類:用static聲明內部類;靜態類內部只能訪問外部的靜態成員,不能訪問外部的非靜態成員;在任何非靜態內部類中,都不能有靜態數據,靜態方法或者又一個靜態內部類,只有靜態內部類才能夠聲明靜態成員;建立靜態內部類對象 外部類.內部類 內部類對象=new 外部類.內部類(); 若是方法中的參數想被內部類所訪問,參數前必須加final關鍵字。
foreach輸出工具
Public class NewDemo { Public stati cvoid main (String[] args){ System.out.print("不傳參數( fun()):"); fun(); System.out.print("傳遞1個參數( fun()):"); fun(1); System.out.print("傳遞2個參數( fun()):"); fun(1,2,3,4,5); } Public static void fun(int...arg){ //可變參數,能夠接收任意多個參數 for(intx:arg){ // 使用foreach輸出 System.out.print(x+","); } } }
(二)實驗總結學習
實驗內容:
1.按照下列要求完成類的設計
(1)設計一個日期類,用於記錄年、月、日,提供對日期處理的經常使用方法(日期輸出格式xxxx-xx-xx)。
(2)設計一個職工類,該職工類至少具備下面的屬性:職工號,姓名,性別,生日,工做部門,參加工做時間,設計相應的方法。
(3)設計一個部門類,包括下列屬性:部門編號,部門名稱,經理,設計相應方法。
(4)設計一個測試類,採用對象數組模擬一個擁有兩個部門,10個職工的單位,實現對相關信息的查詢功能。
程序設計思路:將日期類,職工類,部門類設置其內部屬性爲私有屬性,利用setter和getter方法設置和取得。在測試類中實例化Employee對象,並經過構造方法賦值。在查詢時採用了一對一關係,目標是實現按姓名和編號查詢,經過構造函數設置內容。
遇到的問題:輸出結果不是本身想要的,在輸出語句調用了tell();輸出的信息比較詳細,測試
public void tell(){ System.out.println("部門編號"+getNum()+"部門名稱"+getCname()+"經理"+getManager());
2.設計一個計算工具類,要求:
(1)爲用戶提供幾個常見的幾何體面積和體積的算法(如球的體積和表面積,圓柱體的體積和表面積,圓錐體的體積和表面積)(能夠學習使用static關鍵字)
(2)設計一個測試類,給出幾個不一樣的圓柱體,圓錐體,球體的尺寸,用計算工具類分別求它們體積的累加和與表面積的累加和。
(3)設計一個測試類,隨機產生球,圓柱、圓錐體的尺寸,模擬考試,要求用戶回答它們的體積和麪積,並判斷用戶的回答是否正確
設計思路,建立三個類分別實現球,圓柱,圓錐的計算,用static關鍵字聲明方法,以便在測試時能夠把隨機產生的尺寸做爲參數而後調用計算類,在測試類中調用計算類的結果進行求和運算,輸出結果。測試類中的判斷用if...else...判斷用戶的回答是否正確。
(三)代碼託管(https://git.oschina.net/hebau_cs15/hebau-cs01LJ1.git)
•碼雲commit歷史截圖
上傳實驗項目代碼到碼雲,在碼雲項目中選擇「統計-commits」,設置搜索時間段,搜索本週提交歷史,並截圖。
this