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包的子包下的類的話,仍然需要匯入。
含義:當前物件或當前正在建立的物件,呼叫本類的屬性,方法,構造器
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 );