java 第三次做業

《Java技術》第三次做業

(一)學習總結

1.什麼是面向對象的封裝性,Java中是如何實現封裝性的?試舉例說明。
封裝性是面向對象的第一大特性,所謂的封裝性就是指對外部不可見,也就是說把代碼封裝到大括號中,只能訪問本身內部的數據,外邊的東西訪問不了.
實現封裝性的方法
屬性封裝:private 屬性類型 屬性名;
方法封裝:private 方法返回值 方法名稱(參數){}
例如java

class Data {
    private String year;
    private String month;
    private String day;
}

2.閱讀下面程序,分析是否能編譯經過?若是不能,說明緣由。
(1)git

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被封裝,不能被類外訪問。
(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();
    }
}

不能經過編譯,static聲明的方法不能調用非static類型聲明的屬性
3 . 使用類的靜態變量和構造方法,能夠跟蹤某個類建立的對象個數。聲明一個圖書類,數據成員爲編號,書名,書價,並擁有靜態數據成員冊數記錄圖書的總數。圖書編號從1000開始,每產生一個對象,則編號自動遞增(利用靜態變量和構造方法實現)。下面給出了測試類代碼和Book類的部分代碼,將代碼補充完整。設計模式

class Book{
    private static int bookId;
    private String bookName;
    private double price;
    // 聲明靜態變量
    static int totalBook;
    //定義靜態代碼塊對靜態變量初始化
    static {
        totalBook=0;
        bookId=1000;
    }
    //構造方法
    public Book(String bookName,double price){
        this.bookName=bookName;
        this.price=price;
        totalBook++;
    }
    
    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 totalBook;
    }

    //重寫toString方法
    public String toString(){
        return "編號:"+Book.bookId+++"  書名:"+this.bookName+"  價錢"+this.price ;
    }
}
public class Test2{
    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.什麼是單例設計模式?它具備什麼特色?用單例設計模式設計一個太陽類Sun。
單例設計模式師確保一個類只有一個實例,自行提供這個實例並向整個系統提供這個實例。
特色:
1,一個類只能有一個實例
2,本身建立這個實例
3,整個系統都要使用這個實例
太陽類數組

public class Sun {
    private Sun() {
    }
    private static final Sun single = new Sun();
    // 靜態工廠方法
    public static Sun getInstance() {
        return single;
    }
}

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';
    }
}

運行結果:你好 Wolld
理由:字符串的內容一旦聲明是不可改變的,改變的只是其內存地址的指向,只是在棧內存中多了一個指針,改變的是堆內存的指向。而字符數組的內容能夠改變。學習

(二)實驗總結

1.日期類測試

  • 程序設計思路:定義一個日期類,把year、month、day封裝,用setter和getter獲得。編寫toString方法,輸出格式爲xxxx-xx-xx。定義一個職工類,把職工號、姓名、性別進行封裝,用setter和getter獲得,生日和參加工做時間調用日期類的toString方法,編寫toString方法,輸出以上信息。一個員工屬於一個部門,在員工類中保存部門信息。定義一個部門類,把部門編號、部門名稱進行封裝,用setter和getter獲得。一我的部門有一個經理,因此應在部門中保存經理信息。一個部門有多名員工,在部門中用對象數組保存多名員工的信息。編寫測試類,產生獨立對象並實例化,能夠用對象數組,設置部門和部門經理的關係,設置員工和部門的關係,設置員工和日期的關係,調用各個類的toString方法進行輸出。

2.計算工具this

  • 程序設計思路:編寫一個計算類,把半徑、高、母線、體積、表面積進行封裝,用setter和getter獲得。編寫一個測試類,產生獨立對象並實例化(給出幾個不一樣的圓柱體、圓錐體和球體的尺寸),能夠用對象數組,將獲得的體積和表面積分別加起來,求累加和。在再該測試類中隨機產生三個float型的數,讓用戶分別求出圓柱體、圓錐體和球體的體積和表面,並調用計算類,判斷用戶的回答正確與否。
  • 實驗問題分析:
    問題1:不會隨機產生大於1的float型的數
    解決方案:先隨機產生一個0到100之間的int型的數,再乘以0.1。.net

(三)代碼託管

  • 碼雲commit歷史截圖

(四)學習進度條

代碼行數(新增/累積) 學習時間(新增/累積) 本週學習內容
目標 5000行 300小時
第2-4周 100/100 20/20 學習了數組和方法
第5周 200/300 30/50 學習了String類和StringBuffer類
第6周 800/1100 40/90 學習了this、static關鍵字,Singleton模式
相關文章
相關標籤/搜索