java技術第二次作業

來源:互聯網
上載者:User

標籤:log   執行個體化   如何   ==   單例設計   cte   value   記錄   你好   

(一)學習總結1.什麼是構造方法?什麼是構造方法的重載?

構造方法是用於對對象初始化的方法,當新對象被建立的時候,建構函式會被調用。
每一個類都有建構函式。在程式員沒有給類提供建構函式的情況下,Java編譯器會為這個類建立一個預設的建構函式。
建構函式的重載是函數名與類名相同,參數類型不同,參數不同。
1.構造方法的名稱必須與類名一致
2.構造方法的聲明處不能有任何傳回值類型的聲明
3.不能在構造方法中使用return
4.當自己聲明構造方法後,系統不再建立預設的無參構造方法
下面的程式是否可以通過編譯?為什嗎?

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

false,因為比較的是兩個對象的引用地址,兩個對象都是通過new開闢的不同的新的空間。

4.什麼是物件導向的封裝性,Java中是如何?封裝性的?試舉例說明。
  1. 類中並不是所有的資訊都能讓使用者可見的,因此隱藏這些資訊就很有必要。這就是物件導向對封裝的要求。
  2. 封裝性的目的:保護當前類的某些屬性和方法不被外部所見。
  3. 封裝性的實現:Java的封裝是通過private修飾符來聲明屬性和方法實現的。
    範圍 當前類 同一包 子類 其他包
    public √ √ √ √
    protected √ √ √
    default √ √
    private √
  4. 實現該屬性的get/set方法,為外部所訪問。
  5. 封裝後的屬性不能像以前一樣通過“對象.屬性”訪問該屬性了。通過對象調用對應的get/set方法。
    例如:

    public class Time {private int year,month,day; //欄位用private隱藏起來public Time(){}public Time(int year,int month,int day){    this.year=year;    this.month=month;    this.day=day;}public int getYear() {  //通過get,set方法讀取隱藏資料    return year;}public void setYear(int year) {    this.year = year;}public int getMonth() {    return month;}public void setMonth(int month) {    this.month = month;}public int getDay() {    return day;}public void setDay(int day) {    this.day = day;}public String toString( ){    return year+"-"+month+"-"+day;}}
    5.閱讀下面程式,分析是否能編譯通過?如果不能,說明原因。
    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私人的,不能直接存取操作。

    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();}}

    mothod方法是static修飾的,只能訪問static修飾的欄位,x不是。

    6.使用類的靜態變數和構造方法,可以跟蹤某個類建立的對象個數。聲明一個圖書類,資料成員為編號,

    書名,書價,並擁有待用資料成員冊數記錄圖書的總數。圖書編號從1000開始,每產生一個對象,
    則編號自動遞增(利用靜態變數和構造方法實現)。下面給出測試類別代碼和Book類的部分代碼,將代碼補充完整。

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一開始將自己的引用複製給了局部str,但是局部str又引用了hello,當函數結束調用後,局部str釋放,沒有涉及遠str的改動;
字元數組和c原理相同,通過傳入地址,直接在地址上進行修改;

(二)實驗總結(三)代碼託管(務必連結到你的項目)


https://gitee.com/hebau_java_cs16/Java_CS02tx

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.