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

1. 本章學習總結

1.1 面向對象學習暫告一段落,請使用思惟導圖,以封裝、繼承、多態爲核心概念畫一張思惟導圖,對面向對象思想進行一個總結。
注1:關鍵詞與內容不求多,但概念之間的聯繫要清晰,內容覆蓋面向對象的核心內容便可。
注2:顏色要少、連線不要複雜,必要的時候要在連線上進行說明。
java

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

  • 克隆對象兩個步驟覆蓋clone方法:1.聲明爲public;2.實現Cloneable接口;
  • 嵌套類分爲兩種:static;non static;內部類能夠訪問外圍類的全部屬性與方法,包括private屬性與方法;構造內部類(non static)注意:首先必須有外圍類,而後才能創建其內部類;
  • 靜態嵌套類(static nested):靜態內部類至關於一個全新的類。可直接創建,不須要先創建外圍類,不能訪問外圍類的實例成員(non static)與方法;
  • Java8中匿名類或局部類能夠訪問外部的非final變量;
  • Labmda表達式語法:參數 -> 表達式或程序塊{ },若是是表達式,則return該表達式的值(無需寫return語句),若是是程序塊{ },能夠包含多條語句。數組

    2. 書面做業

    1.clone方法
    1.1 Object對象中的clone方法是被protected修飾,在自定義的類中覆蓋clone方法時須要注意什麼?
    Answer:由於protected對本包和全部子類可見。覆蓋clone方法1:聲明爲publi:;2:實現Cloneable接口
    1.2 本身設計類時,通常對什麼樣的方法使用protected進行修飾?以做業Shape爲例說明。
    Answer:protected對本包和全部子類可見,因此若是有些類只想讓本包和子類訪問的話就用protected修飾。getArea就是繼承shape的,用protected修飾。
    1.3 在test1包中編寫簡單的Employee類,在test2包中新建一個TestProtected類,並在main中嘗試調用test1包中的Employee的clone方法克隆一個新對象,可否成功?爲何?
    Answer:這個很顯然是不能成功的,由於Employ類和TestProtected類不是在同一個包中,也沒有繼承關係,因此不能成功。能夠在test2包里加上import test1.Employee或者讓TestProtected繼承Employee類。
    2.使用匿名類與Lambda表達式改寫題集面向對象2-進階-多態接口內部類的題目5-2
  • 僅需粘貼關鍵代碼與運行結果,圖片不要太大。
    題目:

    代碼:ide

import java.util.*;

public class Main {
    public static void main(String[] args)
    {
        Scanner in=new Scanner(System.in);
        int n=in.nextInt();
        ArrayList<PersonSortable2> person=new ArrayList<PersonSortable2>();
        for(int i=0;i<n;i++){
            person.add(new PersonSortable2(in.next(),in.nextInt()));
        }
        Collections.sort(person,new NameComparator());
        System.out.println("NameComparator:sort");
        for(int i=0;i<person.size();i++){
            System.out.println(person.get(i));
        }
        Collections.sort(person,new AgeComparator());
        System.out.println("AgeComparator:sort");
        for(int i=0;i<person.size();i++){
            System.out.println(person.get(i));
        }
        System.out.println(Arrays.toString(NameComparator.class.getInterfaces()));
        System.out.println(Arrays.toString(AgeComparator.class.getInterfaces()));
    }
}
class PersonSortable2{
    private String name;
    private int age;
    public PersonSortable2(String name, int age){
        this.name = name;
        this.age = age;
    }
    public String toString(){
        return this.name+'-'+this.age;
    }
    public String getName(){
        return name;
    }
    public int getAge(){
        return age;
    }
}
class NameComparator implements Comparator<PersonSortable2>{
    @Override
    public int compare(PersonSortable2 p1,PersonSortable2 p2){
        return p1.getName().compareTo(p2.getName());
    }
}
class AgeComparator implements Comparator<PersonSortable2>
{
    @Override
    public int compare(PersonSortable2 p1,PersonSortable2 p2){
        return p1.getAge()-p2.getAge();
    }
}

改寫後函數

Comparator<PersonSortable1> NameComparator = new Comparator<PersonSortable1>(){
            public int compare(PersonSortable1 o1, PersonSortable1 o2) {
                if (o1 == o2) return 0;
                return o1.getName().compareTo(o2.getName());
            }
        };
        Comparator<PersonSortable1> AgeComparator = new Comparator<PersonSortable1>(){
            public int compare(PersonSortable1 o1, PersonSortable1 o2) {
                if (o1 == o2) return 0;
                return o1.getAge()-o2.getAge();
            }
        };

Lambda表達式:學習

Comparator<PersonSortable2> NameComparator=(o1,o2)-> o1.getName().compareTo(o2.getName());
       Comparator<PersonSortable2> AgeComparator=(o1,o2)-> o1.getAge()-o2.getAge();

運行結果截圖:
this

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

Comparator<Shape> shapeComparator = new  Comparator<Shape>() {  
     @Override  
     public int compare(Shape o1, Shape o2) {  
         //你的代碼     
      }         
};

Answer:shapeComparator這個對象操做了Comparator這個接口也就是說shapeComparator實現了Comparator接口。
4.GUI中的事件處理
4.1 寫出事件處理模型中最重要的幾個關鍵詞。
Answer:
(1)事件源:任何支持GUI的操做,如敲擊鍵盤或點擊鼠標這樣的事件;
(2)事件對象:可以產生事件的GUI組件對象;
(3)事件監聽器:根據某種類型的事件XXXEvent,定義對應的事件監聽器類,該類須要實現針對特定事件的特定接口XXXListener;
(4)事件適配器:當須要對某種事件進行處理時,只需讓事件處理類繼承事件所對應的適配器類,只重寫須要關注的方法便可,而無關的方法就沒必要實現了。
4.2 使用代碼與註釋,證實你理解了事件處理模型。
使用NetBeans,建立一個JFrame上有一個JButton
事件: ActionEvent
事件源:javax.swing.JButton
事件監聽器:3d

jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

5.結對編程:面向對象設計(大做業2-很是重要,未完成-2)
繼續完善上週的項目做業。考覈點以下:
5.1 嘗試使用圖形界面改寫。
5.2 給出兩人在碼雲上同一項目的提交記錄截圖。
5.3 與上週相比,項目的主要改動是什麼?



絞盡腦汁仍是不太會寫,最終在friend的幫助下弄了這些,新的軟件還不太熟悉,最近忙瘋了,事情太多了,整我的都有點難受,Java的代碼都不太會。
感受就是加了圖形界面的改寫,輸入輸出的改動吧。code

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

3.1碼雲代碼提交記錄

  • 在碼雲的項目中,依次選擇「統計-Commits歷史-設置時間段」, 而後搜索並截圖

3.2. PTA實驗

函數(選作:4-1)、編程(5-3, 5-4)
必定要有實驗總結
5-3的編程沒有理解好題目的意思,一直覺得輸入格式是一塊兒的,後來發現,原來能夠先輸入一部分,而後打印出來,再輸入繼續操做~害我糾結了很久都不知道該怎麼辦。。還有就是空行沒有清掉,這是由於本身自做聰明加了換行符。- -。還有就是定義IntegerStack的實現類ArrayIntegerStack,內部使用數組實現,建立時,可指定內部數組大小這裏編寫實現類的時候不太懂,一直沒作出來,很難受!一步步慢慢來吧!這兩週事情比較多,都快忙死了,博客作得不太好~下次好好改進* 。*!

相關文章
相關標籤/搜索