第二次JAVA做業

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。

  • 在主方法中驗證,輸入一個email地址,調用判斷方法,返回值爲true,輸出地址有效,不然無效。
    3.查找子串
    將和子串不相等的字符刪除,最後根據剩留的個數除以子串的個數,可獲得有幾個子串。
    4.統計文件
    利用split方法將字符串分割成一個一個的文件,先經過String類中截取方法將每一個文件的第一個字符截取出來再利用Upper方法完成對字符的大小寫轉換,再加上第一個後面的字符串,從新賦值給文件名。在循環將文件名字符串按「.」拆開,保存拆開後的最後一個數組元素,在循環結束後再定義一個計數數組,大小等於文件類型數組,從第一開始查詢有沒有跟其同樣的元素,相同則對應的計數數組++,並將相同的那個文件類型數組元素置空和對應計數數組中的數值改成0,最後輸出
    5.類的設計
    對完成實驗內容過程當中遇到的問題、解決方案以及程序的設計思路和思考等進行概括總結。
    (三)代碼託管(務必連接到你的項目)
相關文章
相關標籤/搜索