1. 程式人生 > >java技術第二次作業

java技術第二次作業

屬性和方法 RR java編譯 代碼托管 靜態代碼塊 說明 你好 fault 實例化

(一)學習總結

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技術第二次作業