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