標籤:this 方法 結果 main 檔案 內容 原理 date 全面
(一)學習總結1.什麼是構造方法?什麼是構造方法的重載?下面的程式是否可以通過編譯?為什嗎?
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;}
結果:運行錯誤;
原因:建立了對象數組後沒有對數組每一個元素分別進行執行個體化。
解決方案:arr[1]=new MyClass();arr[1].value=100;
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;}
結果:false;
原因:每次執行個體化一個對象時,系統會分配一塊記憶體位址給這個對象,用==判斷的時候時是判斷的地址,因為兩個對象的地址不同,所以它們不會相等。
4.什麼是物件導向的封裝性,Java中是如何?封裝性的?試舉例說明。
封裝性:封裝性是指有些資訊是封閉的,並不是所有人都可以看到;
封裝性的實現:Java的封裝是通過private修飾符來聲明屬性和方法實現的;
例子:
public class Date { private int year; public int month; public int day;}
這個Date類裡面的year是封裝的,當你定義一個對象Date d=new Date();,關於對象d,可以使用d.month和d.day;但是不能使用d.year;
5.閱讀下面程式,分析是否能編譯通過?如果不能,說明原因。
(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(); }}
編譯不能通過,以為x不是static類型的,所以不能再static類型的 method裡面用;
解決方案:在x前面加static。
6.使用類的靜態變數和構造方法,可以跟蹤某個類建立的對象個數。聲明一個圖書類,資料成員為編號,書名,書價,並擁有待用資料成員冊數記錄圖書的總數。圖書編號從1000開始,每產生一個對象,則編號自動遞增(利用靜態變數和構造方法實現)。下面給出測試類別代碼和Book類的部分代碼,將代碼補充完整。
class Book{ int bookId; String bookName; double price; static int x;// 聲明靜態變數 static{ x=1000; // x=0;//定義靜態代碼塊對靜態變數初始化 } public Book(String bookName,double price) {//構造方法 this.bookName=bookName; this.price=price; this.bookId=x; x++; } 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 x-1000; } public String toString() { //重寫toString方法 return "圖書編號:"+bookId+",圖書名稱:"+bookName+",圖書價格:"+price; } }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。
單例模式:核心結構中只包含一個被稱為單例的特殊類。
特點:通過單例模式可以保證系統中,應用該模式的類一個類只有一個執行個體。即一個類只有一個對象執行個體。
public class Sun{ private static Sun instance=null; public static synchronized Sun getInstance(){ if(instance==null){ instance=new Sun(); } return instance; } private Sun(){ }}
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;
原因:char型傳遞的是地址,所以結果會改變,而String在傳遞的時候是建立了一個地址來儲存要傳遞的內容,新地址的內容發生改變,原地址的不會發生改變;
(二)實驗總結1.用物件導向思想完成評分系統
程式設計思路:輸入選手數,評委數,然後輸入選手資訊,讓所有評委對輸入的選手進行打分,打完分之後將結果排序,去掉最高分和最低分,在算出平均分,將最終的平均分傳到選手的資訊中,作為選手的成績;
問題1:不瞭解封裝性的意思,錯誤的以為不能再封裝裡面進行任何的資訊輸入;
解決方案:在評委類裡面輸入打分資料;
2.Email驗證
這個題沒問題。
3.尋找子串
這個題沒問題。
4.統計檔案
問題1:對於一些特殊的情況,考慮的不夠全面,比如當一個檔案名稱裡麵包含多個‘.‘;
解決方案:這種情況下我們需要找到最後一個‘.‘,然後去這‘.‘後面的東西,用一個迴圈來處理不停的尋找‘.‘,然後去‘.‘後面的內容,知道該內容裡面不含有‘.‘;
5.類的設計
問題1:將兩個類之間建立聯絡;
解決方案:兩個類之間互相建立對方的對象,然後進行調用;
例如:d[i].getE()[c].toString();d為Department類的對象,而getE()為Employee類的函數;
https://gitee.com/jiamusi/java-hebau/tree/master/daima
《Java技術》第二次作業--物件導向基礎