国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

類和對象

2019-11-06 09:34:26
字體:
來源:轉載
供稿:網友

類和對象

一、 定義

對象:具有一組屬性和方法的實體。萬事萬物皆對象。

類:具有相同屬性和方法的對象的集合。抽象的概念。

關系:類是對象的抽象,對象是類的具體存在。

二、 類

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              類型強制轉換異常


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 安义县| 西乌珠穆沁旗| 汝城县| 阿拉善盟| 大同市| 化德县| 乌兰浩特市| 桓台县| 金川县| 莱芜市| 南木林县| 安图县| 米易县| 新巴尔虎左旗| 揭东县| 宜城市| 德昌县| 习水县| 桦川县| 衢州市| 和硕县| 习水县| 南涧| 和林格尔县| 永川市| 乌审旗| 梅州市| 米林县| 彩票| 静宁县| 米泉市| 邻水| 江津市| 兖州市| 金门县| 兴海县| 新密市| 库尔勒市| 远安县| 桂平市| 岚皋县|