Java核心基礎
資料型別
分為兩大類:基本資料型別、引用資料型別
基本資料型別:
資料型別 | 特點 |
---|---|
byte | 8位 -128~127 |
short | 16位 -32768~32767 |
int | 32位 -2147483648~2147483647 |
long | 64位 -263~263-1 |
float | 32位 具體見IEEE 754標準 |
double | 64位 具體見IEEE 754標準 |
boolean | 1位 true/false |
char | 16位 0~65535 |
引用資料型別:
類、介面、陣列……
資料型別轉換:
(1)自動型別轉換
byte→short(char)→int→long→float→double
(2)強制型別轉換
int a=123;
byte b=(byte) a;
常量和變數
常量定義:
private static final double pi= 3.14;
轉義字元 | 含義 |
---|---|
\ddd | 1~3位八進位制所表示的字元 |
\uxxxx | 1~4位十六進位制數所表示的字元 |
\’ | 單引號字元 |
\" | 雙引號字元 |
\\ | 反斜線字元 |
\r | 回車 |
\n | 換行 |
\b | 退格 |
\t | 製表符 |
變數:
分為成員變數和區域性變數
成員變數:包括例項變數和類變數,用static修飾的是類變數,不用static修飾的是例項變數,所有類的成員變數可以通過this來引用.
(1)定義在方法外
(2)整個類中都可以使用
(3)有預設初始值,int預設為0,float預設為0.0f,double預設為0.0
(5)隨著物件的建立而建立,隨著物件的消失而消失(例項變數)隨著類的裝載而建立,隨著類的解除安裝而消失(類變數)
區域性變數:1.方法引數(形參)2.方法區域性變數(方法內定義)3.程式碼塊區域性變數(程式碼塊中定義)
(1)定義在方法內部
(2)只適用於方法中
(3)沒有預設初始值,需要手動賦值才能使用
(4)位於棧記憶體
(5)在呼叫對應方法時,區域性變數因為執行建立語句而存在,超出自己的作用域則立即消失
運算子和表示式
算術運算子:+,-,*,/,%,++,- -
關係運算符:==,!=,>,<,>=,<=
邏輯運算子:&&,||,!
位運算子:<<=,>>=,&=,^=,|=
流程控制語句
switch語句:
(1)變數型別可以是byte,short,int,char
(2)每個case後面要跟上比較的值和冒號
(3)當變數和case中的值相同時,case後的語句開始執行,直到break
(4)如果沒有break,程式會繼續執行下一條case,直到出現break
(5)可以包含default分支,它必須是最後一個分支,不需要break
面向物件的三大特性
1.封裝
將物件的屬性和行為進行包裝,不需要讓外界知道具體實現的細節,只能通過定義的介面進行訪問。
優點:減少耦合;可以自由修改內部結構;可以精確控制成員變數;隱藏資訊,實現細節。
2.繼承
通過繼承,可以更有效率地對原有類的功能進行擴充套件。增強程式碼複用性,提高開發效率,為程式修改、補充提供便利。
Java中繼承要使用extends關鍵字,只允許單繼承。子類只能繼承父類中可以訪問的屬性和方法。
(1)能繼承父類public和protected的成員變數和方法,不能繼承父類private的成員變數和方法
(2)對於父類的包訪問許可權成員變數和方法(default),如果子類和父類再同一個包下,則可以繼承,否則不能
(3)如果子類的成員變數(方法)覆蓋了父類的,則需要呼叫super關鍵字來引用
3.多型
多型是同一個行為具有多個不同表現形式或形態的能力。
可以把子類看成父類的物件,因此父類可以是很多種型別。
特性:物件例項確定則不可改變;只能呼叫編譯時的型別所定義的方法;執行時會根據執行時的型別去呼叫相應型別中定義的方法。
類和物件
類是一個模板,描述一類物件的行為和狀態。
物件是類的一個例項,有狀態和行為。
1.類
類的宣告:
public class sd {
}
類的方法定義:
public int f(int k){
return k*k;
}
2.物件
物件的建立:
sd n=new sd();
構造方法:
(1)名稱與類的名稱完全相同
(2)不返回任何型別,不需要用void修飾
(3)作用是建立一個物件並初始化成員變數
(4)建立物件時,系統會自動呼叫構造方法
(5)一般用public修飾
(6)如果不定義構造方法,系統將提供一個預設的不帶引數的方法體為空的構造方法
(7)構造方法可以過載,但是不能被繼承
(8)不能被static,final,synchronized,abstract,native修飾
抽象類和抽象方法
1.使用原則
(1)必須是public或者protected
(2)不能直接例項化
(3)必須有子類
(4)子類如果不是抽象類,則必須重寫全部抽象方法
(5)不能用final修飾,因為final不能有子類
(6)抽象類中不一定含有抽象方法,有抽象方法的類一定是抽象類
(7)抽象方法不能含有方法體
(8)構造方法,類方法不能是抽象方法
2.抽象方法的宣告
abstract int f(int k);
抽象類可以繼承實體類,前提是實體類必須要有明確的建構函式。
抽象類可以實現介面。
介面
1.介面的宣告
public interface inter1 extends inter2,inter3{
}
2.介面的實現
public class sd implements inter1{
}
3.介面和抽象類的異同
相同點:
(1)都可以被繼承
(2)都不能被直接例項化
(3)都可以包含抽象方法
(4)派生類必須實現未實現的方法
不同點:
(1)介面支援多繼承,抽象類只能單繼承
(2)一個類只能繼承一個抽象類,卻可以實現多個介面
(3)介面中的成員變數只能是public、static、final型別的;抽象類中的成員變數可以是各種型別的
(4)介面只能定義抽象方法;抽象類都能定義
(5)介面中不能含有靜態程式碼塊和靜態方法;抽象類中可以有
其他一些問題
Java中的訪問修飾符:
(1)public:可以跨類、跨包訪問
(2)private:只能被該類本身訪問
(3)protected:只能被本類及其子類訪問
(4)default:只能在同一個包中進行訪問
方法過載和方法覆蓋:
過載:定義在同一個類中,方法名相同,引數個數、順序、型別不同
目的:解決引數個數、型別、順序不一致,但方法名一致的重新命名問題
特點:
(1)發生在同一個類中
(2)方法名稱相同
(3)引數個數、順序、型別不同
(4)和返回值型別、訪問修飾符、異常宣告沒有關係
(5)是多型的一種表現形式
覆蓋:改寫父類繼承到子類的方法
目的:父類的功能實現無法滿足需求,需要重寫
特點:
(1)發生在具有父子關係的兩個類中
(2)方法名稱相同
(3)引數列表完全相同
(4)返回值型別必須相同
(5)訪問修飾符不能嚴於父類
(6)覆蓋是多型的必要條件
(7)丟擲的異常不能比父類的異常大
(8)private的方法不能被覆蓋
(9)構造方法不能被覆蓋
值傳遞和引用傳遞:
值傳遞:將引數遞給函式時,函式只接受一份副本。
引用傳遞:函式接收原始值的記憶體地址,修改該引數的值會使原始值進行改變。
Java中只有值傳遞引數。
由於Java中沒有指標,所以沒有引用傳遞引數。
Java用引用傳遞物件不意味著用引用傳遞引數。引數可以是物件引用。
類的反射:
(1)得到一個物件所屬的類
(2)獲取一個類所有的變數和方法
(3)在執行時建立物件
(4)在執行時呼叫物件的方法
獲取Class類的三種方法:
Class class1 = Class.forName("User");
Class class2=User.class;
User user=new User();
Class class3=user.getClass();
獲取物件例項:
//構造方法沒有引數
User user1=(User)class1.newInstance();
//構造方法有引數
Constructor constructor=class2.getConstructor(String.class,Integer.class);
User user2=(User)constructor.newInstance("a",1);
Java建立物件方式:
(1)new語句
(2)反射機制的Class類的newInstance()方法
(3)通過clone()方法
(4)反序列化