《Java技術》第二次作業--物件導向基礎

來源:互聯網
上載者:User

標籤: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技術》第二次作業--物件導向基礎

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.