第三次Java做業--計科1501--李俊

(一)學習總結
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("李麗");
  1. (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++); 
    } 
}

不能經過編譯,由於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

相關文章
相關標籤/搜索