201871010111-劉佳華《面向對象程序設計(java)》第四周學習總結

201871010111-劉佳華《面向對象程序設計(java)》第四周學習總結java

實驗時間 2019-9-20編程

第一部分:總結第四章理論知識函數

4.1:類與對象的概念。oop

類:類是構造對象的模板。由類構造對象的過程稱爲建立類的實例。學習

對象:想要使用oop,必定要清楚對象的三個特性:測試

1)對象的行爲:對象的行爲使用可調用的方法定義的。this

·2)對象的狀態:每一個對象都保存着描述當前特徵的信息。spa

3)對象標識:如何辨明具備相同行爲的類似性。設計

4.2:類之間的關係。3d

 常見關係有:依賴(「uses-a」)、聚合("has-a'')、繼承("is-a")。

4.3:使用預約義類。

已學過的預約義類如math,Math,String,Scanner等。

1)對象與對象變量。

在Java語言中,使用構造器構造新實例。構造器是類中一個特殊的方法,生成並初始化對象,它的方法名與類名相同

想要構造一個Data對象(定義在java.util中),須要在構造器前加上new操做符:new Data()

 若定義爲Data deadline;則該語句錯誤。

可將一個對象變量設置爲null,表示該對象變量未引用任何變量,如deadlin=null。

4.4:更改器與訪問器。

更改器:修改實例域。前綴set,更改當前類中的屬性。

訪問器:更改實例域。前綴get。

4.4:用戶自定義類;

4.5:靜態域與靜態方法;

4.6:方法參數 ;對象構造

4.7:包

4.8:類路徑

4.9:文檔註釋

4.10:類設計技巧

第二部分:實驗部分

實驗名稱:實驗三 類與對象的定義及使用

1.  實驗目的:

(1) 熟悉PTA平臺線上測試環境;

(2) 理解用戶自定義類的定義;

(3) 掌握對象的聲明;

(4) 學會使用構造函數初始化對象;

(5) 使用類屬性與方法的使用掌握使用;

(6) 掌握package和import語句的用途。

2.實驗內容和步驟

實驗1 採用我的帳號登陸https://pintia.cn/使用綁定碼620781加入PTA平臺NWNU-2019CST1教學班(西北師範大學 計算機科學與工程學院 2018級計算機科學與技術),完成《2019秋季西北師範大學面向對象程序設計程序設計能力測試1》,測試時間50分鐘。

實驗2 導入第4章示例程序並測試。

測試程序1

l 編輯、編譯、調試運行程序4-2(教材104頁);

l 結合程序運行結果,掌握類的定義與類對象的用法,並在程序代碼中添加類與對象知識應用的註釋;

l 嘗試在項目中編輯兩個類文件(Employee.java、 EmployeeTest.java ),編譯並運行程序。

l 參考教材104頁EmployeeTest.java,設計StudentTest.java,定義Student類,包含name(姓名)、sex(性別)、javascore(java成績)三個字段,編寫程序,從鍵盤輸入學生人數,輸入學生信息,並按如下表頭輸出學生信息表:

  姓名    性別 java成績

課本案例編譯運行結果以下:

  • 根據課本程序改編程序代碼以下:
import java.util.Scanner;
/**
 * This program tests the Student class.
 * time 2019 9 21
 * @author liu jiahua
 */
public class Main {

        public static void main(String[] args)
           {
            Student []stu=new Student[2];
            System.out.println("please input name,sex,score");
            Scanner in =new Scanner(System.in);
            
            for (int i=0;i<stu.length;i++){
                stu[i]=new Student(in.next(),in.next(),in.nextFloat());
            }
             System.out.println("name"+" "+"sex"+" "+" "+"javascore");
             
             for (Student o : stu)
                 System.out.println(o.getName() +"   "+o.getSex()+"        "+o.getJavaScore());
             in.close();
           }
        
        }
class Student{
    private String name;
    private String sex;
    private float javascore;
    
    
     public Student(String n, String s, float m)
       {
          name = n;
          sex = s;
          javascore =m;
       }
 
      public String getName(){
    return name;
    }
      public String getSex(){
        return sex;
        }
      public float getJavaScore(){
        return javascore;
        }
}

 

運行代碼結果以下:

 

測試程序2:

l 編輯、編譯、調試運行程序4-3(教材116);

l 結合程序運行結果,理解程序代碼,掌握靜態域(netxtId)與靜態方法(getNextId)的用法,在相關代碼後添加註釋;

l 理解Java單元(類)測試的技巧。

運行結果以下:

靜態域的使用方法:

    若是將域定義爲static,每一個類中只有這樣的一個域。而每個對象對於全部的實例域卻都有本身的一個拷貝。每一個僱員都有一個本身的id域,但這個類的全部實例將共享一個nextId域。可是,只有一個靜態域nextid,即便沒有一個僱員對象,靜態域nextId也存在。它屬於類,而不屬於任何獨立的對象。

靜態方法的用法:

     靜態方法是一種不能想對象實施操做的方法。在下面兩種狀況下可使用靜態方法:

   (1)一個方法不予要訪問對象狀態,其所需參數都是經過顯示參數提供(例如:Math.pow)

   (2)一個方法只須要訪問類的靜態域(例如:Employee.getNextId)

 

測試程序3:

l 編輯、編譯、調試運行程序4-4(教材121);

l 結合程序運行結果,理解程序代碼,掌握Java方法參數的用法,在相關代碼後添加註釋;

/**
 * This program demonstrates parameter passing in Java.
 * @version 1.01 2018-04-10
 * @author Cay Horstmann
 */
public class ParamTest
{
   public static void main(String[] args)
   {
     //該方法不能修改數值參數
      System.out.println("Testing tripleValue:");
      double percent = 10;
      System.out.println("Before: percent=" + percent);
      tripleValue(percent);
      System.out.println("After: percent=" + percent);

    //該方法能夠改變對象參數的狀態
      System.out.println("\nTesting tripleSalary:");
      var harry = new Employee("Harry", 50000);
      System.out.println("Before: salary=" + harry.getSalary());
      tripleSalary(harry);
      System.out.println("After: salary=" + harry.getSalary());

    //該方法能夠將新對象附加到對象參數
      System.out.println("\nTesting swap:");
      var a = new Employee("Alice", 70000);
      var b = new Employee("Bob", 60000);
      System.out.println("Before: a=" + a.getName());
      System.out.println("Before: b=" + b.getName());
      swap(a, b);
      System.out.println("After: a=" + a.getName());
      System.out.println("After: b=" + b.getName());
   }

   public static void tripleValue(double x) // doesn't work
   {
      x = 3 * x;
      System.out.println("End of method: x=" + x);
   }

   public static void tripleSalary(Employee x) // works
   {
      x.raiseSalary(200);
      System.out.println("End of method: salary=" + x.getSalary());
   }

   public static void swap(Employee x, Employee y)
   {
      Employee temp = x;
      x = y;
      y = temp;
      System.out.println("End of method: x=" + x.getName());
      System.out.println("End of method: y=" + y.getName());
   }
}

class Employee // simplified Employee class
{
   private String name;
   private double salary;

   public Employee(String n, double s)
   {
      name = n;
      salary = s;
   }

   public String getName()
   {
      return name;
   }

   public double getSalary()
   {
      return salary;
   }

   public void raiseSalary(double byPercent)
   {
      double raise = salary * byPercent / 100;
      salary += raise;
   }
}

 

運行結果以下:

測試程序4:

l 編輯、編譯、調試運行程序4-5(教材129);

結合程序運行結果,理解程序代碼,掌握Java用戶自定義類的用法,掌握對象構造方法及對象使用方法,在相關代碼後添加註釋。

 

對程序的理解:

     在這個程序當中,用了Java的第三種初始化數據域的方法,稱爲初始化塊。在一個類的聲明中,能夠包含多個代碼塊。只要構造類的對象,這些塊就會被執行。在這個程序的25行開始,不管使用哪一個構造器類對象,Id域都在對象初始化塊中被初始化。首先運行初始化塊,而後才運行構造器的主題部分。

   在這個程序清單中展現了不少特性:重載構造器、用this(...)調用另外一個構造器、無參數構造器、對象初始化塊、靜態初始化塊、實例域初始化等。

測試程序5:

l 編輯、編譯、調試運行程序4-六、4-7(教材135);

l 結合程序運行結果,理解程序代碼,掌握Java包的定義及用法,在相關代碼後添加註釋;

1)實例4-6

包的放法:

運行結果:

 程序分析:

     在這個程序當中介紹咱們介紹了怎麼使用類的導入,可使用import語句導入一個特定的類火整個包,Import語句是一種應用包含在保重的類的簡明描述,一旦使用了import語句,在使用類時,就沒必要寫出包的全名了。並且在實驗當中也有將類放入包中,就必須將包的名字放在源文件的開頭,包中定義類的代碼以前。若是沒有在源文件中放置package語句,這個源文件中的類就被放置在一個默認包中。默認包是一個沒有名字的包。再次以前,咱們定義的全部類都在默認包中。

4. 實驗總結:

經過這個周的學習,我明白了用戶自定義類是如何去定義的。在第三章我已經學習瞭如何設計複雜應用程序所須要的各類主力類,同是,這些類沒有main方法,卻有本身的實例域和實例方法。在學習了類以後,有學習了靜態域和靜態方法的用法,在這一屆的學習過程中,以爲很有收穫,以爲比較簡單易懂,瞭解了靜態域、靜態常量、靜態方法、工廠方法和main方法的概念,並經過實例程序去真正理解了這些概念。接着學習了對象構造,在這一節主要就學習了參數化,初始化塊。最後又學習了包,雖然在以前已經解除了包這個概念,但在這一節有學習了新的概念,好比說類的導入、靜態導入、將類放入包中。這些都是本身在自主學習,但願在之後老師的講解過程當中有更大的進步。

相關文章
相關標籤/搜索