1. 程式人生 > 實用技巧 >Java 語言基礎知識

Java 語言基礎知識

1、java 發展歷程

1998年,Sun 公司釋出 jdk1.2 ,該版本將 java 分為 J2SE、J2EE、J2ME 三類。

2014年,Sun公司釋出 jdk1.8

2、一次編譯,各處執行

先編譯成 .class檔案,再解釋執行。

3、基本資料型別與表示式

文字量:文字量直接出現在程式中並被編譯器直接使用,如 30.

識別符號:識別符號是一個名稱,以字母或下劃線或美元符號開頭。

變數:一個由識別符號表示的項,變數的值可以被改變。

內建資料型別

  • byte

  • short

  • int

  • long

  • float

  • double

  • boolean : 表示一個邏輯量,僅有兩個取值:true或false

字元型

字串:java的基本資料型別沒有字串型別,在java 中使用 String 類來定義字串。如 String s = "hello".

運算子:算術運算子、賦值運算子、關係運算符、邏輯運算子、條件運算子(三目運算子)。

型別轉換

  • 擴充套件轉換:從低位向高位轉換

  • 窄化轉換:從高位向低位轉換

  • 隱含轉換:有賦值轉換、方法呼叫轉換、字串轉換三種

  • 顯式轉換:強制型別轉換

4、陣列

陣列的概念:由同一型別的物件或資料構成,並封裝在同一識別符號下。

在 Java 中陣列是物件,需要動態初始化。,可以賦值給 Object 型別的變數,陣列中的變數稱為陣列元素

陣列的建立與使用

陣列引用的宣告:如int[] name 或 int name[] ,兩者是等效的。

陣列的建立:

用關鍵字 new 構成陣列的建立方式。

建立例項:

int[] ai;
ai = new int[10];

陣列初始化:

int[] a = {1,2,3,4,5};

使用陣列:使用 arrayName[index],可以通過 arrayName.length() 獲得陣列長度。

陣列名只是一個引用

複製陣列元素使用 System.arrayCopy() 方法

多維陣列

定義二維陣列的方式如下:

1、int[][] myArray;

2、int[][] myArray = new int[3][5]

3、int[][] myArray = {(1,2,3),(2,3,1,)}

java 裡面二維陣列的長度指的是它的行數

java 裡面的二維陣列就是由一維陣列構成的陣列。

5、演算法的流程控制

if 語句:1、只有 if 語句;2、單個 if-else 結構;3、多個 if-else 結構

簡單的 if-else 語句可以使用條件語句來替換。

switch 語句

for 語句:是 Java 三個迴圈語句中功能最強大的一個,使用最廣泛的一個。

增強 for 迴圈:用來針對陣列或集合物件進行遍歷。

語法格式:

for(Type name: 陣列或集合型別物件){
      //迴圈體;
}

while: 先判斷再迴圈

do-while:先迴圈再判斷

break 語句:跳出迴圈,不再執行剩餘部分。

continue 語句:停止本次迴圈,開始下一次迴圈。

6、類的宣告與物件的建立

類是對一類物件的描述,物件是類的具體例項。

class:表示這是一個類

extends: 繼承的關鍵字

implements: 實現介面的關鍵字

public:公有類

物件引用宣告

7、在類裡面宣告資料成員

資料成員:表示物件的狀態。

如:

public static int a; // 這是一個類變數
public String s;
  • static 指明這是一個類變數(靜態成員變數),在類初始化時就被同時賦值。

  • final 指明這是一個不可被修改的量

例項變數:沒有static修飾的變數,儲存所有例項都需要的屬性。

8、在類中定義方法成員

類中的方法分為:1、類方法;2、例項方法

返回型別

引數型別

方法體

例項方法:用來表示每個物件的功能或行為

例項方法的呼叫格式:

<物件名>.<方法名>(實參列表)

引數傳遞

  • 值傳遞: 引數型別為基本資料型別時

  • 引用傳遞:引數型別為物件或陣列時

類方法(靜態方法)

  • 宣告時需要使用 static 關鍵字修飾

  • 不能被宣告為抽象的

  • 可以類名直接呼叫,也可以使用例項呼叫

可變長引數

使用三個省略號表示,其實質就是陣列

String... s,相當於 String[] s

9、包

包的作用

  • 將相關的原始碼檔案組織在一起

  • 類名的空間管理,用來避免命名衝突的問題。

  • java 中包名使用小寫字母表示

  • 建議使用公司域名的反序作為包名,如com.google

包的宣告: 如,package 包名

包的引入

使用 import 語句引入所需的包, java 編譯器為所有程式自動引入包 java.lang

靜態引入

  • 單一引入:引入某一個指定的靜態成員。

  • 全體引入:引入所有的靜態成員。

10、類的訪問控制權限

private:只能被同一類中訪問

public: 可以被不同包,不同父類的訪問

get方法:獲取屬性變數的值

set方法:修改屬性變數的值

this關鍵字

11、物件初始化

使用構造方法對物件進行初始化。

構造方法

  • 方法名與類名相同

  • 不定義返回型別

  • 通常被定義為 public (公有的)

  • 可以有任意多個引數

  • 主要作用是完成物件的初始化工作

  • 在生成一個物件時,自動呼叫構造方法來對新物件進行初始化

預設構造方法

  • 沒有引數(內部類除外)

  • 物件的屬性值預設為零或空

自定義構造方法與方法過載

  • 在生成一個物件時,給構造方法傳送初始值,為物件進行初始化

  • 構造方法可以被過載:通過引數列表來比對,呼叫不同的構造方法

  • 只要顯式的聲明瞭一個構造方法,就不再使用預設的構造方法。

final變數的初始化

  • 例項變數和類變數都可以被宣告為final

  • final例項變數可以在類中定義時給出初始值。

12、記憶體回收

物件的自動回收

  • 無用物件:離開了作用域的物件,無引用指向的物件

finalize()方法:

  • 在類java.lang.Object中宣告,因此,java的每個類都有這個方法。

  • 用於釋放資源

  • 類可以重寫finalize()方法

  • finalize()方法可能以任何的次序執行

13、應用例項

一個銀行賬戶的例項。

DecimalFormat類:該類位於 java.text 包下,作用是將輸出資料進行格式化。

14、類的繼承的概念和語法

類繼承的概念

  • java 只支援單繼承,每個子類只能有一個超類(父類)

  • 超類是所有子類的共有屬性及方法的集合,子類則是超類的特殊化

  • 繼承可以提高程式碼的可重用性

子類物件:包含著超類的所有屬性和方法,以及子類特有的方法

繼承的語法,如下:

pubilc class Son extends Father{
}

父類中的私有變數被繼承到子類後,是不能被直接訪問的,除非父類中有訪問該私有變數的方法。

15、隱藏和覆蓋

也就是重寫 @override

屬性的隱藏:子類中聲明瞭與超類中相同的成員變數名

  • 從超類中繼承的變數將被隱藏

  • 當子類執行繼承自超類的操作時,處理的是繼承自超類的變數,反之則是處理的是子類的變數。

訪問被隱藏的超類屬性

  • 呼叫從超類繼承的方法,則操作的是從超類繼承的屬性

  • 使用關鍵字 super,來訪問超類中的屬性。

  • 靜態成員不被繼承,不屬於任何一個物件,但可以被所有子類訪問

必須被重寫的方法:派生類必須重寫基類中的抽象方法

****:被 final、static 修飾的方法不能被重寫

16、Object 類

Object 類是其他所有類的直接或間接超類。

Object 類的主要方法

  • getclass() :獲取當前物件所屬的類資訊

  • toString():

...

相等與同一

  • 兩個物件具有相同的型別,及相同的屬性值,則稱兩者相等。

  • 如果兩個引用變數指向同一個物件,則兩個引用同一。

hashCode() 方法: 返回物件的雜湊碼

如果依據 equals()方法兩個物件相等,則兩個物件的雜湊碼應該是相同的。

clone()方法:使用 clone 方法複製物件。

finalize() 方法: 在物件被垃圾回收器回收之前,系統自動呼叫物件的 finalize 方法。

getClass( 方法):返回一個 class 物件,用來代表物件所屬的類。

notify、notifyAll:與執行緒有關的方法

17.介面

介面不規定方法的主體;介面中可以有資料成員,但預設是 static 或 final 型別。

介面的作用

  • 繼承多個設計

  • 建立類與類之間的“協議”

  • 在不同類之間實現常量的共享

介面的語法

public interface 介面名 {
 // 方法的原型或靜態變數
}

介面中的方法,預設是 abstract 或者 final 。

介面不能被例項化,只能被實現。且介面可以被多重繼承。

實現介面

如:

public class 類名稱 implements 介面名1,介面名2{
 // 重寫介面中的方法。
}

介面的擴充套件:介面與介面之間,也可以繼承,有超介面與子介面之分。

如:

interface 子介面 extends 父介面{
 // 
}

18、型別轉換

型別轉換規則

  • 基本型別轉換: 將一個值轉換成另一個值

  • 引用型別轉轉:引用之間的轉換必須有繼承關係或者介面的實現關係,將引用轉換為另一個型別的引用,並不改變物件本身的型別

  • 當一個引用被轉換為超類的引用後,通過它能夠訪問的服務介面只能是超類中有的方法。

隱式型別的轉換

  • 基本型別轉換:自動將低位轉換為高位

  • 引用變數:被轉換成更一般的類,如將子類的引用轉換成超類的引用。或轉換成更一般的介面。

顯式型別的轉換

  • 基本資料型別:高位轉換為低位

  • 引用變數:將超類的引用轉轉為子類的引用。

型別轉換的應用場合

  • 賦值轉換:兩個不同型別進行賦值需要進行轉換

  • 方法呼叫轉換:將實參的型別轉換為形參的型別

  • 算術表示式轉換:將不同型別轉換成相同型別再計算

  • 字串轉換:將其他型別轉換為字串型別

19、多型的概念

不同型別的物件可以響應相同的訊息,響應行為可以不同。

實現同一介面的不同型別的物件,可以被當做同一型別的物件來對待。

繫結

  • 早繫結:在程式執行之前就實現繫結

  • 晚繫結:也稱為動態繫結。

20、輸入/輸出流的概念

預定義的 I/O 流類:

  • 面向字元的流:用於處理字元資料

  • 面向位元組的流:用於一般的目的

面向字元的流: 源和目標是文字檔案,Reader 和 Writer 類是所有字元流的超類。

面向位元組的流: InputStream 和 OutputStream 類是所有位元組流的超類

標準輸入輸出流

按型別輸入輸出資料

  • printf 方法 :System.out.printf()

  • Scanner 方法:

21、寫文字檔案

  • 使用 FileWriter 類寫入資料到文字檔案中。

  • 使用 BufferWriter 類寫入資料到文字檔案。

22、讀文字檔案

  • 使用 FileReader, 檔案讀取流

  • 使用 BufferReader, 緩衝讀取流

23、主要介面與常用的實現類

Set 介面 : SortedSet 類 和 TreeSet 類

List 介面: Vector 類和 ArrayList 類

Queue 介面

Map 介面:HashMap 類和 TreeMap 類

24、常用演算法

排序演算法 sort: 使 List 元素按照某種次序排序。

洗牌演算法 shuffle: 以隨機方式重排 List 元素。

reverse: 反轉演算法

copy: 兩個 List 之間的複製。

binarySearch: 二分法查詢演算法。

min、max:返回指定集合的最小值和最大值。

25、陣列實用方法

Arrays 類:定義了一組有關陣列的方法

  • fill : 給陣列填充

  • equals: 判斷陣列相等

  • sort: 陣列排序

  • binary:使用二分法查詢陣列元素

26、基於動態陣列的集合型別

Voctor, ArrayList:

  • 實現了 Collection 介面

  • 能夠儲存相同型別的物件

  • 不能儲存基本資料型別的資料

  • 其容量可自動擴充

  • 新增元素效率較高

  • Voctor : 是集合框架中的遺留類,執行緒安全

  • ArrayList :非同步的,效率較高。

鼓勵使用ArryList

27、遍歷 Collection

1、通過 Enumeration 及 Iterator 遍歷: 優先選用 Iterator 遍歷集合。

2、使用增強 for 迴圈遍歷

3、通過聚集操作遍歷

28、Map 介面及其實現

Map 介面意義: 用於儲存鍵值對 (key-value)

主要有 HashMap 和 TreeMap 兩個類。

**雜湊表 HashMap **: 根據雜湊函式計算出物件的位置。

雜湊表的容量不是固定的,可以擴充。

每天學習一點點,每天進步一點點。