201521123013 《Java程序設計》第6周學習總結

1. 本章學習總結

  1.1 面向對象學習暫告一段落,請使用思惟導圖,以封裝、繼承、多態爲核心概念畫一張思惟導圖,對面向對象思想進行一個總結。
  java


2. 書面做業

Q1.clone方法
 1.1 Object對象中的clone方法是被protected修飾,在自定義的類中覆蓋clone方法時須要注意什麼?編程

  • 由於clone方法時被protected修飾的,它只能被同包及其子類訪問,因此覆蓋clone方法必須聲明爲public,而且在自定義類中clone方法必須實現Cloneable接口。
  • 對於基本數據類型能夠直接super.clone();進行克隆,可是對於引用型數據須要注意深克隆才能把對象進行克隆,不然只是克隆了引用。原對象修改會形成複製後的對象也跟着修改。

 1.2 本身設計類時,通常對什麼樣的方法使用protected進行修飾?以做業Shape爲例說明。 app

  • 由於protected修飾符只能在同包,同類及其子類中被訪問,因此當咱們有些方法只想在這幾處被訪問時,咱們就可使用protected聲明。例如Shape類中,咱們能夠把getPerimeter和getArea方法聲明爲protected讓其只能在繼承自Shape類的Circle類、Rectangle類等子類中被調用,而在其餘處(不一樣包,不是繼承關係)不能被訪問,防止方法的濫用。

 1.3 在test1包中編寫簡單的Employee類,在test2包中新建一個TestProtected類,並在main中嘗試調用test1包中的Employee的clone方法克隆一個新對象,可否成功?爲何? eclipse

  • 不能,首先是找不到Employee類,因此須要import test1.Employee;其次是clone方法是不可見的。


 
Q2.使用匿名類與Lambda表達式改寫題集面向對象2-進階-多態接口內部類的題目5-2僅需粘貼關鍵代碼與運行結果,圖片不要太大。ide

  • 匿名類
Arrays.sort(str, new Comparator<PersonSortable2>(){
            public int compare(PersonSortable2 o1, PersonSortable2 o2) {
                return o1.getName().compareTo(o2.getName());
            }
        });
Arrays.sort(str, new Comparator<PersonSortable2>(){
            public int compare(PersonSortable2 o1, PersonSortable2 o2) {
                return Integer.toString(o1.getAge()).compareTo(Integer.toString(o2.getAge()));
            }
        });
  • Lambda表達式
Arrays.sort(str, (PersonSortable2 o1, PersonSortable2 o2) 
                ->(o1.getName().compareTo(o2.getName())));
Arrays.sort(str, (PersonSortable2 o1, PersonSortable2 o2) ->
             (o1.getAge()-o2.getAge()));
  • 截圖以下:

 
Q3.分析下列代碼,回答shapeComparator所指向的對象與Comparator接口有什麼關係?函數

Comparator<Shape> shapeComparator = new  Comparator<Shape>() {  
     @Override  
     public int compare(Shape o1, Shape o2) {  
         //你的代碼     
      }         
};
  • shapeComparator所指向的對象實現了Comparator接口,經過匿名內部類的方式,new 接口{},重寫了Comparator的方法,使shapeComparator具備其compare方法。注意匿名內部類只能實現一個接口,當你只須要在某個程序塊使用某個方法能夠經過編寫匿名內部類,不用特地再寫一個類,減小代碼量,使代碼看起來更加簡潔。

Q4.GUI中的事件處理
 4.1 寫出事件處理模型中最重要的幾個關鍵詞。學習

  • 事件:用戶在界面上進行的一個操做(一般是使用各類輸入設備,如:鼠標(按鈕單擊,按鈕鬆開)、鍵盤等來完成)。
  • 事件源:產生事件的組件,例如:點擊按鈕就是在按鈕上發生的一個事件。
  • 事件監聽器:檢查某個組件是否發生了某些事件,在發生事件時要處理相應的事件。

 4.2 使用代碼與註釋,證實你理解了事件處理模型。設計

public class MainGUI {
    public static void main(String[] args) {
        JFrame f = new JFrame("Test");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JButton b = new JButton("Press Me!");//事件是點擊按鈕,事件源是按鈕
        b.addActionListener(new ButtonHandler());//註冊監聽器,爲了可以讓事件監聽器檢查到某個組件(事件源(此處是按鈕))是否發生了某些事件,而且在發生事件時激活時間處理器進行相應的處理,必須註冊監聽器。
        f.add(b);
       f.setSize(200, 100);
       f.setVisible(true);
    }
    private static class ButtonHandler implements 
   ActionListener{//監聽器,不一樣類型的事件須要有不一樣的監聽器,監聽器必須實現監聽器接口,而後進行事件處理「Action occurred」
        public void actionPerformed(ActionEvent e) {
            System.out.println("Action occurred");
            System.out.println(e.getSource());//得到事件源
        }
    }
}

Q5.結對編程:面向對象設計(大做業2-很是重要,未完成-2)繼續完善上週的項目做業。考覈點以下:
 5.1 嘗試使用圖形界面改寫。code

  • 加入購物車,結算
  • 清空購物車
  • 主要代碼
private void clothesComboBoxActionPerformed(java.awt.event.ActionEvent evt) {                                                
        // TODO add your handling code here:
        if(0==(clothesComboBox.getSelectedIndex())){
            jLabel.setText(clothes1.getName());
                ...
        }
        if(1==(clothesComboBox.getSelectedIndex())){
           jLabel.setText(clothes2.getName());
                ...
        }
        ...    
}                                               
    
    private void sumButtonActionPerformed(java.awt.event.ActionEvent evt) {                                          
        count=Integer.parseInt(jTextField1.getText());
        jTextArea1.setEditable(false);
        if(0==(clothesComboBox.getSelectedIndex())){
            sum+=clothes1.getPrice()*count;
            jTextArea1.append("商品名:"+clothes1.getName()+"價格:"+clothes1.getPrice()+"購件數:"+count+"\n");
        }
        if(1==(clothesComboBox.getSelectedIndex())){
           ...
        }
        ...
}

 5.2 給出兩人在碼雲上同一項目的提交記錄截圖。
orm

 5.3 與上週相比,項目的主要改動是什麼?

  • 用圖形界面方式實現購物車的訂單添加和結算。

3. PTA實驗總結及碼雲上代碼提交記錄

3.1本週Commit歷史截圖

3.2 實驗總結

  • 題目4-1一開始沒有看懂,MySatrter類是幹嗎用的,後面發現不用管它,只要在主函數注意其接收的是ActionListenner對象,因此須要編寫actionPerformed()方法,而且變量要聲明爲final。
  • 題目5-3按照題目提示就能夠寫出來,主要注意空棧和滿棧的處理。注意使用eclipse快速生成相應的函數,提升寫代碼效率。若是使用Arraylist的話,出棧入棧可使用add()和remove()比較方便。
  • 題目5-4根據題目,讓values[0]初始化爲最大值,最小值經過比較,進行交換,最終獲得最大值和最小值。
相關文章
相關標籤/搜索