類和對象
一、 定義
對象:具有一組屬性和方法的實體。萬事萬物皆對象。
類:具有相同屬性和方法的對象的集合。抽象的概念。
關(guān)系:類是對象的抽象,對象是類的具體存在。
二、 類
1. 定義類
訪問修飾符 class 類名{ //定義屬性 //定義方法 } |
public class Student{ String name; int age; public void study(){ } public void eat(String food){ } } |
2. 創(chuàng)建對象
語法:類名 對象名 = new 類名();
示例:Student stu = new Student();
通過對象名+.的方式可以調(diào)用類的成員(屬性、方法)。
stu.name = “zhangsan”;
stu.study();
3. java中的數(shù)據(jù)類型
u 基本數(shù)據(jù)類型(值類型)
1) 整型:byte、short、int、long
2) 浮點型:float、double
3) 字符型:char
4) 布爾型:boolean
u 引用數(shù)據(jù)類型:
1) String
2) 數(shù)組
3) 類
三、 方法
1. 定義方法
語法:訪問修飾符 返回值類型 方法名稱(數(shù)據(jù)類型 參數(shù)名, 數(shù)據(jù)類型 參數(shù)名){
//方法體
}
注意:
u 如果方法沒有任何返回值,那么返回值類型寫void。
u 如果方法有返回值,那么應(yīng)該使用return關(guān)鍵字將結(jié)果值返回。
u 方法的參數(shù)列表可以為空。
u 定義方法時,參數(shù)列表中的參數(shù)為形參(形式參數(shù))。
u 方法體中不能再定義其他方法。
2. 方法的調(diào)用
語法:通過對象名.方法名進(jìn)行方法的調(diào)用。
注意:
u 方法如果有參數(shù),那么必須傳遞參數(shù)(參數(shù)的類型、個數(shù))。
u 參數(shù)如果為值類型,方法調(diào)用前后,實參的值不變;參數(shù)如果為引用類型,方法調(diào)用前后,實參的值要改變。
u 如果方法定義時,沒有返回值,那么不能定義變量接受方法的返回值。
u 如果方法定義時,有返回值,那么可以定義變量接收返回值;也可以不定義變量接受。
u 同一類中相互調(diào)用方法時,直接通過方法名調(diào)用。
public class Teacher{ public void teach(){ study(); } public void study(){ } } |
u 不同類中調(diào)用方法時,需要首先創(chuàng)建類對象,通過對象名.方法名()進(jìn)行調(diào)用。
public class Teacher{ public void teach(){ } } public class Student(){ public void learn(){ //調(diào)用Teacher類中的teach方法 Teacher teacher = new Teacher(); teacher.teach(); } } |
u 方法調(diào)用時,不需要寫{}
Teacher teacher = new Teacher(); teacher.teach(){};//錯誤 teacher.teach();//正確 |
3. 構(gòu)造方法
u 構(gòu)造方法的方法名和類名相同。
u 如果沒有顯示定義構(gòu)造方法,那么系統(tǒng)會默認(rèn)創(chuàng)建一個無參的構(gòu)造方法。
u 如果顯示定義了構(gòu)造方法,那么系統(tǒng)將不會再創(chuàng)建任何構(gòu)造方法。
u 構(gòu)造方法沒有返回值類型。
u 一個類中可以存在多個構(gòu)造方法。
u 創(chuàng)建類對象時,關(guān)鍵字new后面跟的就是類的構(gòu)造方法。
4. 方法的重載
1. 重載需要滿足以下條件:
在同一個類中
方法名相同
參數(shù)列表不同(參數(shù)個數(shù)不同、參數(shù)類型不同、參數(shù)順序不同)
2. 注意:方法的訪問修飾符和返回值類型不在考慮范圍之內(nèi)。
四、 局部變量和成員變量
成員變量:類中定義的屬性或字段就是成變量。
局部變量:方法中定義的變量、代碼塊中定義的變量({})都是局部變量。
成員變量可以通過this進(jìn)行訪問;局部變量不可以。
成員變量的優(yōu)先級 <局部變量的優(yōu)先級
成員變量,在類的所有方法中均可以使用;但是局部變量只能在相應(yīng)的代碼塊中使用。
五、 類成員的訪問修飾符
同一個類中 同一個包中 子類中 任何地方
PRivate yes no no no
默認(rèn)修飾符 yes yes no no
protected yes yes yes no
public yes yes yes yes
注意:優(yōu)先級從低到高依次為:private(私有)< 默認(rèn)< protected(受保護(hù))< public(公共)
上述訪問修飾符適用于:屬性、方法。不適用于類,類的訪問修飾符只有2個:public和默認(rèn)修飾符。
六、 JAVA中的命名規(guī)則
1. 駝峰命名法
標(biāo)識符中,第一個英文單詞首字母小寫,其他單詞首字母均大寫。
2. 帕斯卡命名法
標(biāo)識符中,所有英文單詞首字母均大寫。
3. JAVA中的命名規(guī)則
包:全小寫。
類:帕斯卡命名法。
屬性|方法:駝峰命名法。
七、 靜態(tài)成員
1. 定義
被static關(guān)鍵字修飾的成員就是靜態(tài)成員,靜態(tài)成員包括:靜態(tài)屬性、靜態(tài)方法、靜態(tài)代碼塊。
public class MathHelper{ //定義靜態(tài)成員 public static final double PI = 3.14; //靜態(tài)代碼塊 static{ //代碼 } //靜態(tài)方法 public static double calculateCircleArea(double r){ return PI * r * r; } } |
2. 注意事項
u 靜態(tài)成員需要通過類名進(jìn)行調(diào)用:double area = MathHelper.calculateCircleArea(5.0)。
u 靜態(tài)代碼塊只執(zhí)行一次,并且在系統(tǒng)啟動時執(zhí)行。
u 靜態(tài)成員雖然使用方便(不需要事先實例化),但是靜態(tài)成員在內(nèi)存中會一直存在。
八、 包
1. 設(shè)置類所在的包:在源文件的第一行添加: package包名
package com.bdqnsjz.demo;
public class Test{}
2. 導(dǎo)入包:在源文件的package和類名中間添加: import包名
package com.bdqnsjz.demo;
import com.dbqnsjz.homework;
public class Test{}
3. 注意:
u 包名由小寫字母組成,不能以圓點開頭或結(jié)尾
u 包名之前最好加上唯一的前綴,通常使用組織倒置的網(wǎng)絡(luò)域名
u 常見的包:
java.lang:虛擬機(jī)自動引入
java.util:提供一些實用類
java.io: 輸入、輸出
u package和import的順序是固定的:
1.package必須位于第一行(忽略注釋行)
2.只允許有一個package語句
3.其次是import
4.接著是類的聲明
九、 封裝
1. 定義
將類的某些信息隱藏在類內(nèi)部,不允許外部程序直接訪問,而是通過該類提供的方法來實現(xiàn)對隱藏信息的操作和訪問。
public class Student{ private String name; private int age;
public String getName(){ return this.name; } public void setName(String name){ this.name = name; } } |
2. 通俗的講,封裝就是將類的屬性(字段)設(shè)置為私有的(private),并添加getter/setter方法操作屬性。
十、 繼承
1. 目的
解決代碼冗余的問題。
2. 語法:
public class 子類名 extends 父類名{
}
3. 注意:
1.子類(擴(kuò)展類)、父類(基類)
2.一個類只有有1個父類
3.在父類中被protected修飾符修飾的變量,可以在子類中訪問。
在父類中被private修飾符修飾的變量,不可以在子類中訪問。
4.在子類中通過super關(guān)鍵字來訪問父類的成員。
在當(dāng)前類中通過this關(guān)鍵字來訪問本類的成員。
5.實例化子類對象時,會默認(rèn)調(diào)用父類無參的構(gòu)造方法。
6.在子類中調(diào)用父類構(gòu)造方法時,應(yīng)該在子類的構(gòu)造方法的第一行進(jìn)行調(diào)用。
4. 方法的重寫
定義:子類重新實現(xiàn)父類的方法。
要求:方法名相同;參數(shù)列表相同;返回值類型相同;子類方法訪問修飾符高于父類方法的修飾符。
注解:@Override 重寫
5. 方法重載和方法重寫的區(qū)別
1.方法重寫研究的是子類和父類,方法的重載研究的是同一個類中的方法
2.方法重寫的方法名要相同,方法重載時方法名也相同
3.方法重寫時,參數(shù)列表相同,方法重載時,參數(shù)列表不同。
4.方法重寫時,返回值相同,方法重載時,返回值類型無關(guān)。
6. Object類
1.Object是所有類的父類(所有類都直接或間接繼承自O(shè)bject類)
2.判斷值類型的變量是否相等用== 判斷引用類型的變量是否相等用equals
3.hashCode哈希值。每次通過構(gòu)造方法創(chuàng)建類的對象后,都有1個唯一的哈希值。
7. instanceof關(guān)鍵字
用途:instanceof用于判斷一個引用類型所引用的對象是否是一個類的實例。
向上轉(zhuǎn)型:子類對象轉(zhuǎn)父類對象
Pet pet1 = new Dog(); Pet pet2 = new Penguin();
向下轉(zhuǎn)型:父類對象轉(zhuǎn)子類對象
Dog dog = (Dog)pet1; Penguin penguin = (Penguin)pet1;//null
注意:向上轉(zhuǎn)型安全,向下轉(zhuǎn)型有風(fēng)險,可能會存在類型不兼容的問題。
解決辦法就是使用instanceof關(guān)鍵字判斷是否類型兼容。
十一、 多態(tài)
1. 定義:
同一個引用類型,使用不同的實例而執(zhí)行不同操作。
2. 具體實現(xiàn)步驟:
1.定義父類和子類,在子類中重寫父類的方法;
2.定義一個方法,方法的參數(shù)為父類型,在方法中調(diào)用父類被重寫的方法;
3.調(diào)用該方法時,傳遞子類對象,結(jié)果執(zhí)行的為子類的方法,而非父類的方法。
3. 注意:
多態(tài)中涉及到的類應(yīng)該存在繼承關(guān)系。
里氏代換原則(凡是出現(xiàn)父類的地方,都可以使用子類對象)
public void takeCare(Pet pet){ pet.cure(); } Pet dog = new Dog(); Pet penguin = new Penguin(); doctor.takeCare(dog); doctor.takeCare(penguin); |
十二、 抽象類
抽象方法:被abstract關(guān)鍵字修飾的方法就是抽象方法。
抽象類:被abstract關(guān)鍵字修飾的類就是抽象類。
注意:
1. 抽象方法不能有方法體。
public abstract void run();
2. 抽象方法所在的類一定是抽象類。
public abstract class Traffic{}
3. 抽象類中的方法不一定都是抽象方法。
4. 抽象類無法直接實例化創(chuàng)建對象,必須調(diào)用子類的構(gòu)造方法創(chuàng)建對象。
十三、 接口
1. 定義:
接口用于提供一種約定(方法),使得實現(xiàn)接口的類在形式上保持一致。
2. 語法:
public interface 接口名{ //抽象方法 } public class 類名 implements 接口名{ //實現(xiàn)接口中所有的抽象方法 } |
3. 注意:
1.接口中只能包含抽象方法(不需要使用abstract關(guān)鍵字修飾)
2.一個類可以實現(xiàn)多個接口(只能繼承1個類)
3.接口不能直接被實例化(由實現(xiàn)類去實例化接口)。
4.一個接口可以繼承多個接口
5.一個類可以實現(xiàn)多個接口
6.接口中的所有方法都為抽象方法
7.抽象類實現(xiàn)接口后,可以不實現(xiàn)接口中的抽象方法
十四、 異常
1. 定義
異常是指在程序運行過程中所發(fā)生的不正常的事件,它會中斷正在運行的程序。
2. 異常相關(guān)的關(guān)鍵字
try、catch、finally、throw、throws
u try:執(zhí)行可能產(chǎn)生異常的代碼
u catch:捕獲異常,編寫處理異常的代碼
u finally:無論是否發(fā)生異常,都要執(zhí)行的代碼塊
u throw:手動拋出異常
u throws:聲明方法可能要拋出的各種異常
3. 注意
u try代碼塊有可能出現(xiàn)異常也可能不會出現(xiàn)異常
u 只有try代碼塊出現(xiàn)異常時,catch代碼塊才會執(zhí)行
u try中的代碼塊一旦出現(xiàn)異常,那么出現(xiàn)異常后面的代碼不會繼續(xù)執(zhí)行。
u ex.printStackTrace()方法用于向控制臺打印輸出異常堆棧信息(在執(zhí)行哪一行代碼時出現(xiàn)什么異常)
u 如果出現(xiàn)的異常類型和catch塊中異常的類型匹配,那么才會執(zhí)行catch塊中的代碼,否則不執(zhí)行。
u 所有異常類均直接或間接繼承自類Exception
u 多重catch 在try代碼塊后,包含了多個catch代碼塊
u 多重catch時,Exception一定要放在最后
u System.exit(1);表示強(qiáng)制性退出系統(tǒng)。
u try-catch-finally結(jié)構(gòu)中try語句塊是必須的,catch、finally語句塊均可選,但兩者至少出現(xiàn)之一
u try-catch塊中存在return語句,是否還執(zhí)行finally塊,如果執(zhí)行,說出執(zhí)行順序
4. 常見的異常
1.ArrayIndexOutOfBoundsException 數(shù)組下標(biāo)越界異常
2.NullPointerException 空指針異常
3.NumberFormatException 數(shù)字格式化異常
4.ArithmeticException 算術(shù)運算異常
5.RuntimeException 運行時異常
6.FileNotFoundException 文件未找到異常
7.IOException 輸入輸出異常
8.NoSuchMethodException 方法未找到異常
9.Exception 所有異常的父類
10.ClassCastException 類型強(qiáng)制轉(zhuǎn)換異常
新聞熱點
疑難解答