1. 程式人生 > 實用技巧 >JDBC基礎&&各個介面和類

JDBC基礎&&各個介面和類

面向物件:

類是對現實世界事物的描述,是抽象的、概念上的定義 物件是實際存在的該類事物的一個個體,因而也稱例項

1.java類及類的成員

屬性:

名稱:Field = 屬性 = 成員變數

含義:對應類中的成員變數(描述事物的特徵)

格式:修飾符 型別 屬性名 =初值 ;

屬性(成員變數)VS 區域性變數

相同點:

1.定義變數的格式:資料型別 變數名=變數值

2.先宣告,後使用

3.變數都有其對應的作用域

不同點:

1.在類中宣告位置不同

屬性:直接定義在類中的一對{}內

區域性變數:宣告在方法內、方法形參、程式碼塊內、構造器形參、構造器內部變數

2.關於許可權修飾符的不同

屬性:可以在宣告屬性時,指明其許可權,使用許可權修飾符

常見的許可權修飾符:private、public、預設、protected

區域性變數:不可以使用許可權修飾符

3. 預設初始化值的情況:

屬性:類的屬性,根據其型別都有預設初始化值

整形(byte、short、int、long)=0

浮點型(float、double)=0.0

字元型(char)=0或’\u0000’

布林型(boolean)=false

引用資料型別:null

區域性變數:沒有預設初始化值

呼叫區域性變數之前一定要顯性賦值

形參在呼叫時,直接賦值

4.在記憶體中載入的位置:

屬性:載入到棧記憶體

區域性變數:載入到堆記憶體

屬性賦值的順序:

①屬性預設初始化

②屬性顯式初始化或者屬性顯式初始化(按照宣告先後順序)

③構造器中初始化構造器中初始化構造器中初始化構造器中初始化

④通過物件呼叫屬性或方法的方式修改屬性值

方法:

名稱:Method = (成員)方法 = 函式

含義:對應類中的成員方法(描述事物的行為)

格式:修飾符 返回值型別 方法名 ( 引數列表) { 方法體語句; }

方法的過載:

定義:同一類下同名、引數順序、個數、引數型別不同的方法

方法的重寫:

定義:子類重寫父類的方法

ps:

1.方法名相同,引數列表相同(引數順序、個數、型別)

2.返回型別與被重寫方法的返回型別可以不相同,但是必須是父類返回值的派生類訪問修飾符

3.訪問範圍需要大於等於父類的訪問範圍

4.父類的成員方法只能被它的子類重寫。

5.宣告為 static 的方法不能被重寫,但是能夠被再次宣告。

6.子類和父類在同一個包中,那麼子類可以重寫父類所有方法,除了宣告為 private 和 final 的方法。

7.子類和父類不在同一個包中,那麼子類只能夠重寫父類的宣告為 public 和 protected 的非 final 方法。

8.重寫的方法能夠丟擲任何非強制異常,無論被重寫的方法是否丟擲異常。但是,重寫的方法不能丟擲新的強制性異常,或者比被重寫方 法宣告的更廣泛的強制性異常,反之則可以。

9.構造方法不能被重寫。

過載和重寫的區別
區別點過載方法重寫方法
引數列表 必須修改 一定不能修改
返回型別 可以修改 一定不能修改
異常 可以修改 可以減少或刪除,一定不能丟擲新的或者更廣的異常
訪問 可以修改 一定不能做更嚴格的限制(可以降低限制)
遞迴方法:

作用:將大問題分解為一個相同的小問題。

自己呼叫自己

構造器:

格式:修飾符 類名 (引數列表) { 初始化語句; }

隱式無參構造器(編譯器預設提供) 顯式定義一個或多個構造器(無參、有參)

特點:

1) 方法名和類名一致, 唯一允許首字母大寫的方法名.

2) 不宣告返回值型別, 連void也沒有.

3) 不能被一些關鍵字修飾, static, abstract, native....

4) 不可以像普通 方法一樣隨意呼叫

5) 父類的構造器不可被子類繼承

如果在類中並沒有提供任何構造器,編譯器會自動新增一個預設的構造器

特點 : 修飾符和類一致, 無參, 無語句

如果在類中已經提供了構造器, 編譯器就不會再自動新增預設構造器了!!

構造器也可以過載 (定義多個構造器): 只要引數不同就能過載

作用:

1.建立物件 型別 地址(指向物件)=new + 構造器;

2.初始化物件資訊

總結:屬性賦值的先後順序

① 預設初始化

② 顯式初始化

③ 構造器中初始化

④ 通過"物件.方法" 或 "物件.屬性"的方式,賦值

以上操作的先後順序:① - ② - ③ - ④

程式碼塊:

非靜態程式碼塊:沒有static修飾的程式碼塊 格式:{}

1.可以有輸出語句。 ​ 2.可以對類的屬性、類的宣告進行初始化操作。 ​ 3.可以呼叫靜態的變數或方法。 ​ 4.若有多個非靜態的程式碼塊,那麼按照從上到下的順序依次執行。 ​ 5.每次建立物件的時候,都會執行一次。且先於構造器執行

靜態程式碼塊:用static 修飾的程式碼塊 格式:static{}

1.可以有輸出語句。 ​ 2.可以對類的屬性、類的宣告進行初始化操作。 ​ 3.不可以對非靜態的屬性初始化。即:不可以呼叫非靜態的屬性和方法。 ​ 4.若有多個靜態的程式碼塊,那麼按照從上到下的順序依次執行。 ​ 5.靜態程式碼塊的執行要先於非靜態程式碼塊。 ​ 6.靜態程式碼塊只執行一次

作用:對Java物件進行初始化
執行順序:靜態程式碼塊 > 構造程式碼塊 > 建構函式。

編譯器會把所有靜態語句塊合體, 還有靜態屬性的顯式賦值合體, 合體後的方法名 public void <clinit>() {} 編譯器在編譯時, 會把所有非靜態塊和顯式賦值語句合體, 還會再把適當的構造器也合體, 生成一個方法 public void <init>()

內部類:

按照宣告位置來分

1) 成員內部類 : 類中方法外的內部類 靜態成員內部類不需建立物件、非靜態成員內部類需要建立物件 1) 普通內部類 : 沒有static修飾的內部類 2) 巢狀類 : 有static修飾的內部類

2) 區域性內部類 : 宣告在方法中的內部類 1) 普通區域性內部類 : 在方法中宣告 , 有類名 2) 匿名內部類 : 在方法中宣告, 沒有類名

就適用於一次性使用某個類的物件.

2.面向物件的三大特徵

封裝

將資料宣告為私有的(private),再提供公共的(public)方法:getXxx()和setXxx()實現對該屬性的操作

修飾符

繼承:與抽象方法和多型相結合

內容:繼承就是子類繼承父類的特徵和行為,使得子類物件(例項)具有父類的屬性和方法,或子類從父類繼承方法,使得 子類具有父類相同的行為。

格式:

class 父類 {}
class 子類 extends 父類 {}

子類可以重寫父類的方法、實現了對父類方法的拓展

作用:1.繼承的出現提高了程式碼的複用性。 2.繼承的出現讓類與類之間產生了關係,提供了多型的前提。

ps:繼承只能單繼承

子類會繼承父類的靜態和非靜態方法, 但是隻有非靜態方法有多型性, 靜態方法沒有多型性, 因為它們是共存的.

Object類是所有Java類的根父類

多型:

屬性沒有多型性, 屬性的訪問只取決於引用型別. 如果是父類型別, 訪問的就是從父類繼承的屬性, 如果是子類型別, 訪問子類中的屬性

條件:繼承、重寫、父類的引用指向子類的物件

內容:父類的引用指向子類的物件,不能再訪問子類中新增的屬性和方法

虛擬方法呼叫:當呼叫父類同名同參的方法時,執行的是子類重寫父類的方法。

instanceof :x instanceof A:檢驗x是否為類A的物件,返回值為boolean型。

多型一般為向上轉型,即將一個詳細描述的事務轉換為粗略描述的事務,不在關係特有的屬性與方法。例:子類可以向上轉型為父類、 介面。

3.其它關鍵字

package:

含義:指明該檔案中定義的類所在的包

格式:package 頂層包名.子包名 ;

1.一個專案中,可能涉及到幾十到幾百個類,為了更好的區分並整理不同的類的功能,我們使用包的概念。 2.包的宣告格式:“層次1.層次2.層次3....” 3.包的命名遵循識別符號的命名規則和規範:xxxyyyzzz 4.每“.”一次,表示一層檔案目錄 5.包的宣告,需要定義在原始檔的首行。

import:

含義:引入指定包層次下所需要的類或全部類

格式:import 包名[.子包名…]. <類名 |*>

ps:

1.宣告在包的宣告和類的宣告之間。 2.如果需要匯入多個類或介面,那麼就並列顯式多個import語句即可 3.如果在程式碼中使用不同包下的同名的類。那麼就需要使用類的全類名的方式指明呼叫的是哪個類。 4.import static組合的使用:呼叫指定類或介面下的靜態的屬性或方法 5.如果已經匯入java.a包下的類。那麼如果需要使用a包的子包下的類的話,仍然需要匯入。

this:

含義:當前物件或當前正在建立的物件,呼叫本類的屬性,方法,構造器

ps:1.在本類的一個構造器內使用this關鍵字呼叫本類的另一個構造器時,必須將this關鍵字放在首行,因此同一個構造器內至多使用 一次this

TestThis(int a, int b) {
// TestThis(); //這樣是無法呼叫構造方法的!
this(); // 呼叫無參的構造方法,並且必須位於第一行!1
a = a;// 這裡都是指的區域性變數而不是成員變數
// 這樣就區分了成員變數和區域性變數. 這種情況佔了this使用情況大多數!
this.a = a;
this.b = b;
}

2.聲明瞭多個構造器的類中至少有一個構造器不呼叫this關鍵字

3.this不能用於static方法中。

interface:

介面的關鍵字

格式:

public interface Flyable {
public final int wingsNumber = 2;
public abstract void fly();
}
介面:

定義:現實世界不同型別事務的共同行為特徵。體現了類的擴充套件性(抽象的極致)例:飛行:鳥、飛機

介面的意義是被子類實現,子類要實現介面的所有抽象方法。

關鍵詞:implements

public class FlyerTest{
public static void main(String[] args){
//將具體類當作介面類來呼叫(多型)
flyer f = new Plane();

}
}

ps:介面與繼承:

子類可以實現多個介面

子類只能繼承一個父類

//一個子類即繼承有實現介面時編碼順序先繼承後實現
public class Bird extends Pet implements Flyer{

}

具體類:對某種事物抽象定義

抽象類:對某類不同種事物抽象定義

介面:對不同類不同事物的共同行為的抽象定義

介面中的所有方法均為公共抽象方法

介面中屬性只能包含全域性常量(實際專案中不使用)

介面可以多繼承原因:介面的方法是抽象的

抽象類實現介面,即可以不用理會介面中的抽象方法

介面最終表達的是實現能力或某個標準規範。例:USB標準。

介面的特點:

用interface來定義。

介面中的所有成員變數都預設是由public static final修飾的。

介面中的所有方法都預設是由public abstract修飾的。

介面沒有構造器。

介面採用多繼承機制。

abstract:

可修飾:

類:抽象類

方法:抽象方法

不可修飾:

屬性、私有方法、構造器、靜態方法、final的方法。

super:

super可用於訪問父類中定義的屬性

super可用於呼叫父類中定義的成員方法

super可用於在子類構造方法中呼叫父類的構造器

ps:

尤其當子父類出現同名成員時,可以用super進行區分

super的追溯不僅限於直接父類

super和this的用法相像,this代表本類物件的引用,super代表父類的記憶體空間的標識

super 用於標識從父類繼承的成員, 可以訪問屬性和方法.

this 表示物件整體

呼叫父類構造器

super(引數):呼叫父類中的某一個建構函式(應該為建構函式中的第一條語句)。與this呼叫構造器二選一

ps:在構造器首行沒有宣告this(形參列表)super(形參列表)則預設呼叫父類的空參構造器:super()

  Chinese() { 
super(); // 呼叫父類構造方法
其他程式碼
}

static:

可修飾:

屬性:資料不再依賴於某個物件的存在而存在, 反而是所有物件應該共享的資料時, 使用靜態屬性

方法:當方法的呼叫不需要通過物件, 或者說方法的執行和呼叫者無關, 這樣的方法寫成靜態方法

程式碼塊:靜態程式碼塊、類載入時只執行一次

內部類:

非靜態屬性或物件屬性或稱為例項變數, 它隸屬於物件

因為物件的存在的不確定性, 所以稱它為非靜態

特點:

隨著類的載入而載入 例:靜態屬性或類屬性. 它隸屬於 優先於物件存在 修飾的成員,被所有物件所共享 訪問許可權允許時,可不建立物件,直接被類呼叫

final:

可以修飾

類:類不可被繼承

方法:該方法不能被重寫

變數:屬性為常量,名稱大寫,且只能被賦值一次。

抽象:

關鍵字: abstract

可修飾:類、方法。

不可修飾:屬性、私有方法、構造器、靜態方法、final的 方法

抽象類:

包含:屬性、構造器、具體方法、抽象方法

目的:某一類都會有這個方法,但是方法的具體實現步驟不清除(不確定),將此方法定義為抽象方法交給具體子類來實現。例:動物類:抽象方法(吃、叫)具體子類:貓類:(魚、喵喵喵)。。。

不能被例項化、可繼承、子類必須重寫父類的抽象方法、提供方法體,若沒有重寫全部的抽象方法,仍為抽象類。

ps:抽象類不能建立物件的原因是因為抽象類可能包含抽象方法。而抽象方法不能例項。

只能被子類繼承

抽象類不一定有抽象方法,有抽象方法的一定是抽象類

抽象方法:

只有方法的宣告,沒有方法的實現。以分號結束

例:abstract int abstractMethod( int a );