20165220 Java第六週學習總結

教材學習內容總結

  • 正則表達式:正則表達式是一個String對象的字符序列,該字符序列中含有具備特殊意義的字符,這些特殊字符稱做正則表達式的元字符。
  • 鏈表:由若干個稱做結點的對象組成的一種數據結構,用於動態的減小或增長數據項。
  • String類是final類,也即意味着String類不能被繼承,而且它的成員方法都默認爲final方法。在Java中,被final修飾的類是不容許被繼承的,而且該類中的成員方法都默認爲final方法。
  • String對象:可使用String類聲明對象並建立對象,例如:String s = new String("we are students");
    String t = new String("we are students");
  • 堆棧對象的建立以及壓棧、彈棧的操做等
  • 鏈表:由若干個稱做結點的對象組成的一種數據結構,用於動態的減小或增長數據項。
  • 獲取堆棧頂端的數據,但不刪除該數據: public int search(Object data);
  • 使用String類調用format方法對數字進行格式化;
  • 使用Date及Calendar處理和日期、時間相關的數據;
  • 泛型(Generics),其主要目的是能夠創建具備類型安全的集合框架,如鏈表、散列映射等數據結構。
    可使用「class 名稱<泛型列表>」聲明一個類,爲了和普通的類有所區別,這樣聲明的類稱做泛型類,如:
    class People其中People是泛型類的名稱,E是其中的泛型,也就是說咱們並無指定E是何種類型的數據,它能夠是任何對象或接口,但不能是基本類型數據。
  •  java.lang.String類使用了final修飾,不能被繼承。Java程序中的全部字面值,即雙引號括起的字符串,如"abc",都是做爲String類的實例實現的。String是常量,其對象一旦構造就不能再被改變。換句話說,String對象是不可變的,每個看起來會修改String值的方法,實際上都是創造了一個全新的String對象,以包含修改後的字符串內容。而最初的String對象則絲毫未動。String對象具備只讀特性,指向它的任何引用都不可能改變它的值,所以,也不會對其餘的引用有什麼影響。可是字符串引用能夠從新賦值。java字符串在內存中採用unicode編碼方式,任何一個字符對應兩個字節的定長編碼,即任何一個字符(不管中文仍是英文)都算一個字符長度,佔用兩個字節。
  • 常量池(constant pool)指的是在編譯期被肯定,並被保存在已編譯的.class文件中的一些數據。它包括了關於類、方法、接口等中的常量,也包括字符串常量。Java爲了提升性能,靜態字符串(字面量/常量/常量鏈接的結果)在常量池中建立,並儘可能使用同一個對象,重用靜態字符串。對於重複出現的字符串直接量,JVM會首先在常量池中查找,若是常量池中存在即返回該對象。
  • String、StringBuffer和StringBuilder的區別

    1.對象的可變與不可變html

      String類中使用字符數組來保存數據,由於有「final」修飾符,因此string對象是不可變的。以下:java

    private final char value[];git

      StringBuilder與StringBuffer都繼承自AbstractStringBuilder類,在AbstractStringBuilder中也是使用字符數組保存數據,這兩種對象都是可變的。以下:正則表達式

        char[] value;數組

    2.是不是線程安全安全

      String中的對象是不可變的,也就能夠理解爲常量,因此是線程安全數據結構

      AbstractStringBuilder是StringBuilder與StringBuffer的公共父類,定義了一些字符串的基本操做,如expandCapacity、append、insert、indexOf等公共方法。多線程

      StringBuffer對方法加了同步鎖或者對調用的方法加了同步鎖,因此是線程安全的app

    3.StringBuilder與StringBuffer共同點框架

      StringBuilder與StringBuffer有公共的抽象父類AbstractStringBuilder。

      抽象類與接口的一個區別是:抽象類中能夠定義一些子類的公共方法,子類只須要增長新的功能,不須要重複寫已經存在的方法;而接口中只是對方法的申明和常量的定義。

      StringBuilder、StringBuffer的方法都會調用AbstractStringBuilder中的公共方法,如super.append(...)。只是StringBuffer會在方法上加synchronized關鍵字,進行同步。

    若是程序不是多線程的,那麼使用StringBuilder效率高於StringBuffer。

     

代碼調試中的問題和解決過程

在編譯的時候出現了這個錯誤提示;

解答:檢查了代碼沒有任何問題出現,參考以前發生過的錯誤,我首先分析了緣由,這應該是須要多個文件共同編譯致使的。隨後我查閱資料並詢問同窗,找到了一種辦法,就是將相關的文件加以相同的前綴,而後統一編譯、運行。就好比E9_1 E9_2 E9_3,而後用命令javac E9*.java來進行編譯運行。雖然使得類名沒意義,可是能解決問題。能夠在此基礎上再尋求更好的解決方案。

代碼託管

上週考試錯題總結

錯題1:

父類中有個public void fight(),子類中有個public void fight( Weapon w),這兩個方法的關係是Override.

A.true
B.false
解析:子類重寫的方法,方法名字、參數個數、參數類型和父類的方法徹底相同。這裏是重載.

錯題2:
下列關於abstract關鍵字的說法,正確的是
A.可使用static修飾abstract方法。
B.非abstract類中不能夠有abstract方法。
C.不能使用new建立abstract類的對象。
D.不容許使用final和abstract同時修飾一個方法.
E.可使用public abstract void eat(){};來聲明抽象方法eat()。
F.抽象方法只保留方法的功能,而具體的執行,交給繼承抽象類的子類,由子類重寫此抽象方法。
解析:5.9節。A項:abstract關鍵字不能應用於static、private或final 方法。E項:不能有方法體。

感悟:

這周的內容比前兩週明顯多了很多,並且是過去沒有接觸過的新知識和新概念,理解起來須要必定的時間,編寫代碼也要一步一步地努力提升。我對這些新知識如今還掌握得不夠熟練,但願多花時間敲代碼後可以熟練應用。我以爲課前預習是很是有必要的,若是不及時掌握那麼會被落下不少不少,跟着大部隊一塊兒前進纔是最好的,結對學習也初次體驗了樂趣,相信之後會愈來愈好!

參考資料

《Java學習筆記(第8版)》學習指導

相關文章
相關標籤/搜索