1、學習要點
認真看書並查閱相關資料,掌握如下內容:
理解對象的建立與引用的關係
掌握構造方法的重載
掌握String類
掌握類的設計方法
掌握this關鍵字
掌握static關鍵字
理解引用傳遞並掌握基本應用
掌握單例模式
理解內部類
2、做業要求
發佈一篇隨筆,主要包括如下幾部分的內容:
(一)學習總結
1.什麼是構造方法?什麼是構造方法的重載?下面的程序是否能夠經過編譯?爲何?
在面向對象程序中構造方法的主要做用是屬性初始化, 在對象的生成格式中 「類名稱 對象名稱 =new 類名稱()」中知道,只要「()」出現,就表示調用了方法,這個方法實際上就是表示要調用構造方法,構造方法能夠當作一種特殊的方法,它的定義方式與普通方法相似。
在構造方法中需注意如下幾點:
1>構造方法的名稱必須和類名稱一致。
2>構造方法的聲明處不能有任何返回值類型聲明。
3>不能在構造方法中使用return返回一個值。
當調用關鍵字new實例化對象時纔會調用構造方法。
只要有類就一定存在構造方法,在java中若是一個類中沒有明確的聲明一個構造方法時,則在編譯時會直接生成一個無參數、什麼都不作的構造方法。例 形式以下:java
class Person{ public Person(){} } }
在一個類 中若是已經明確的聲明瞭一個構造方法,那麼程序必定會在編譯時不會再生成默認的構造方法,即一個類中應該至少有一個構造方法。數據庫
public class Test { public static void main(String args[]) { Foo obj = new Foo(); } } class Foo{ int value; public Foo(int intValue){ value = intValue; } }
不能經過編譯,由於沒有無參構造方法,類中只定義了有參構造方法,此時編譯器再也不創建默認的無參構造方法。
2.運行下列程序,結果是什麼?分析緣由,應如何修改。設計模式
public class Test { public static void main(String[] args) { MyClass[] arr=new MyClass[3]; arr[1].value=100; } } class MyClass{ public int value=1; }
編譯報錯,只聲明瞭數組,並未實現實例化,應該對數組中的每一個元素經過new構造方法進行實例化。數組
3.運行下列程序,結果是什麼?說明緣由。學習
public class Test { public static void main(String[] args) { Foo obj1 = new Foo(); Foo obj2 = new Foo(); System.out.println(obj1 == obj2); } } class Foo{ int value = 100; }
會出現 flase,由於兩個對象都是經過new開闢了新地址,因此最後比較的是地址,兩個地址不一樣。
4.什麼是面向對象的封裝性,Java中是如何實現封裝性的?試舉例說明。
1>封裝性是面向對象的第一大特性,所謂的封裝性就是指對外部不可見。 爲了不出現 用對象直接訪問類中的屬性 這樣的錯誤發生,(這在面向對象中是不容許的),在通常 的開發中每每要將類中的屬性封裝(private)。
2>屬性封裝:private 屬性類型 屬性名稱;
方法封裝: private 方法返回值 方法名稱(參數列表){}
3> 類中所有屬性都必須封裝,封裝後的屬性必須經過setter和getter進行訪問(也就是經過這兩種方法設置和取得)。
4>用private聲明的屬性或方法只能在其類內部被調用,而不能在類的外部被調用。測試
5.閱讀下面程序,分析是否能編譯經過?若是不能,說明緣由。this
(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++); } }
secret是private私有的,不能直接調用
(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(); } }
method這個方法是static修飾的,只能訪問static修飾的字段。
6.使用類的靜態變量和構造方法,能夠跟蹤某個類建立的對象個數。聲明一個圖書類,數據成員爲編號,書名,書價,並擁有靜態數據成員冊數記錄圖書的總數。圖書編號從1000開始,每產生一個對象,則編號自動遞增(利用靜態變量和構造方法實現)。下面給出測試類代碼和Book類的部分代碼,將代碼補充完整。code
class Book{ int bookId; String bookName; double price; // 聲明靜態變量 public static n; //定義靜態代碼塊對靜態變量初始化 static { n=0; } //構造方法 public Book(String bookName,double price ){ this.bookName=bookName; this.price =price ; n++; this.bookId=1000+n; } 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 int totalBook(){ return n; } //重寫toString方法 public string toString(){ return "編號"+bookld+「書名」+bookName+"價格"+"price "+"圖書總數目爲"+n; } } } 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()); } } } ... 7.什麼是單例設計模式?它具備什麼特色?用單例設計模式設計一個太陽類Sun。 單例模式,是一種常見的軟件設計模式。在它的核心結構只包括一個被稱爲單例的特殊類。經過單例模式能夠保證系統中,應用該模式的類一個類只有一個實例。即一個類只有一個對象實例。 特色:一個類中只有一個實例。 ... class Sun{ private Sun instance = new Sun(); private Sun(){ } public static Sun getInstance(){ return instance; } }
8.理解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'; } }
運行結果:你好 Wolld
- 緣由:str屬於引用類型,調用change方法把地址傳入,在change方法中改變了str的值後釋放地址空間,沒有改變主方法中str的值。而ch表明數組的地址,調用change方法改變了ch第一個字符的值後將ch傳回主方法。
(二)實驗總結
本次實驗包括實驗二和實驗三兩次的內容:
1.用面向對象思想完成評分系統
2.Email驗證
建立一個布爾類型方法判斷email有效的四個條件,四個條件都知足時返回true,有一個條件不知足則返回false。