天天看點

JavaSE總結Java SE

Java SE

文章目錄

  • Java SE
    • 一、資料類型
      • 1、基本資料類型
      • 2、常量
      • 3、運算
    • 二、流程控制
      • 1、選擇
      • 2、循環
      • 3、跳轉
      • 4、遞歸
    • 三、數組
      • 1、概述
      • 2、二維(多元)數組
      • 3、方法
    • 四、類和對象
      • 1、類、方法
      • 2、修飾符
      • 3、關鍵字
        • this
        • static
        • final
        • super
        • synchronize
        • volatile
      • 4、記憶體分析
      • 5、繼承、封裝和多态
        • 繼承 extends
        • 抽象類 abstract
        • 多态
        • 接口 interface
        • 内部類
      • 6、重載(overload)和覆寫(override)
        • 方法重載
        • 方法覆寫(重寫)
      • 7、類加載,對象初始化
        • 類加載
        • 對象初始化
    • 五、異常
      • 1、異常分類
      • 2、異常處理
    • 六、常用類
      • 1、String、StringBuffer、StringBuilder
      • 2、時間相關
      • 3、Math
      • 4、File
      • 5、枚舉
      • 6、包裝類
    • 七、IO
    • 八、Lambda表達式
    • 九、Stream API
    • 十、自定義注解
    • 十一、多線程
    • 十二、java 容器

一、資料類型

1、基本資料類型

​ 字元集、命名規則、關鍵字、保留字、1byte = 8bit

​ 整數:byte(1位元組,-128~127),short(2位元組),int(4位元組),long(8位元組)

​ 浮點:float(4位元組),double(8位元組),預設double,浮點建議用BigDecimal

​ 字元型:char(2位元組)

​ 布爾型:boolean(1位)

2、常量

final 、 static

3、運算

自動轉換

強制轉換

操作數1類型 操作數2類型 轉換後類型
byte、short、char int int
byte、short、char、int long long
byte、short、char、int、long float float
byte、short、char、int、long、float double double

​ = 号 右側:所有變量先轉換為位元組數最多的資料類型,再計算

​ = 号 兩側:左側寬度>右側寬度 自動轉換;左側寬度<右側寬度 強制轉換

二、流程控制

1、選擇

if、else、if-else、switch(jdk1.8後String,注意break)

2、循環

while 、for 、do-while、 foreach

3、跳轉

break、continue、return

4、遞歸

注意結束條件

盡量避免使用遞歸、耗時、費記憶體

三、數組

1、概述

​ 數組是相同類型資料的有序集合 、

​ 數組屬于引用類型

​ 元素是任何資料類型(基本、引用)

​ 長度确定且不變,需要避免越界

​ 聲明(可以不确定長度),配置設定空間(确定)、棧記憶體

int[] a = new int[5];
int[] b = new int[]{1,2,3};	//靜态初始化
int[] c = {4,5,6};			//必須在一條語句中完成
           

2、二維(多元)數組

int[][] a = new int[2][2];
int[][] b = {{1,2},{3,4,5,6},{7,8,9}};
int[][] c = new int[3][];
int[][] d = new int[][4]; //非法
int e[3][2] = {{1,2},{2,3},{4,5}}; //非法
           

3、方法

1、 System.arraycopy(Object src,int srcPos,Object dest,int destPos,int length);
2、Java.util.Arrays:
- .toString
- .equals
- .sort
- .binarySearch

    
           

四、類和對象

1、類、方法

方法中的參數傳遞是值傳遞

2、修飾符

成員(成員變量戒成員方法)通路權限共有四種:

  • public 公共的

    可以被項目中所有的類通路。 (項目可見性)

  • protected 受保護的

    可以被這個類本身通路;同一個包中的所有其他的類通路;被它的子類(同一個包以及不同包中的子類)通路

  • default/ friendly 預設的/友好的(包可見性)

    被這個類本身通路;被同一個包中的類通路。

  • private 私有的

    隻能被這個類本身通路。(類可見性)

類的通路權限隻有兩種:

  • public 公共的

    可被同一項目中所有的類通路。 (必須與檔案名同名)

  • default/ friendly 預設的/友好的

    可被同一個包中的類通路。

3、關鍵字

this

表示目前對象的引用

構造方法中使用this 來調用其他構造方法,必須是第一條語句

this不能用于static方法

static

  • 用來修飾成員變量,将其變為類的成員,進而實作所有對象對于該成員的共享( 對于該類的所有對象來說, static成員變量隻有一份)
  • 用來修飾成員方法,将其變為類方法,可以直接使用“類名.方法名”的方式調用,常用于工具類;前期綁定

    在調用該方法時,不會将對象的引用傳遞給它,是以在static方法中不可通路非static的成員。

    靜态方法不能以任何方式引用this和super關鍵字

  • 靜态塊用法,将多個類成員放在一起初始化,使得程式更加規整,其中了解對象的初始化過程非常關鍵;

    1、類第一次被載入時先執行static代碼塊;類多次載入時, static代碼塊隻執行一次;

    ​ 是在類初始化時執行,不是在建立對象時執行。

    2、代碼塊

    普通代碼塊 --> 直接在方法戒語句中定義的代碼塊

    構造代碼塊 --> 直接寫在類中的代碼塊

    靜态代碼塊 --> 使用static聲明的代碼塊

    同步代碼塊 --> 多線程中使用

  • 靜态導包用法,将類的方法直接導入到目前類中,進而直接使用“方法名”即可調用類方法,更加友善。
    import static java.lang.Math.*;//導入Math類的所有靜态屬性
    import static java.lang.Math.PI;//導入Math類的PI屬性
               

final

  1. final修飾基本類型,使數值恒定不變。(若無static關鍵字,可以在建立對象初始化過程中改變數值)
  2. final修飾基本對象引用,使引用恒定不變,但是引用的對象其本身卻是可以被修改的
  3. 一個既是static又是final的域(變量)隻占據一段不能改變的記憶體空間
  4. final修飾類不允許繼承
  5. final指派初始化:必須在域的定義處或者每個構造器中用表達式對final進行指派
  6. final修飾方法:把方法鎖定,不能override,以防任何繼承類修改它的含義。有效關閉動态綁定

super

  1. super隻能出現在子類的方法和構造方法中
  2. super調用構造方法時,隻能是第一句
  3. super和this不能同時出現在構造方法中
  4. super不能通路父類的private成員
  5. super和this都不能在static方法中

synchronize

volatile

  • 保證該變量對所有線程的可見性:
  • 在多線程的環境下:當這個變量修改時,所有的線程都會知道該變量被修改了,也就是所謂的“可見性”
  • 不保證原子性:
  • 修改變量(指派)實質上是在JVM中分了好幾步,而在這幾步内(從裝載變量到修改),它是不安全的。

4、記憶體分析

  • 棧:
    • 存放:局部變量
    • 先進後出,自下而上存儲
    • 方法執行完畢,自動釋放空間
  • 堆:
    • 存放new出來的對象
    • 需要垃圾回收器來回收:System.gc()
  • 方法區:

    – 存放類的資訊(代碼)、 static變量、字元串常量等

5、繼承、封裝和多态

繼承 extends

  • 通過super 通路父類中被子類覆寫的方法或屬性。 super代表父類對象
任何類的構造函數中,若是構造函數的第一行代碼沒有顯式的調用super(…);那麼Java預設都會調用super();作為父類的初始化函數。
  • 子類繼承父類的成員變量和成員方法,但不繼承父類的構造方法 ,也不能通路父類private成員
  • 注意protected關鍵字
  • 多重繼承初始化順序

    父類屬性 > 父類構造方法 > 子類屬性 > 子類構造方法

抽象類 abstract

抽象方法沒有方法體

– 抽象方法必須在抽象類裡

– 抽象方法必須在子類中被實作,除非子類是抽象類

多态

同一個引用類型,使用不同的執行個體而執行不同操作

實作多态的兩種形式

– 使用父類作為方法形參實作多态

– 使用父類作為方法傳回值實作多态

類型轉換

向上轉型——子類轉換為父類,自動進行類型轉換

如果子類重寫了父類的某個方法,向上轉型對象調用該方法時,是調用的重寫方法。

向上轉型對象丌能操作子類新增的成員變量和方法

向下轉型——父類轉換為子類,結合instanceof運算符進行強制類型轉換

接口 interface

接口就是規範,定義了一組規則

接口不可以被執行個體化

實作類必須實作接口的所有方法

實作類可以實作多個接口

接口中的變量都是靜态常量

接口中所有方法都是抽象的。

即使沒有顯式的将接口中的成員用public标示,也是public通路類型的

接口中變量預設用 public static final标示,是以接口中定義的變量就是全局靜态常量。

可以定義一個新接口,用extends去繼承一個已有的接口

可以定義一個類,用implements去實作一個接口中所有方法。

可以定義一個抽象類,用implements去實作一個接口中部分方法

内部類

普通内部類、靜态内部類、匿名内部類、局部内部類

  • 普通内部類中不能定義 static 屬性
  • 靜态内部類也是作為一個外部類的靜态成員而存在,建立一個類的靜态内部類對象不需要依賴其外部類對象。靜态内部類中可以定義 static 屬性;靜态内部類中也無法通路外部類的非靜态成員
  • 兩種使用匿名内部類的情況:

    1、直接 new 一個接口,并實作這個接口聲明的方法,在這個過程其實會建立一個匿名内部類實作這個接口,并重寫接口聲明的方法,然後再建立一個這個匿名内部類的對象并指派給前面的 OnClickListener 類型的引用;

    2、new 一個已經存在的類 / 抽象類,并且選擇性的實作這個類中的一個或者多個非 final 的方法,這個過程會建立一個匿名内部類對象繼承對應的類 / 抽象類,并且重寫對應的方法。

  • 在局部内部類裡面可以通路外部類對象的所有通路權限的字段,而外部類卻不能通路局部内部類中定義的字段
  • 非靜态内部類可以通路外部類所有通路權限修飾的字段(即包括了 private 權限的),同時,外部類也可以通路内部類的所有通路權限修飾的字段。

6、重載(overload)和覆寫(override)

方法重載

方法名相同,參數項不相同,羽傳回值,修飾符無關

方法覆寫(重寫)

子類覆寫父類方法

重寫方法必須和被重寫方法具有相同方法名稱、參數清單和傳回類型。

重寫方法不能使用比被重寫方法更嚴格的通路權限。(由于多态)

7、類加載,對象初始化

類加載

1、确定類變量的初始值:在類初始化的時候,在準備階段jvm會為類變量(static修飾的變量)初始化,如對象會被初始化為null,int被初始化為0

2、找到入口執行:找到main方法,開始執行,在執行之前會對main方法所在類進行初始化

3、執行類初始化方法:jvm 會按順序收集類變量的指派語句、靜态代碼塊,組成類初始化方法去執行

4、執行對象執行個體化方法:JVM 會按照收內建員變量的指派語句、普通代碼塊,最後收集構造方法,組成對象執行個體化方法去執行

對象初始化

1、**準備階段是正式為類變量(static 成員變量)配置設定記憶體并設定類變量初始值(零值)的階段,這些變量所使用的記憶體都将在方法區中進行配置設定。**這時候進行記憶體配置設定的僅包括類變量,而不包括執行個體變量,執行個體變量将會在對象執行個體化時随着對象一起配置設定在堆中。

2、在準備階段,變量已經賦過一次系統要求的初始值(零值);而在初始化階段,則根據程式猿通過程式制定的主觀計劃去初始化類變量和其他資源,或者更直接地說:初始化階段是執行類構造器()方法的過程。()方法是由編譯器自動收集類中的所有**類變量(static變量)的指派動作和靜态語句塊static{}**中的語句合并産生的,編譯器收集的順序是由語句在源檔案中出現的順序所決定的,靜态語句塊隻能通路到定義在靜态語句塊之前的變量,定義在它之後的變量,在前面的靜态語句塊可以指派,但是不能通路。

3、在同一個類加載器下,一個類型隻會被初始化一次。

4、在Java中, 建立一個對象常常需要經曆如下幾個過程:父類的類構造器() -> 子類的類構造器() -> 父類的成員變量和執行個體代碼塊 -> 父類的構造函數 -> 子類的成員變量和執行個體代碼塊 -> 子類的構造函數。

五、異常

1、異常分類

  • Error
  • Exception
    • RuntimeException

      *

    • Checked

2、異常處理

1、注意: try-catch-finally中存在return語句的執行順序 ,先執行完finally中的語句(不含return),再執行catch中的return,如果finally中有return,會覆寫catch中的return

try{
	//...
}catch(Exception e){
	//...
    throw new Exception;
} finally{
	//...
}
           

2、throw和throws的差別

六、常用類

1、String、StringBuffer、StringBuilder

String類位于java.lang包中 , 不可變字元序列

char charAt(int index)			//傳回字元串中第index個字元。
boolean equals(String other)	//如果字元串與other相等,傳回true
boolean equalsIgnoreCase(String other)//如果字元串與other相等(忽略大小寫),則傳回true
int indexOf(String str/int char)//用于查找目前字元串中字元或子串,傳回字元或子串在目前字元串中從左邊起首次出現的位置,若沒有出現則傳回-1。
int lastIndexOf(String str/int idx) //從字元串的末尾位置向前查找
String concat(String str)	//将參數中的字元串str連接配接到目前字元串的後面,效果等價于"+"。   
int length() 					//傳回字元串的長度。
String replace(char oldChar,char newChar) //傳回一個新串,它是通過用 newChar 替換此字元串中出現的所有oldChar而生成的
String replaceFirst(String regex, String replacement)  //該方法用字元replacement的内容替換目前字元串中遇到的第一個和字元串regex相比對的子串,應将新的字元串傳回。
String replaceAll(String regex, String replacement)    //該方法用字元replacement的内容替換目前字元串中遇到的所有和字元串regex相比對的子串,應将新的字元串傳回。
boolean startsWith(String prefix)	//如果字元串以prefix開始,則傳回true
boolean endsWith(String prefix)		//如果字元串以prefix結尾,則傳回true
String substring(int beginIndex)    該方法從beginIndex位置起,從目前字元串中取出剩餘的字元作為一個新的字元串傳回。
String substring(int beginIndex,int endIndex)  //傳回一個新字元串,該串包含從原始字元串beginIndex到串尾戒endIndex-1的所有字元
String toLowerCase() 	//傳回一個新字元串,該串将原始字元串中的所有大寫字母改成小寫字母
String toUpperCase() 	//傳回一個新字元串,該串将原始字元串中的所有小寫字母改成大寫字母
String trim()			//一個新字元串,該串删除了原始字元串頭部和尾部的空格

           

equals判斷字元串值相等, ==判斷字元串對象引用相等

StringBuffer:String增強版。字元串緩沖區,是一個容器 ,線程安全

StringBuilder:可變字元序列、效率高、線程不安全

2、時間相關

JavaSE總結Java SE

3、Math

數學相關方法

4、File

IO

5、枚舉

  1. 隻能夠取特定值中的一個
  2. 使用enum關鍵字
  3. 所有的枚舉類型隐性地繼承自 java.lang.Enum。(枚舉實質上還是類!而每個被枚舉的成員實質就是一個枚舉類型的執行個體,他們預設都是public static final的。可以直接通過枚舉類型名直接使用它們。)

6、包裝類

自動裝箱和自動拆箱 (auto-boxing & unboxing)

裝箱: 基本 -->類 new Integer(int) Integer.valueOf(int i) ;

拆箱: 類 -->基本 intValue()

七、IO

Java IO

八、Lambda表達式

Lambda表達式

九、Stream API

​Stream API

十、自定義注解

自定義注解

十一、多線程

多線程基礎

十二、java 容器

java 容器