Java基礎知識點總結筆記

面向對象的三大特性

繼承:通常只能單繼承,內部類實現多繼承,接口能夠多繼承
java

封裝:訪問權限控制public>protected>包>private內部類也是一種封裝程序員

多態:編譯時多態,體如今向上轉型和向下轉型,經過引用類型判斷調用哪一個方法(靜態分配)。運行時多態,體如今同名函數經過不一樣的參數實現多種方法(動態分配)。數組

基本數據類型

1.基本類型位數,自動裝箱,常量池。
多線程

2.例如byte類型是1byte也就是8位,能夠表示的數字是-128到127,由於還有個0,加起來一共是256,也就是2的八次方。32位和64位機器的int是4個字節也就是32位,char是一個字節就是8位,float是4個字節,double是8個字節,long是8個字節。框架

3.基本數據類型的包裝類只在數字範圍-128到127中用到常量的池,會自動拆箱裝箱,其他數字範圍的包裝類則會新建實例。jvm

String及包裝類

1.String類型是final類型,在堆中分配空間後內存地址不可變。函數

2.底層是final修飾的char[]數組,數組的內存地址一樣不可變。但實際上能夠經過修改char[n] = 'a'來進行修改,不會改變String實例的內存值,不過在jdk中,用戶沒法直接獲取char[],也沒有方法能操做數組。因此String類型的不可變實際上也是理論上的不可變。因此咱們在分配String對象之後,若是將其 = "abc",那也只是改變了引用的指向,實際上沒有改變原來的對象。ui

3.StringBuffer和StringBuilder底層是可變的char[]數組,繼承父類AbstracStringBuilder的各類成員和方法,實際上的操做都是由父類方法來完成的。spa

final關鍵字

1.final修飾基本數據類型保證不可變線程

2.final修飾引用保證引用不能指向別的對象,不然會報錯。

3.final修飾類,類的實例分配空間後地址不可變,子類不能重寫全部父類方法。所以在cglib動態代理中,不能爲一個類的final修飾的函數作代理,由於cglib要將被代理的類設置爲父類,而後再生成字節碼。final修飾方法,子類不能重寫改方法。

抽象類和接口

1.抽象類能夠有方法實現。抽象類能夠有非final成員變量。抽象方法要用abstract修飾。抽象類能夠有構造方法,可是隻能有子類進行實例化。

2.接口能夠用extends加多個接口實現多繼承。接口只能有public final類型的成員變量。接口只能有抽象方法,不能有方法體,接口不能實例化,可是能夠做爲引用類型。

代碼塊和加載順序

假設該類是第一次進行實例化。那麼有以下加載順序

靜態老是比非靜態優先,從早到晚的順序是:

1.靜態代碼塊和靜態成員變量的順序根據代碼位置先後來決定。

2.代碼塊和成員變量的順序也是根據代碼位置來決定

3.最後才調用構造方法。

包,內部類,外部類

1.Java項目通常從src目錄開始有com...A.java這樣的目錄結構。這就是包結構。因此通常編譯後的結構是根包結構如出一轍的,這樣的結構保證了import時能找到正確的class引用包訪問權限就是指同包下的類可見。

import通常加上全路徑,而且使用.*時只包含當前目錄的全部類文件,不包括子目錄。

2.外部類只有public和default兩種修飾,要麼全局可訪問,要麼包內可訪問。

3.內部類能夠有所有訪問權限,由於它的概念就是一個成員變量,因此訪問權限設置與通常的成員變量相同。

非靜態內部類是外部類的一個成員變量,只跟外部類的實例有關。

靜態內部類是獨立於外部類存在的一個類,與外部類實例無關,能夠經過外部類.內部類直接獲取Class類型。

異常

1.異常體系的最上層是Throwable類。子類有Error和Exception。Exception的子類又有RuntimeException和其餘具體的可檢查異常。

2.Error是jvm徹底沒法處理的系統錯誤,只能終止運行。運行時異常指的是編譯正確但運行錯誤的異常,如數組越界異常,通常是人爲失誤致使的,這種異常不用try catch,而是須要程序員本身檢查。可檢查異常通常是jvm處理不了的一些異常,但又常常會發生,好比Ioexception,Sqlexception等,是外部實現帶來的異常。

3.多線程的異常流程是獨立的,互不影響。大型模塊的子模塊異常通常須要從新封裝成外部異常再次拋出,不然只能看到最外層異常信息,難進行調試。日誌框架是異常報告的最好幫手,log4j,slf4j中,在工做中必不可少。

泛型

1. Java中的泛型是僞泛型,只在編譯期生效,運行期自動進行泛型擦除,將泛型替換爲實際上傳入的類型。

泛型類用classA {

}

2. 這樣的形式表示,裏面的方法和成員變量均可以用T來表示類型。泛型接口也是相似的,不過泛型類實現泛型接口時能夠選擇注入實際類型或者是繼續使用泛型。

3. 泛型方法能夠自帶泛型好比void <E> go();

泛型可使用?通配符進行泛化 Object能夠接受任何類型

也可使用 這種方式進行上下邊界的限制。

Class類和Object類

1. Java反射的基礎是Class類,該類封裝全部其餘類的類型信息,而且在每一個類加載後在堆區生成每一個類的一個Class<類名>實例,用於該類的實例化。

2. Java中能夠經過多種方式獲取Class類型,好比A.class,new A().getClass()方法以及Class.forName("com.?.?.A")方法。

3. Object是全部類的父類,有着本身的一些私有方法,以及被全部類繼承的9大方法。

知乎上有人討論Object和Class類型誰先加載誰後加載,由於每一個類都要繼承Object,可是又得先被加載到堆區,事實上,這個問題在JVM初始化時就解決了,不必多想

 

 未完待續。。。

相關文章
相關標籤/搜索