java學習(四)

學號 20189214 《Java程序設計》第四周學習總結

教材學習內容總結

枚舉

枚舉是JDK1.5版本新增的特性(泛型、For-each等現在被普遍應用的特性也是由JDK1.5時所新增的),另外到了JDK1.6後switch語句支持枚舉類型。
枚舉與靜態final區別html

  1. 在保證變量只能被賦給一個有效值這方面,enum比靜態final好。
  2. 枚舉值是一個對象,會編譯爲一個.class文件,其行爲就像對象同樣,能夠用做一個Map鍵。

枚舉的好處以及與常量類的區別java

  1. 枚舉型能夠直接與數據庫打交道,我一般使用varchar類型存儲,對應的是枚舉的常量名。(數據庫中好像也有枚舉類型,不過也沒用過)
  2. switch語句支持枚舉型,當switch使用int、String類型時,因爲值的不穩定性每每會有越界的現象,對於這個的處理每每只能經過if條件篩選以及default模塊來處理。而使用枚舉型後,在編譯期間限定類型,不容許發生越界的狀況
  3. 當你使用常量類時,每每得經過equals去判斷二者是否相等,使用枚舉的話因爲常量值地址惟一,能夠用==直接對比,性能會有提升
  4. 常量類編譯時,是直接把常量的值編譯到類的二進制代碼裏,常量的值在升級中變化後,須要從新編譯引用常量的類,由於裏面存的是舊值。枚舉類編譯時,沒有把常量值編譯到代碼裏,即便常量的值發生變化,也不會影響引用常量的類。
  5. 枚舉類編譯後默認爲final class,不容許繼承可防止被子類修改。常量類可被繼承修改、增長字段等,容易致使父類的不兼容。
  6. valueOf()經過常量名獲取對應的枚舉實例。git

    shapType type = shapType.valueOf("OVAL");
    System.out.println(type);數據庫

java.lang.Enum
enum具備以下的屬性:數組

  • 它們沒有公有的構造函數,這使得不可能將其實例化。
  • 它們隱式地是靜態的。
  • 每一個enum常量只有一個實例。安全

    泛型

    泛型類型

    泛型類型必須是java.lang.Throwable類的一個直接或間接子類。多線程

    public class GenericListDemo1 {
    public static void main(String[] args) {
    // without generics
    List stringList1 = new ArrayList();
    stringList1.add("Java");
    stringList1.add("without generics");
    // cast to java.lang.String
    String s1 = (String) stringList1.get(0);
    System.out.println(s1.toUpperCase());框架

    // with generics and diamond
     List<String> stringList2 = new ArrayList<>();
     stringList2.add("Java");
     stringList2.add("with generics");
     // no type casting is necessary
     String s2 = stringList2.get(0);
     System.out.println(s2.toUpperCase());

    }
    }
    使用?通配符
    若是你聲明一個List ,能夠存儲以下的對象: 函數

  • aType的一個實例
  • aType的一個子類的實例
  • 實現了aType的一個類的實例性能

示例:

List<?> myList = new ArrayList<?>()  錯誤
List<Object> myList = new ArrayList<>()
List<? extends Number> 定義上界
List<? SUPER Integer> 做爲一個方法參數的類型
public static final <T> List<T> emptyList()

集合框架

集合是將其餘對象組織到一塊兒的一個對象,集合也叫容器,它提供了一種方法來存儲、訪問和操做其元素。

Collection接口

  1. List(add,set,remove,asList)容許重複
  2. Set 不容許重複
  3. Queue (offer,Remove,Poll,Element,Peek)
  4. Map(keySet,values,entrySet)

    使得對象可比較和可排序

    須要經過Arrays.sort或Collections.sort來支持排序的任何類,都必須實現Comparable接口。

    public class Elephant implements Comparable {
    public float weight;
    public int age;
    public float tuskLength;
    public int compareTo(Object obj) {
    Elephant anotherElephant = (Elephant) obj;
    if (this.weight > anotherElephant.weight) {
    return 1;
    } else if (this.weight < anotherElephant.weight) {
    return -1;
    } else {
    // both elephants have the same weight, now
    // compare their age
    return (this.age - anotherElephant.age);
    }
    }
    }

    操做日期和時間

  5. Instant類表示時間線上的一個時間點,用來計時一項操做。
  6. LocalDate來建模沒有時間部分的日期。(記念日)
  7. Period表示基於日期的一個時間量,例如5天、一週或3年。
  8. LocalDataTime類表示一個沒有時區的日期時間。
  9. ZonedDateTime類表示帶有時區的日期時間。是不可變的。
  10. Duration類
  11. java.time.format.DateTimeFormatter能夠格式化一個本地日期或帶時區的日期時間。

教材學習中的問題和解決過程

  • 問題1:集合框架的關係不清楚
  • 問題1解決方案:查閱資料


全部集合類都位於java.util包下。Java的集合類主要由兩個接口派生而出:Collection和Map,Collection和Map是Java集合框架的根接口,這兩個接口又包含了一些子接口或實現類。

集合接口:6個接口(短虛線表示),表示不一樣集合類型,是集合框架的基礎。
抽象類:5個抽象類(長虛線表示),對集合接口的部分實現。可擴展爲自定義集合類。
實現類:8個實現類(實線表示),對接口的具體實現。
Collection 接口是一組容許重複的對象。
Set 接口繼承 Collection,集合元素不重複。
List 接口繼承 Collection,容許重複,維護元素插入順序。
Map接口是鍵-值對象,與Collection接口沒有什麼關係。
9.Set、List和Map能夠看作集合的三大類:
List集合是有序集合,集合中的元素能夠重複,訪問集合中的元素能夠根據元素的索引來訪問。
Set集合是無序集合,集合中的元素不能夠重複,訪問集合中的元素只能根據元素自己來訪問(也是集合裏元素不容許重複的緣由)。
Map集合中保存Key-value對形式的元素,訪問時只能根據每項元素的key來訪問其value。
Collection接口是處理對象集合的根接口,其中定義了不少對元素進行操做的方法。Collection接口有兩個主要的子接口List和Set。

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

  • 問題1:從碼雲直接git本地的項目須要add configuration才能夠編譯。
  • 問題1解決方案:若是項目與本地JDK不一樣,要更改JDK。還須要將import的包在依賴中添加。更改PATH設置OUT路徑

代碼託管

(statistics.sh腳本的運行結果截圖)

上週考試錯題總結

1

double d = 0.1 + 0.1 + 0.1, System.out.println(i);的結果是0.3.

A .正確
B .錯誤

2

Java中,動態字符串優先使用()類
A .字符數組
B .StringBuffer
C .StringBuilder
D .String
查閱資料:
執行速度:StringBuilder > StringBuffer > String
線程安全:StringBuffer線程安全.StringBuilder線程不安全
String適用與少許字符串操做,StringBuilder適用單線程下在字符緩衝區下進行大量操做的狀況,StringBuffer使用多線程下在字符緩衝區進行大量操做的狀況。

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 150/200 2/2 20/20
第二週 200/400 1/3 20/40
第三週 100/500 1/4 10/50
第四周 200/700 1/5 15/65
  • 計劃學習時間:15小時

  • 實際學習時間:15小時

參考資料

相關文章
相關標籤/搜索