Java基礎知識點總結

      網友投稿 728 2025-04-07

      Java基礎知識總結


      配置環境變量:

      語言基礎

      循環結構

      函數(方法)

      數組

      面向對象

      面向對象三大特性

      三個修飾符

      接口

      常用類

      集合框架

      異常

      I/O框架

      多線程

      反射

      配置環境變量:

      在系統配置中新建

      變量名:“JAVA_HOME”

      變量值:“C:\Program Files (x86)\Java\jdk1.6.0_21”(jdk安裝路徑)

      在系統配置中新建

      變量名:“CLASSPATH”

      變量值:"."

      在系統變量中編輯Path變量

      添加"%JAVA_HOME%\bin;" //注意:加分號結束

      測試:運行–> cmd -->java/ javac命令回車,看到配置信息為正確(java -version查看jdk版本)

      提示:“不是內部或外部指令”為失敗

      語言基礎

      一、HelloWorld:Class–>班級 Java中Class–>類

      創建以.java結尾的源文件。

      class:類(代碼的容器)。

      main:主函數,程序執行的入口,一個類當中,只能有一個主函數。

      一行只寫一句代碼,以 ; 結束。

      Writer once Run anywhere

      JVM(Java Virtual Machine)Java虛擬機 VM Virtual Box

      二、編譯、運行:

      編譯:javac 源文件名稱.java 例:javac A.java --> HelloWorld.class

      運行:java 類名 例:java HelloWorld

      三、類的基本闡述:

      在一個源文件中,可以定義多個類,編譯后,每個類都會生成獨立的 字節碼文件。

      在一個類中,只能有一個主函數。

      公開類(public class)的類名要和文件名完全相同。

      在一個源文件中,只能有一個公開類。

      四、Package(包):

      作用:管理類、區分類。

      語法:package 包名;(必須在源文件的首行)

      帶包編譯:javac -d . 源文件名稱.java(自動生成目錄結構)

      帶包運行:java 包名.類名 (全限定名)

      采用域名倒置的規則:http://www.yangxianyang.top

      top.yangxianyang.java.class63.group1.project2.utility

      五、編碼規范:

      良好的注釋習慣:

      I. 注釋不參與編譯。

      II. 單行注釋: //單行

      III. 多行注釋: /* 多行 /

      IV. 文檔注釋: /* 文檔 */ javadoc指令生成外部說明文檔

      例:javadoc -d . 源文件名稱.java

      良好的標識符命名規范:

      I. 硬性:

      1). 數字、字母、_ 、$ ,數字不能開頭。

      2). 不能與關鍵字、保留字重名。

      II. 軟性:(約定俗成)

      1). 望文生義、見名知義。

      2). 類名可以由一個或多個單詞組成,每個單詞的首字母大寫 (Pasacl帕斯卡命名法)

      3). 函數、變量由一個或多個單詞組成,首單詞首字母小寫,拼接 詞首字母大寫(Camel駝峰命名方法)

      4). 包名全小寫,只能用特殊字符" . “,并且不能以”.“開頭或結尾。

      5). 常量全大寫,多個單詞通過”_"拼接。

      bit Byte KB MB GB TB PB EB ZB YB BB NB CB XB

      六、變量:

      一個存儲空間的表示,也是存儲數據的基本單元。

      語法:

      I. 聲明:數據類型 變量名;

      賦值:變量名 = 值;

      II. 聲明并賦值:數據類型 變量名 = 值;

      III. 同時聲明多個變量:數據類型 名1,名2,名3=值;

      七、數據類型:HotSpot 1.3.1 iadd isub imul idiv badd bsub

      基本數據類型(原始、簡單):8種

      I. 整數:

      1). byte 1個字節 -2^7 ~ 2^7-1 -128 ~ 127 0111 1111

      2). short 2個字節 -2^15 ~ 2^15-1 -32768 ~ 32767

      3). int 4個字節 -2^31 ~ 2^31-1 -2147483648 ~ 2147483647

      4). long 8個字節 -2^63 ~ 2^63-1 “add L”

      II. 小數(浮點):近似值(1bit符號位、8bits指數位、23bits尾數位)

      1). float 4個字節 1.4E-45 ~ 3.4E38 add F IEEE754標準

      2). double 8個字節 4.9E324 ~ 1.7E308

      III. 字符:無符號數(取值范圍從0 ~ 65535)

      1). char 2個字節 \u0000 ~ \uFFFF ‘A’ 65 ‘\u0041’ ASCII編碼

      2). 轉義字符: \t \n \ ’ "

      IV. 布爾:

      1). boolean 取值范圍:true / false

      引用數據類型(對象):N種

      I. 字符串:String “abc” “HelloWorld”

      八、類型轉換:

      自動類型轉換:

      I. 兩種類型相互兼容。

      II. 目標類型大于源類型。

      強制類型轉換:

      I. 整數長度合適,數據完整。

      II. 整數長度不適,數據截斷。

      III. 小數強轉整數,失去精度,如,整數長度不適,則再次數據截斷。

      IV. 字符整數互轉,數據完整,如,整數為負數,則轉型成"?"

      V. boolean的取值只有true、false,無法轉換。

      九、表達式:

      概念:使用運算符連接的變量或字面值,并可以得到一個最終結果。

      自動類型提升:

      I. 兩個操作數,有一個為double,其結果提升為double。

      II. 如果沒有double,有一個為float,其結果提升為float。

      III. 如果沒有float,有一個為long,其結果提升為long。

      IV. 如果沒有long,有一個為int,其結果提升為int。

      V. 如果沒有int,也會自動提升為int。

      VI. 任何類型與String相加(+)時,實為拼接,則提升為String。

      十、運算符:

      算數運算符:+ - * / % ++ –

      賦值運算符:= += -= *= /= %= …

      關系運算符:> < >= <= == !=

      邏輯運算符:

      I. && 與(并且):兩個條件同時為真,結果為真。(短路)

      II. || 或(或者):兩個條件有一個為真,結果為真。(短路)

      III. ! 非(不是):取反。

      三元運算符:布爾表達式? 結果1 : 結果2;

      十一、控制臺輸入:

      導包:import java.util.Scanner;

      創建Scanner變量并賦值:Scanner input = new Scanner(System.in);

      通過控制臺獲取不同內容:

      I. nextInt(); //獲取整數

      II. nextDouble(); //獲取小數

      III. next(); //獲取字符串

      IV. next().charAt(0); //獲取單個字符

      注:如果輸入了不匹配的數據,java.util.InputMismatchException

      十二、選擇結構:

      基本if選擇結構:

      if(布爾表達式){

      //表達式結果為true,則執行此代碼塊

      }

      if else選擇結構:

      if(布爾表達式){ //程序猿、程序媛

      //表達式結果為true,則執行此代碼塊

      }else{

      //否則,執行此代碼塊

      }

      多重if選擇結構:

      if(布爾表達式){

      }else if(布爾表達式){

      }else if(布爾表達式){

      }else{}

      注:相互排斥,當有一個條件被滿足時,其他均不再執行。適用于區 間判斷,保證升降的書寫順序。

      十三、分支結構:

      switch分支:

      switch(byte、short、int、char){ //JDK7之后可以判斷String

      case 1:

      //執行代碼

      break;

      case N:

      //執行代碼

      break;

      default:

      //執行代碼

      break;

      }

      break關鍵字:中斷、中止、跳出當前swithc分支結構。

      注:適用于等值判斷,所有case的選項不可重復,并不會在滿足某個 選項后自動跳出switch,必須手動添加break中斷。

      十四、局部變量:

      概念:聲明在函數內部的變量,必須先賦值再使用。

      作用范圍:定義行開始到包含它的代碼塊結束。

      命名沖突。

      循環結構

      一、循環:

      概念:通過某個條件,使一段代碼周而復始的執行。

      組成:初始部分、循環條件、循環操作、迭代部分。

      分類:

      I. while循環:

      while(布爾表達式){

      }

      特點:先判斷,再執行。

      應用場景:循環次數明確。

      例:1、2、3、4、5 ~ 100總和的統計

      II. do while循環:

      do{

      }while(布爾表達式);

      特點:先執行,再判斷。

      應用場景:循環次數不明確。

      例:先完成作業,再檢查結果。

      III. for循環【重點】:

      for(1.初始部分; 2.循環條件; 4.迭代部分){

      //3.循環操作

      }

      特點:先判斷,再執行。

      應用場景:循環次數明確。

      例:階乘。

      二、流程控制語句:

      break:中止、跳出switch或循環結構。

      continue:結束本次、進入下一次循環。

      三、嵌套循環:

      概念:在一個完整的循環結構當中,嵌套另一個完整的循環結構。

      圖形:外層控制行數,內層控制列數。

      其他:外層控制循環次數,內層控制單次循環操作。

      函數(方法)

      一、概念:實現特定功能一段代碼,可反復使用。

      二、語法:

      public static 返回值類型 函數名稱( 形式參數列表 ){

      //函數主體

      [ return value; ] //返回值

      }

      三、組成:

      函數名稱:望文生義(camel命名法)

      函數主體:邏輯代碼,完成特定功能。

      形式參數:即是函數的局部變量,可聲明0~N個,調用時完成賦值。

      返回值類型:基本數據類型、引用數據類型、void。

      返回值:

      return value;//結束當前函數,并伴有返回值,返回到函數調用處。

      return;//單獨出現,只代表結束當前函數,返回到函數調用處。

      規定:一個函數只能有一個返回值,至多是一個返回值。

      注意:當函數存在分支語句時,要保證所有分支都具有正確的返回 值。

      四、調用:

      無參調用:函數名稱();

      有參調用:函數名稱(實際參數…);//為形參賦予實際的值,類型、個數、 順序必須與形參列表完全匹配。

      數據接收:數據類型 變量名 = 函數名稱(實參列表); //當所調用的函 數具有返回值時,可通過聲明與返回值類型匹配的變量進行接收。

      執行機制:調用函數時,程序會跳轉到函數的定義位置,并優先執行 函數內部內容;執行完畢之后,會攜帶返回值,返回到函數調用位置。

      五、總結:

      一個類中可以定義多個函數,函數之間屬于并列關系,不可嵌套。

      一個函數只做一件事兒。(單一職能原則)//粒度

      減少冗余代碼、提高復用性、提高可讀性、提高可維護性、方便協同 合作。

      六、遞歸:

      將大問題拆分成小問題,解決方案一致,有固定的規律,則可實現遞歸。

      函數自己調用自己(每調用一次,等于重新調用了另外一個函數)。

      遞歸中一定包含判斷表達式,設定出口條件,否則產生無窮遞歸。

      StackOverflowError //JVM棧空間溢出錯誤

      數組

      一、概念:一組連續的存儲空間,存儲多個相同數據類型的值。

      二、語法:

      數據類型[] 數組名; //聲明數組

      數組名 = new 數據類型[ 長度 ]; //分配空間

      數據類型[] 數組名 = new 數據類型[ 長度 ]; //聲明并分配空間

      數據類型[] 數組名 = new 數據類型[]{值1,值2,值3,…} //顯示初始化

      數據類型[] 數組名 = {值1,值2,值3,…} //顯示初始化(不能分行書寫)

      三、訪問:

      index(索引、下標),有效值:0 ~ length - 1

      數組名[下標] ,進行數組元素的訪問。

      長度:數組名.length //動態獲取長度。

      遍歷:從頭到尾逐一訪問數組的元素。

      注意:避免數組下標越界錯誤(java.lang.ArrayIndexOutOfBoundsException)

      四、默認值:

      int 0

      double 0.0

      boolean false

      chara \u0000

      String null (所有的引用數據類型,默認值都是null)

      五、應用:

      統計一組元素的總和。

      數組擴容:

      I. 聲明:在原數組長度的基礎之上,重新聲明新數組。

      II. 賦值:(復制)

      1). 通過循環將原數組中的每個元素,依次復制給新數組的每個元 素。

      2). System.arraycopy(原數組名,原數組起始下標,新數組名,新數組起 始位置,長度);

      3). dataType[] java.util.Arrays.copyOf(原數組名,新長度);

      增刪元素:

      I. 將插入位置起的所有元素,依次后移一位。

      II. 將刪除位置后的所有元素,依次前移一位。

      六、排序:

      冒泡排序:相鄰的兩個數值比較大小、互換位置(升序:前小后大)

      規則:外層length-1,內層length-1-i

      選擇排序:固定值和其他值依次比較大小,互換位置。

      規則:內層 int j = i + 1;

      快速排序:java.util.Arrays.sort(數組名); //JDK提供(只能做升序)

      規則:如需降序,自行實現reverse

      七、二維數組:

      概念:一維數組的一維數組,一維數組的元素,還是數組。

      語法:

      I. 數據類型[][] 數組名;

      數組名 = new 數據類型[高維長度][低維長度];

      II. 數據類型[][] 數組名 = new 數據類型[高維長度][];//不規則矩形

      注意:低維數組必須自行通過new語句創建。

      III. 數據類型[][] 數組名;

      數組名 = new 數據類型[][]{ {v1,v2,v3},{v4,v5},{v6,v7,v8,v9} };

      面向對象

      一、面向對象思想(Object Oriented Programming):

      一切客觀存在的事物都是對象,萬物皆對象。

      對象一定具有自己的特征(屬性)和行為(方法)。

      二、類:

      概念:

      I. 在一組相同或類似的對象中,抽取出共性的特征和行為。

      II. 類是對象的模板。

      現實生活中的對象–(抽象)–>程序中的模板(類)–>

      創建程序中的對象–>解決現實問題

      類是對象的抽象,對象是類的實例

      組成:

      I. 屬性:(代表對象有什么)

      1). 實例變量(成員變量):聲明在類的內部,函數的外部,當通過 類構建對象的同時,所有成員變量都成為當前對象不可分割的 特征。

      2). 語法:數據類型 屬性名;

      局部變量 成員變量

      定義位置 函數或函數中的結構中 類的內部、函數的外部

      默認值 無 字面常量(與數組相同)

      使用范圍 從定義行到代碼塊結束 本類有效

      命名沖突 不允許與局部變量重名 可與局部變量重名,但局部變量優先

      注:如成員變量的聲明和賦值分開完成,則賦值語句必須在函數內部。

      II. 方法:(代表對象能做什么)

      訪問修飾符 返回值類型 方法名稱( 形式參數列表 ){

      //方法主體

      [return value;] //返回值

      }

      III. 方法重載(Overload):

      1). 概念:方法名稱相同、參數列表不同(類型、個數、順序)。

      2). 屏蔽使用的差異、靈活、便利。

      IV. 構造方法(Constructor):

      1). 沒有返回值類型。

      2). 構造方法名稱必須與類名完全相同。

      3). 創建對象時,觸發構造方法的調用,不可通過句點手動調用。

      4). 注意:

      a. 在類中,如沒有顯示定義構造方法,則編譯器默認提供無參 構造方法。

      b. 如顯示定義過構造方法,則無參構造方法不再默認提供。

      c. 構造方法可以重載,遵循重載規則。

      d. 通過關鍵字new對象時,根據傳入不同的參數,調用對應的 構造方法,完成對象的創建。

      e. 有參構造方法可在創建對象的同時,為各個屬性賦值,或完 成必要的初始行為。

      三、對象:

      概念:

      I. 具有多個特征和行為的實體。

      II. 對象是類的實例。

      創建對象:

      I. 語法:數據類型 對象名 = new 數據類型();

      II. 空間的分配:棧分配局部變量空間,堆分配對象空間。

      III. 屬性默認值:基本為對應的零值,引用為null。

      四、訪問屬性和方法:

      引用(存儲對象的局部變量)中保存的是對象的具體地址。(reference)

      通過引用訪問對象的屬性和方法:

      Dog d1 = new Dog();

      d1.breed = “拉布拉多”;//賦值

      d1.breed //取值

      d1.eat(); //調用方法

      五、this關鍵字:

      當前實例,當成員變量與局部變量重名時,如需使用成員變量,應增 加this.前綴。例如:this.name this.age

      通過this()或this(實參)調用本類中的其他構造方法,但必須是構造方 法的首行。

      構造方法之間可以相互調用,但最終產生的對象只有一個。每new一 次,只有一個對象。

      六、數據的傳遞(賦值):

      值傳遞:基本數據類型,傳遞的是值,一方改變不會影響另乙方。

      引用傳遞:引用數據類型,傳遞的是地址,一方改變另一方也會變。

      面向對象三大特性

      一、封裝:

      概念:盡可能的隱藏類的內部實現細節,從而控制用戶對類的修改及 訪問的權限。

      實現步驟:

      I. 私有屬性:private修飾屬性名稱。

      II. 訪問方法:public修飾setXXX()、getXXX()方法。

      訪問形式:

      I. 封裝前:

      1). 賦值:s1.age = 30000;

      2). 取值:s1.age

      II. 封裝后:

      1). 賦值:s1.setAge(30000);

      2). 取值:s1.getAge();

      二、繼承:

      概念:類與類滿足is a的關系,子類(派生類)是一種父類(超類、 基類)。

      父類的抽象:

      I. 父類:在一組相同或類似的類中,抽取共性的特征和行為。

      II. 功能越精細、重合點越多,越貼近直接父類。

      III. 功能越粗略、重合點越少,越貼近Object類。

      IV. 將多個子類中共性的特征和行為,定義在父類中實現重用。

      繼承語法:子類 extends 父類{}

      產生繼承關系后,子類可以使用父類中所聲明的屬性和方法,也可定 義子類獨有的屬性和方法。

      Java為單繼承:一個類只能有一個直接父類,但可以多級繼承。

      不可繼承:

      I. private修飾的私有屬性和方法。

      II. 構造方法。

      III. 非同包時,由default修飾的屬性和方法。

      訪問修飾符(訪問可見性):

      本類 同包 非同包 子類 其他

      private yes

      default yes yes

      protected yes yes yes

      public yes yes yes yes

      注意:default:管理的范圍是包(package),只要在同一個包中即可 訪問。

      方法覆蓋(Override 重寫):

      I. 當父類提供的方法無法滿足子類需求時,可在子類中聲明和父類完 全相同的方法進行覆蓋。

      II. 子類覆蓋父類方法后,在實際調用中,優先調用子類覆蓋后的方法。

      III. 子類覆蓋父類方法時,訪問修飾符必須與父類相同或比父類更寬 泛。

      super關鍵字:

      I. 在子類中,可以通過super.訪問父類中所定義的屬性和方法。

      II. super()或super(實參)在子類構造方法中,顯示調用父類構造方法, 但必須是構造方法的首行。

      III. 子類構造方法中如沒有顯示調用父類構造方法,則編譯器默認提供 super(),調用父類無參構造方法。

      繼承關系的初始化:構造子類對象時,先構建父類對象

      I. 分配空間。

      II. 初始化父類屬性

      III. 執行完畢父類構造方法

      IV. 初始化子類屬性

      V. 執行完畢子類構造方法

      Java基礎知識點總結

      三、多態:

      概念:父類引用指向子類對象,從而產生多種形態。

      語法:父類類型 引用名稱 = new 子類類型();

      注:僅可調用父類中所聲明的屬性和方法、而不可調用子類獨有的屬 性和方法。

      應用方式(1.繼承、2.覆蓋):

      I. 使用父類作為方法形參,實現多態。(可以讓一個方法的參數類型 的個數更寬泛)

      II. 使用父類作為方法返回值,實現多態。(返回值可以是任意子類類 型)

      作用:

      I. 屏蔽子類間的差異。

      II. 靈活、耦合度低。

      對象間的類型轉換:

      I. 父類引用中保存子類的真實實例,稱為向上轉型(裝箱)。

      例如:Animal a = new Dog(); Vehicle veh = new Bus();

      II. 將父類引用中的真實子類實例,強制轉換回其本身類型,稱為向下 轉型(拆箱)

      例如:Dog dog = (Dog)a; Bus bus = (Bus)veh;

      III. 向下轉型時,如子類真實類型與目標類型不匹配,則發生類型轉換 異常(ClassCastException)

      instanceof關鍵字:

      I. 語法:父類引用 instanceof 子類類型

      II. 語義:布爾表達式判斷引用中的對象是否與子類類型匹配

      三個修飾符

      一、static(靜態):

      概念:

      I. static修飾符表示類成員、全類所有對象共享的成員。

      II. 不必創建對象,可直接通過類名調用。

      靜態屬性、靜態方法(類屬性、類方法):

      I. 全類共享(不屬于某一個對象)。

      II. 訪問方式:類名.靜態成員名稱。

      //Math.random()、Math.sqrt()、System.out、Arrays.copyOf()、 Arrays.sort()、System.arraycopy()

      III. 所有引用調用的靜態屬性和方法都會自動轉換成類名調用。

      靜態方法可以繼承,沒有多態。

      靜態方法不能直接訪問非靜態的成員:

      I. 原因1:當訪問靜態方法時,可能還沒有對象的產生。

      II. 原因2:實例屬性和方法都默認擁有this前綴,代表當前實例,然 而靜態方法不屬于某個實例。

      靜態代碼塊:

      I. 類加載時被執行一次,不能手動調用。

      II. 類加載(ClassLoading):

      1). JVM首次使用(new對象、調用靜態成員、使用子類時、 Class.forName(“全限定名”);)某個類時,通過CLASSPATH查找該 類的.class文件。

      2). 將.class文件中所有的描述信息(屬性、方法、構造方法)加載 到內存中,進行保存。

      3). 優先加載,可為靜態屬性賦值,或任何程序必要的初始行為。

      類加載以及創建對象的十步操作:

      I. 類級別:

      1). 父類靜態屬性

      2). 父類靜態代碼塊

      3). 子類靜態屬性

      4). 子類靜態代碼塊

      II. 對象級別:

      5). 父類實例屬性

      6). 父類動態代碼塊

      7). 父類構造方法

      8). 子類實例屬性

      9). 子類動態代碼塊

      10).子類構造方法

      二、abstract(抽象):

      修飾類:不能new對象(往往父類是不該被創建成對象的)。

      修飾方法:只有方法聲明,沒有方法實現的(必須包含在一個抽象類 中)

      注意:

      I. 抽象類中不一定有抽象方法,有抽象方法的類一定是抽象類。

      II. 子類繼承抽象類后,必須實現父類中所有的抽象方法,否則子類還 是抽象類。

      三、final(最終):

      修飾類:此類不能被繼承。(String、Math、System)

      修飾方法:此方法不能被覆蓋。

      修飾變量:此變量的值不可改變(常量)。

      I. 沒有初始值,必須手動賦值。

      II. 實例常量:顯示初始化、動態代碼塊、構造方法(創建對象完成前)

      III. 靜態常量:顯示初始化、靜態代碼塊(類加載完成前)

      IV. 常用public static final聯合修飾的變量,稱為公開靜態常量。

      V. 基本數據類型:值不可變;引用數據類型:地址不可變。

      接口

      一、概念:相當于特殊的抽象類,接口是一種能力,接口是一種約定。(抽象類的抽象)

      二、語法:

      定義接口:interface 接口名稱{}

      實現接口:implements 接口名稱{}

      三、與抽象類的異同:

      I. 相同:

      1). 不能new對象。

      2). 都可以編譯成字節碼文件。

      3). 都可以作為引用類型。

      II. 不同:

      1). 所有屬性都是公開靜態常量,隱式使用public static final修飾。

      2). 接口中所有方法都是公開抽象方法,隱式使用public abstract修飾

      3). 沒有構造方法、沒有動態、靜態代碼塊。

      四、關系:

      類與類:單繼承

      類與接口:多實現

      接口與接口:多繼承

      注意:一個類在繼承父類的同時,還可以實現多個接口。

      五、規范:

      任何類在實現接口的同時,必須實現接口中所有的抽象方法,否則該 類還是抽象類。

      實現接口中的抽象方法,訪問修飾符必須是public。

      六、應用場景:Java為單繼承,當父類提供的方法個數無法滿足子類需求時, 可以通過實現接口來擴充子類的能力。

      七、接口引用:

      接口引用指向實現類對象,僅可調用接口中所聲明的方法。

      使用接口作為方法形參,可更自然的使用多態。

      八、接口回調:先有接口的使用者,后有接口的實現者。

      九、好處:

      設計與實現完全分離。

      更容易搭建程序框架。

      更容易更換實現。

      程序的耦合降低。

      常用類

      一、內部類:

      概念:

      I. 在類的內部再定義一個類。

      II. 內部類編譯之后會生成字節碼文件。

      III. 內部類可以訪問外部類的私有成員、而不破壞封裝。

      分類:

      I. 成員內部類【了解】:

      1). 是外部類的一個部分,創建內部類對象時,必須依賴外部類對 象。

      2). 可直接訪問外部類的私有成員。

      3). 通過“外部類類名.this”訪問外部類的成員變量。

      4). 語法:

      a. 創建:

      Outer out = new Outer();

      Outer.Inner in = out.new Inner();

      b. 訪問:

      Outer.this.field //訪問外部類的成員變量

      II. 靜態內部類【了解】:

      1). 不依賴外部類對象,可直接創建內部類對象,或通過類名訪問 內部類的靜態成員。

      2). 只能訪問外部類的靜態成員。

      3). 語法:

      a. 創建:

      Outer.Inner in = new Outer.Inner();

      b. 訪問:

      Outer.field //直接訪問外部類靜態成員

      III. 局部內部類【重要】:

      1). 當訪問外部類的局部變量時,因無法保證二者的生命周期一致, 所以必須為局部變量增加final修飾符。

      2). 作用范圍和創建對象的范圍僅在方法內部,隱藏類的信息。

      IV. 匿名內部類【重要】:

      1). 沒有類名的局部內部類。

      2). 必須繼承一個父類或者實現一個接口。

      3). 定義類、實現類、創建對象三步的語法合并。

      4). 生命周期內只能創建一個對象。

      API(Application Programming Interface)應用程序編程接口,幫助文檔。

      二、Object類:

      概念:

      I. 超類、基類、所有類直接或間接的父類,位于繼承樹的頂層。

      II. 任何類,如沒有書寫extends顯示繼承,則默認直接繼承Object。

      III. Object所定義的方法,是所有對象有具有的方法。

      IV. Object類型可以存儲任何對象,作為參數、可接收任何對象;作為 返回值,可返回任何對象。

      方法:

      I. public final Class getClass() //返回對象的運行時類型(真實類型)

      比較兩個對象的真實類型是否一致 a1.getClass() == a2.getClass()

      II. public int hashCode() //根據對象的物理地址、字符串、整數部分進 行計算,最終得到一個int類型的結果。哈希碼并不唯一,它是一 種算法,盡量保證不同對象返回不同哈希碼。

      III. public String toString() //返回該對象的字符串表示。

      可根據自己的業務需求,選擇性覆蓋父類中的toString()。

      IV. public boolean equals(Object obj) //比較兩個對象是否相同

      Object實現策略為“==”比較地址。

      如需判斷地址不同,內容相同的兩個對象,則需要自行覆蓋。

      V. protected void finalize() :

      I. 垃圾回收:銷毀垃圾對象,釋放存儲空間。

      II. 垃圾對象:沒有任何引用指向對象,為垃圾對象。

      III. 垃圾收集器(Garbage Collect):

      自動:JVM內存耗盡,自動回收。

      手動:System.gc(),通知JVM執行回收(優先級較低)。

      三、包裝類:

      概念:

      I. 8種基本數據所對應的引用數據類型。

      II. Object可統一所有數據,默認值為null。

      匹配:

      byte —> Byte

      short —> Short

      int —> Integer

      long —> Long

      float —> Float

      double —> Double

      char —> Character

      boolean —> Boolean

      類型轉換:

      I. Number父類中繼承到的6個轉型方法。

      II. 構造方法。

      III. parseXXX(String s) //靜態方法,將字符串轉換成基本類型

      IV. valueOf() //靜態方法,將基本或字符串轉換成包裝類型

      V. 注意兼容類型,避免NumberFormatException異常。

      VI.JDK5之后,自動裝箱、拆箱。包裝類型與基本類型可自動轉換。

      四、String:

      概念:

      I. 字符串是常量,創建之后不可改變。

      II. 字符串字面值存儲在字符串池中,可以共享。

      創建:

      String s1 = “abc”;

      String s2 = new String(“abc”);

      方法:

      public char charAt(int index) //返回index所對應的字符

      public String concat(String str)

      public boolean contains(CharSequence s) // CharSequence就是字符串 String

      public boolean endsWith(String suffix)

      public boolean startsWith(String suffix)

      public int indexOf(String str)

      public int lastIndexOf(String str)

      public String replace(char oldChar,char newChar)

      public String[] split(String regex)

      public String substring(int beginIndex)

      public String toLowerCase() //將字符串轉換成大寫

      public String toUpperCase()

      public String trim()

      可變字符串:

      I. StringBuffer:JDK1.0推出,操作速度慢、線程安全。

      II. StringBuilder:JDK5推出,操作速度快、線程不安全。

      III. 常用方法:append(?); //追加

      集合框架

      一、概念:

      對象的容器,存儲對象的對象,大多數情況下,可代替數組。

      位置:java.util.*;

      結構:

      二、Collection體系集合詳解:

      Collection父接口:

      I. 特點:存儲所有Object數據。

      II. 方法:

      boolean add(Object o) //向集合中添加一個對象

      void clear() //清空集合中的對象

      boolean contains(Object o) //檢查集合中是否包含o對象

      boolean remove(Object o) //將o對象從集合中移除

      int size() //返回集合中元素的個數

      Object[] toArray() //將集合轉換成Object數組。

      List子接口:for、forEach、Iterator

      I. 特點:有序、有下標、元素可以重復。

      II. 方法:

      void add(int index, E element) //在指定位置插入元素

      E get(int index) //返回指定位置的元素

      E remove(int index) //通過下標移除元素

      E set(int index, E element) //在指定位置替換元素

      List subList(int fromIndex,int toIndex) //返回fromIndex與toIndex 之間的元素

      III. 實現類:

      1). ArrayList【重點】:

      a. 數組結構存儲。

      b. JDK 1.2推出 操作速度快,線程不安全。

      c. 查詢快、增刪慢。

      2). Vector【了解】:

      a. 數組結構存儲。

      b. JDK 1.0推出 操作速度慢,線程安全。

      3). LinkedList【了解】:

      a. 鏈表結構存儲。

      b. 查詢慢、增刪快。

      c. 實現棧Stack,Last In First Out(LIFO)后進先出

      d. 實現隊列Queue,Last In Last Out(LILO)后進后出->先進先出

      三、泛型集合【重點】:

      參數化類型、類型安全的集合,限制元素的類型必須一致。

      編譯期即可檢查數據類型。

      訪問時,不必拆箱。

      不同泛型之間不可相互賦值,泛型不存在多態。

      E = Element / K = Key / V = Value / U = Utility Unit / R = Result / T = Type

      四、Collections工具類:

      public static void sort(List list) //升序排序

      public static void reverse(List list) //倒置

      public static void shuffle(List list) //亂序、洗牌

      五、Set子接口:forEach、Iterator

      特點:無序、無下標、元素不可重復。

      方法:全部繼承自Collection。

      實現類:

      I. HashSet【重點】:

      1). 將自定義類對象存入HashSet時,無法保證元素內容不重復。

      2). 覆蓋equals方法,保證內容相同的對象,比較結果為true。

      3). 為觸發equals的調用,必須覆蓋hashCode方法:

      a. 確保相同對象返回相同哈希碼。

      b. 盡量保證不同對象返回不同哈希碼。

      II. LinkedHashSet【了解】:保留元素的插入順序。

      III. TreeSet【了解】:

      1). 實現了SortedSet接口,對集合元素自動排序。

      2). 元素對象的類型必須實現Comparable接口中的compareTo方法, 指定排序的規則。

      3). 希望this靠前,則返回負數;希望this靠后,則返回正數;返回 則代表相等。

      4). TreeSet通過compareTo方法的結果進行排序,如果結果為“零”, 則可以指定次要排序列。

      4. 迭代方式:

      I. Iterator迭代器:

      1). 獲取當前集合的專屬迭代器。

      Iterator it = set.iterator();

      2). 循環判斷是否存在下一個元素,并獲取下一個元素。

      while(it.hasNext()){//判斷

      it.next();//獲取

      }

      II. forEach遍歷:

      for(數據類型 局部變量名 : 容器){

      //將容器中的每個對象臨時保存在局部變量中

      //循環體內容完成對當前對象的操作

      }

      六、Map接口:

      特點:存儲一對數據(key-value),無序、無下標,鍵不能重復、值 可以重復。通過建訪問值(通過key訪問value)。

      方法:

      V put(K key, V value) //將關聯的鍵和值一并存儲

      V get(Object key) //通過建訪問值

      V remove(Object key) //通過鍵移除整個鍵值對

      Set keySet() //獲取所有的鍵

      Collection values() //獲取所有的值

      Set entrySet() //獲取所有的鍵加值(格式為:“key=value”)

      實現類:

      I. HashMap【重點】:

      1). 允許使用null作為key或value,重復鍵會覆蓋原有鍵值對。

      2). JDK 1.2推出 操作速度快、線程不安全。

      II. Hashtable【了解】:

      1). 不允許使用null作為key或value。

      2). JDK 1.0推出 操作速度慢、線程安全。

      III. TreeMap【了解】:

      1). 實現SortedMap接口,自動對key排序。

      2). 作為key的對象,必須實現Comparable接口。

      IV. Properties【了解】:

      1). Hashtable的子類,存取時的參數必須是String類型。

      2). 可以直接在流(IO)中加載內容。

      異常

      一、概念:程序在運行中發生的特殊情況。

      二、異常分類:

      Throwable:

      |- Error:錯誤,硬件、JVM、執行邏輯錯誤,不能手動處理。

      |- Exception:異常,程序在運行或配置中產生的問題,可處理。

      |- RuntimeException:運行時異常,編譯期不檢查,可處理可不處理

      |- CheckedException:受查異常,編譯期檢查,必須處理。

      三、異常的產生:

      自動拋出:程序在運行時遇到不符合規范的代碼或結果,則產生異常。

      手動拋出:throw 異常對象;

      異常產生的結果:相當于遇到了return語句,導致程序因異常而中止。

      四、異常的傳遞:按照方法的調用鏈進行反向傳遞m3->m2->m1->main->JVM

      五、異常的處理:

      作用:發生異常時,為提高代碼的容錯性,避免程序中止,執行預判 的處理代碼。從而盡量減少程序因異常帶來的損失。

      方式:

      I. 消極處理:throws 聲明異常,修飾在方法參數列表的后端。

      public void method() throws Exception{}

      注:

      顯示告知調用者,此方法可能出現的異常。

      只有異常的傳遞,而沒有捕獲異常,程序仍舊會因異常而中 止。

      II. 積極處理【重點】:捕獲、處理異常。

      try{

      //可能發生異常的代碼

      }catch(Exception e){ //將捕獲到的異常對象賦值給局部變量e

      e.getMessage(); //獲取異常發生的原因、消息

      e.printStackTrace(); //打印堆棧跟蹤信息

      //異常處理代碼

      }finally{

      //最終:無論是否發生異常,此代碼塊一定會執行。

      //常用于釋放資源。

      }

      III. 常用異常結構:

      1). try{}catch{}

      2). try{}catch{}catch{}…

      3). try{}catch{}finally{}

      4). try{}catch{}catch{}…finally{}

      5). try{}finally{}

      六、自定義異常:

      繼承Exception或Exception的子類,常用RuntimeException。

      繼承受查異常之后,拋出的異常通常不直接處理,以throws聲明異常 的形式,告知調用者處理。

      七、帶有異常聲明的方法覆蓋:

      遵循覆蓋語法。

      子類覆蓋父類帶有異常聲明的方法時,不可拋出比父類更寬泛的異常。

      子類可以聲明的異常必須 <= 父類聲明的異常

      I/O框架

      一、流:(Input / Output)

      概念:流(對象)是在內存與存儲設備之間傳輸數據的通道。

      分類:

      I. 方向:

      1). 輸出流:用以將<內存>中的數據寫入到<存儲設備>中。

      2). 輸入流:用以將<存儲設備>中的數據讀入到<內存>中。

      II. 單位:

      1). 字節流:可以讀寫所有數據。

      2). 字符流:只能讀寫文本數據。

      III. 功能:

      1). 節點流:實際傳輸數據。

      2). 過濾流:增強節點流功能(處理流、裝飾類)。

      二、字節流:

      字節流父類:

      I. OutputStream(輸出流)

      II. InputStream(輸入流)

      字節節點流【重點】:

      I. FileOutputStream:

      public void wirte(int b) //一次寫一個字節

      public void write(byte[] b) //一次寫多個字節(b.length個)

      II. FileInputStream:

      public int read() //一次讀一個字節

      public int read(byte[] b) //一次讀多個字節(最多b.length個)

      字節過濾流:

      I. DataOutputStream / DataInputStream:

      1). 直接讀寫8種基本數據類型。

      2). 直接讀寫String。(writeUTF()、readUTF())

      II. BufferedOutputStream:

      1). 緩沖流,提高IO效率,減少訪問硬盤的次數。

      2). 數據存儲到緩沖區,關閉前,需使用flush或close一次性寫入 到文件中,并清空緩沖。

      III. ObjectOutputStream / ObjectInputStream【重點】:

      1). 讀寫對象(序列化、反序列化),要求對象必須實現 java.io.Serializable接口,以啟動序列化功能。

      2). 序列化對象時,必須保證其所有屬性均可序列化。

      3). transient修飾為臨時屬性,不參與序列化。

      4). java.io.EOFException表示到達文件末尾,可處理。

      三、字符編碼:

      ISO-8859-1 除收錄ASCII外,還包括西歐、希臘、泰國、阿拉伯、 希伯來對應的文字符號。

      UTF-8 針對Unicode的可變長字符編碼。

      GB2312 簡體中文。陶喆(陶吉吉)

      GBK 簡體中文擴充版。

      BIG5 臺灣繁體中文。

      注意:字符編碼和字符解碼不一致時,可能造成亂碼。

      四、字符流:

      字符流父類:

      I. Wrietr(輸出流)

      II. Reader(輸入流)

      字符節點流【重點】:

      I. FileWriter:

      public void write(String str) //一次寫一個字符串

      II. FileReader:

      public int read() //一次讀一個字符

      public int read(char[] c) //一次讀一組字符

      字符過濾流:

      I. PrintWriter / BufferedReader:緩沖流,支持一次寫一行、讀一行。

      II. OutputStreamWriter / InputStreamReader:

      橋轉換流:用以將字節流轉換成字符串,并設置編碼格式。

      使用步驟:

      I. 創建節點流。

      II. [ 包裝過濾流 ]。

      III. 讀寫數據。

      IV. 關閉流。

      五、File對象:

      概念:File代表物理盤符下的一個文件或者文件夾。

      方法:參考API。

      I. public Files[] listFiles();//獲取當前路徑下的所有File對象。

      II. public Files[] listFiles(FileFilter filter); //文件過濾器

      FileFilter接口:

      實現:boolean accept(File file) //使滿足條件的文件對象,出現在listFile() 方法的返回值中(File數組)。

      多線程

      一、進程:

      概念:

      I. 程序是靜止的概念,而進程是程序的實體,在CPU執行時,才被 賦予生命,只有當程序真正的running時,被稱為進程。

      II. 在任何時間點、時間戳,只能有一個進程在執行,宏觀并行、微觀 串行。

      二、線程:

      概念:

      I. 輕量級進程(Light Weight Process LWP),代表進程中一個單一的 順序控制流程。

      II. CPU調用的基本單位是線程(調用某一進程中的某一線程)。

      III. 在單個進程中“同時”運行多個線程完成不同的工作,交替執行, 稱為多線程。

      組成:

      I. CPU:操作系統分配時間片(Windows:520ms、Linux:5800ms)。

      II. 數據:堆空間共享(對象),棧空間獨立(變量)。

      III. 代碼:

      1). 繼承Thread類:

      a. 覆蓋run方法。

      b. 創建子類對象: Thread t1 = new MyExtendsThread();

      c. 啟動線程: t1.start();

      2). 實現Runnable接口:

      a. 覆蓋run方法。

      b. 創建子類對象: Runnable r = new MyImplRunnable();

      c. 創建線程對象: Thread t2 = new Thread?;

      d. 啟動線程: t2.start();

      3). 常用方法:(造成阻塞)

      public static void sleep(long millis) //當前線程休眠

      public static void yield() //放棄、讓出時間片

      public final void join() //將其他線程加入到自身線程中,優先執行

      三、線程同步【重點】:

      線程不安全:當多線程并發訪問臨界資源時,如果破壞原子操作,可 能造成數據不一致。

      I. 臨界資源:共享資源(同一對象)。

      II. 原子操作:不可分割的多個步驟,被視為一個整體,其順序不可打 亂或缺省。

      互斥鎖標記:每個對象都有一個互斥鎖標記,用來分配給線程的。

      鎖池:每個對象都有一個鎖池,用來存儲等待該對象鎖標記的線程的

      同步方式【重點】:

      1). 同步代碼塊:

      synchronized(臨界資源){ //可為臨界資源加鎖

      //原子操作

      }

      2). 同步方法:

      synchronized 返回值類型 方法名稱(形參列表){

      //原子操作

      }

      注:在調用同步方法時,需要對象的鎖標記,而調用非同步方法時, 不需要鎖標記,可直接訪問。

      ArrayList操作速度快,線程不安全(支持并發訪問,非同步方法)

      Vector 操作速度慢,線程安全(同步方法)

      synchronized add()

      remove()

      死鎖、生產者消費者、哲學家進餐

      反射

      一、概念:

      類的對象:基于某個類new出來的一個實例,也稱為實例對象。new Dog

      類對象:封裝了一個類的所有信息(包名、類名、父類、接口、屬性、 方法、構造方法…)。Student.class

      注意:類對象就是一個.class文件,當中包含了一個類的所有信息!

      獲取類對象:

      //1.通過類型直接獲取類對象

      Class c1 = Student.class;//類對象

      //2.以靜態方法的形式獲取類對象

      Class c2 = Class.forName(“ref.Student”);

      //3.通過類的實例對象獲取類對象

      Student stu = new Student();

      Class c3 = stu.getClass();

      反射的應用:

      //1.獲取父類Class對象

      Class superClass = c.getSuperclass();

      //2.獲取所有接口的Class對象

      Class[] interfaces = c.getInterfaces();

      //3. 獲取所有公開的屬性(包括父類屬性)

      Field[] fields = c1.getFields();

      //4. 獲取所有自身聲明的屬性(包括私有)

      Field[] fields = c1.getDeclaredFields();

      //5. 獲取所有公開的方法(包括父類方法)

      Method[] methods = c1.getMethods();

      //6. 獲取所有自身聲明的方法(包括私有)

      Method[] methods = c1.getDeclaredMethods();

      //7.通過類對象創建實例對象

      public Object newInstance()

      //8.獲取單個公開方法(包括父類)

      Method pm = c.getMethod(“方法名稱”,“可邊長形參類型”);

      //9.獲取單個自身方法(包括私有)

      Method sm = c.getDeclaredMethod(“方法名稱”,“可邊長形參類型”);

      //8. 執行Method對象:

      method.invoke(“此方法隸屬于的對象”,“可變長實參”);

      四、單例模式:

      概念:一個類,只能有一個對象。

      實現方式:

      I. 餓漢式(類加載時創建,天生線程安全)

      II. 懶漢式(使用時創建,線程不安全,需添加同步)

      `

      Java 數據結構

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:2007excel表格如何設置橫杠(Excel表格怎么輸入橫杠)
      下一篇:WPS手機移動版Android Excel測量計算程序附GIF動畫(wpS手機版)
      相關文章
      色拍自拍亚洲综合图区| 亚洲一区二区精品视频| 伊人久久大香线蕉亚洲 | 亚洲a∨国产av综合av下载| 亚洲成人高清在线观看| 精品亚洲成AV人在线观看| 亚洲国产成人久久精品影视| 亚洲国产精品无码久久久不卡 | 亚洲人成色7777在线观看不卡| 久久久亚洲精华液精华液精华液| 亚洲色无码国产精品网站可下载| 最新国产成人亚洲精品影院| 国产成人精品日本亚洲专区6| 亚洲欧洲日韩极速播放 | 国产亚洲成av片在线观看| 亚洲性猛交XXXX| 国产日韩亚洲大尺度高清| 久久精品国产精品亚洲| 国产亚洲大尺度无码无码专线| 亚洲中文字幕无码爆乳av中文| 久久亚洲AV无码西西人体| 国产亚洲色婷婷久久99精品| 亚洲AV无码久久精品成人| 亚洲综合国产精品| 亚洲制服丝袜精品久久| 亚洲中文字幕AV在天堂| 亚洲精品无码专区在线播放| 激情无码亚洲一区二区三区 | 自拍偷自拍亚洲精品偷一| 亚洲 无码 在线 专区| 亚洲日韩人妻第一页| 亚洲性猛交XXXX| 久久亚洲精品国产精品| 亚洲人成网站18禁止久久影院| 中文字幕乱码亚洲精品一区| 国产精品亚洲精品久久精品| 国产亚洲精久久久久久无码AV| 亚洲AV无码一区二区乱孑伦AS| 亚洲综合激情另类小说区| 亚洲一区中文字幕在线观看| 亚洲精品乱码久久久久久蜜桃图片|