1. 程式人生 > >《Java技術》第二次作業--面向對象基礎

《Java技術》第二次作業--面向對象基礎

eth 面向對象思想 個數 set 參數傳遞機 封裝性 沒有 構造方法 void

(一)學習總結

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技術》第二次作業--面向對象基礎