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

1. 本週學習總結

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

1.2 可選:使用常規方法總結其餘上課內容。

  • GUI與Swing
  • 使用NetBeans設計GUI
  • 頂層窗口被稱爲框架(Frame) AWT中叫Frame Swing中叫JFrame
  • 瞭解並使用佈局管理器 如FlowLayout BorderLayout
  • ActionListener-最經常使用的事件處理器(事件---------事件監聽器)

2. 書面做業

Q1 clone方法

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

答:clone方法中被protected修飾,那就代表子類要運用clone方法必須與父類在同一個包中。所以咱們在自定義的類中要覆蓋clone方法並聲明爲public。還要讓類操做Cloneable接口。

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

protected的訪問權限是本類,同包和子類,當子類想要訪問父類的屬性和方法時,可使用protected。例如:子類圓形和正方形想調用父類Shape中的getArea()方法,就能夠寫成protected double getArea().
abstract class Shape {
    private final static double PI = 3.14;
    public abstract double getArea();
}

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

package test1;

public class Employee implements Cloneable {
    private String name;
    private double salary;
    
    public Employee(String name, double salary) {
        super();
        this.name = name;
        this.salary = salary;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        // TODO Auto-generated method stub
        return super.clone();
    }
    
}

答:編譯失敗,緣由是The method clone() from the type Employee is not visible 因此寫clone()方法,通常都用public來修飾。

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

Comparator<PersonSortable2> nameComparator = 
        new Comparator<PersonSortable2>(){

            @Override
            public int compare(PersonSortable2 o1, PersonSortable2 o2) {
                // TODO Auto-generated method stub
                return o1.getName().compareTo(o2.getName());
            }
    
};
//匿名內部類對姓名的排序

Comparator<PersonSortable2> ageComparator = 
        new Comparator<PersonSortable2>(){

            @Override
            public int compare(PersonSortable2 o1, PersonSortable2 o2) {
                // TODO Auto-generated method stub
                if (o1.getAge() <  o2.getAge()) {
                    return -1;
                } else if (o1.getAge() > o2.getAge()) {
                    return 1;
                } else {
                    return 0;
                }
            }
    
};//匿名內部類對age的排序

運行結果:java

Arrays.sort(person,(o1,o2)->o1.getName().compareTo(o2.getName()));//Lambda表達式對Name排序編程

Arrays.sort(person,(o1,o2)->o1.getAge()-o2.getAge());//Lambda表達式對Age排序數組

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

Comparator<Shape> shapeComparator = new  Comparator<Shape>() {  
     @Override  
     public int compare(Shape o1, Shape o2) {  
         //你的代碼     
      }         
};
答:shapeComparator這個對象操做了Comparator這個接口。要建立匿名內部類也要和定義類的時候操做接口同樣,重寫接口當中的抽象方法。

Q4 GUI中的事件處理

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

任何支持GUI的操做環境都要不斷地監視
敲擊鍵盤或點擊鼠標這樣的事件
事件源:可以產生時間的一些組件,如botton。
監聽器:當某個事件發生的時候,但願執行一段與該事件對應的代碼。這段被執行的代碼應放到相應監聽器中的某個方法中。

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{//監聽器
        public void actionPerformed(ActionEvent e) {
            System.out.println("Action occurred");
            System.out.println(e.getSource());//得到事件源
        }
    }
}

Q5 結對編程:面向對象設計

繼續完善上週的項目做業。考覈點以下:框架

5.1 嘗試使用圖形界面改寫。

(只是作了大概,由於有一些操做方法仍是不懂,沒法實現其餘功能!!!)
登陸界面:

商品界面:ide


購物車界面:佈局

private void accountActionPerformed(java.awt.event.ActionEvent evt) {                                        
    String a=account.getText();
          // TODO add your handling code here:
    }

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

本身作的。學習

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

大部分方法要結合Netbeans裏的組件來完成。ui

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

4 PTA實驗

5.3 ArrayIntegerStack,功能與棧同樣,在內部創建一個數組和一個標記top,記錄棧頂位置,判斷是否棧空或棧滿,private Integer[] arr; private int top=0;,實現接口的功能,主要是top的值的改變,最難的是判斷棧空和棧滿時,要輸出對應數量的null,此時可根據top-arr.length的差值來輸出null的個數。若是用ArrayList操做的話,就是用add()和remove()方法來實現,相對來講會簡單一些。
5.4 靜態內部類,主要在外部類的方法中,建立內部類對象,使用內部類的屬性,靜態內部類不能直接訪問外部類的非靜態成員,但能夠經過 new 外部類().屬性 的方式訪問。this

相關文章
相關標籤/搜索