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 **: 根據雜湊函式計算出物件的位置。
雜湊表的容量不是固定的,可以擴充。
每天學習一點點,每天進步一點點。