Java面向?qū)ο蠊P記

類和對象

  • 對象的概念
  • 什么是面向?qū)ο?/li>
  • 什么是對象的屬性
  • 什么是對象的方法
  • 類與對象的關(guān)系/與區(qū)別

什么是對象

萬物皆對象, 客觀存在的事物皆為對象  

什么是類

類是模子, 確定對象將會擁有的特征(屬性)和行為(方法)
類的特點:
      類是對象的類型
      具有相同的屬性和方法的一組對象的集合
其實類在客觀世界里是不存在的, 只是用來描述對象信息

什么是對象的屬性

屬性--對象具有的各種特征
       每個對象的每個屬性都擁有特定的值

類和對象的關(guān)系

類是抽象的概念, 僅僅是模板, 比如說 : "手機";
對象是一個能看得到, 摸得著的具體實物

定義類

1.類的重要性 : 所有Java程序都以類class為組織單元
2.什么是類?
    類是模子, 確定對象將會擁有的特征(屬性)和行為(方法)
3.類的組成 : 屬性和方法
4.定義一個類的步驟 : 
    a. 定義類名
    b. 編寫類的屬性
    c. 編寫類的方法  

Java對象

使用對象的步驟 : 
    1. 創(chuàng)建對象 : 
          類名 對象名 = new 類名();
          Telephone phone = new Telephone();
      ps: 類是以代碼的形式保存在文件中, 當把文件信息放到內(nèi)存中, 此時,這些信息的集合就叫對象, 這個過程叫做實例化.
    2. 使用對象
          引用對象啊的屬性 : 對象名.屬性
          phone.screen = 5; // 賦值
          引用對象的方法 : 對象名 . 方法名();
          phone.send(); // 調(diào)用send方法

成員變量和局部變量

1.成員變量
      在類中定義, 用來描述對象將要有什么
      成員變量可以被本類的所有方法使用, 也可以被與本類有關(guān)系的其他方法使用
2.局部變量
      在類的方法中定義, 在方法中臨時保存數(shù)據(jù)
      只能在本方法中使用
區(qū)別 : 
      1.作用域不同
        局部變量的作用域僅限于定義它的方法
        成員變量的作用域在整個類的內(nèi)部都是可見的
      2.初始值不同
        Java會給成員變量一個初始值
        Java不會給局部變量賦予初始值
      3.在同一個方法中不允許有同名局部變量
        在不同的方法中, 可以有同名局部變量
      4.兩類變量同名時, 局部變量具有更高的優(yōu)先級

構(gòu)造方法

1.使用new + 構(gòu)造方法 創(chuàng)建一個新的對象
2.構(gòu)造方法是定義在Java類中的一個用來初始化對象的方法
    構(gòu)造方法的類名同名且沒有返回值
3.語法格式
public 構(gòu)造方法名() {
  // 初始化代碼
}
無參構(gòu)造方法 : 當沒有指定構(gòu)造方法時, 系統(tǒng)會自動添加無參的構(gòu)造方法
有參構(gòu)造方法 : 為了初始化成員變量的值, 當有指定構(gòu)造方法, 無論是有參, 無參的構(gòu)造方法, 都不會自動添加無參構(gòu)造方法
構(gòu)造方法的重載 : 方法名相同, 但參數(shù)不同的多個方法, 調(diào)用時會自動根據(jù)不同的參數(shù)選擇相應(yīng)的方法
構(gòu)造方法不但可以給對象的屬性賦值, 還可以保證給對象的屬性賦一個合理的值

Java中的static使用之----靜態(tài)變量

Java 中被 static 修飾的成員稱為靜態(tài)成員或類成員。它屬于整個類所有,而不是某個對象所有,即被類的所有對象所共享。
靜態(tài)成員可以使用類名直接訪問,也可以使用對象名進行訪問。當然,鑒于他作用的特殊性更推薦用類名訪問~~
static 可以修飾變量、方法和代碼塊
PS : 靜態(tài)成員屬于整個類,當系統(tǒng)第一次使用該類時,就會為其分配內(nèi)存空間直到該類被卸載才會進行資源回收!~~

Java中的static使用之----靜態(tài)方法

1.靜態(tài)方法中可以直接調(diào)用同類中的靜態(tài)成員,但不能直接調(diào)用非靜態(tài)成員。
    如果希望在靜態(tài)方法中調(diào)用非靜態(tài)變量,可以通過創(chuàng)建類的對象,然后通過對象來訪問非靜態(tài)變量。
2.在普通成員方法中,則可以直接訪問同類的非靜態(tài)變量和靜態(tài)變量
3.靜態(tài)方法中不能直接調(diào)用非靜態(tài)方法,需要通過對象來訪問非靜態(tài)方法。

Java中的static使用之----初始化塊

Java 中可以通過初始化塊進行數(shù)據(jù)賦值
在類的聲明中,可以包含多個初始化塊,當創(chuàng)建類的實例時,就會依次執(zhí)行這些代碼塊。如果使用 static 修飾初始化塊,就稱為靜態(tài)初始化塊
PS : 靜態(tài)初始化塊只在類加載時執(zhí)行,且只會執(zhí)行一次,同時靜態(tài)初始化塊只能給靜態(tài)變量賦值,不能初始化普通的成員變量。
程序運行時靜態(tài)初始化塊最先被執(zhí)行,然后執(zhí)行普通初始化塊,最后才執(zhí)行構(gòu)造方法。由于靜態(tài)初始化塊只在類加載時執(zhí)行一次

面向?qū)ο筇匦?/h2>
  1. 封裝
  2. 繼承
  3. 多肽

封裝

1.概念 : 
  將類的某些信息隱藏在類內(nèi)部, 不允許外部程序直接訪問, 而是通過該類提供的方法來實現(xiàn)對隱藏信息的操作和訪問
2.好處 : 
  a.只能通過規(guī)定的方法訪問數(shù)據(jù)
  b.隱藏類的實例細節(jié), 方便修改和實現(xiàn)
3.封裝的實現(xiàn)步驟 : 
  第一步, 修改屬性的可見性---設(shè)為private
  第二步, 創(chuàng)建getter/setter方法---用于屬性讀寫
  第三步, 在getter/setter方法中加入屬性控制語句---對屬性值的合法性進行判斷

Java中的包

1. 包的作用:
    管理Java文件
    解決同名文件沖突
2. 定義包 : package 包名
    注 : 必須放在Java源程序的第一行
          包名可以用"."號隔開
3. 系統(tǒng)中的包
    java.(功能).(類)
    java.lang.(類)  包含java語言基礎(chǔ)的類
    java.util.(類)  包含java語言中各種工具類
    java.io.(類)  包含輸入,輸出相關(guān)功能
4. 包的使用
    (1),可以通過import關(guān)鍵字, 在某個文件使用其他文件中的類.
    (2),Java中, 包的命名規(guī)范全是小寫字母拼寫
    (3),使用的時候不但可以加載某個包下的所有文件, 也可以加載某個具體子包下的所有文件

Java中的訪問修飾符

訪問修飾符 --- 可以修飾屬性和方法的訪問范圍
訪問修飾符  本類  同包  子類  其他
private     √
默認         √     √
protected   √      √    √
public      √      √    √    √

Java中的this關(guān)鍵字

1. this關(guān)鍵字代表當前對象
   this.屬性  操作當前對象的屬性
   this.方法  調(diào)用當前對象的方法
2. 封裝對象的屬性的時候, 經(jīng)常會使用this關(guān)鍵字

Java中的內(nèi)部類

1. 概念 : 
   內(nèi)部類( Inner Class )就是定義在另外一個類里面的類。與之對應(yīng),包含內(nèi)部類的類被稱為外部類
2. 作用 : 
   1. 內(nèi)部類提供了更好的封裝,可以把內(nèi)部類隱藏在外部類之內(nèi),不允許同一個包中的其他類訪問該類
   2. 內(nèi)部類的方法可以直接訪問外部類的所有數(shù)據(jù),包括私有的數(shù)據(jù)
   3. 內(nèi)部類所實現(xiàn)的功能使用外部類同樣可以實現(xiàn),只是有時使用內(nèi)部類更方便
3. 種類 : 
   成員內(nèi)部類
   靜態(tài)內(nèi)部類
   方法內(nèi)部類
   匿名內(nèi)部類
PS : 
   1.外部類是不能直接使用內(nèi)部類的成員和方法的
     可先創(chuàng)建內(nèi)部類的對象,然后通過內(nèi)部類的對象來訪問其成員變量和方法。
   2.如果外部類和內(nèi)部類具有相同的成員變量或方法,內(nèi)部類默認訪問自己的成員變量或方法
     如果要訪問外部類的成員變量,可以使用 this 關(guān)鍵字。
Java 中的靜態(tài)內(nèi)部類
   靜態(tài)內(nèi)部類是 static 修飾的內(nèi)部類,這種內(nèi)部類的特點是:
      1.靜態(tài)內(nèi)部類不能直接訪問外部類的非靜態(tài)成員,但可以通過new 外部類().成員的方式訪問 
      2.如果外部類的靜態(tài)成員與內(nèi)部類的成員名稱相同,可通過“類名.靜態(tài)成員”訪問外部類的靜態(tài)成員;
        如果外部類的靜態(tài)成員與內(nèi)部類的成員名稱不相同,則可通過“成員名”直接調(diào)用外部類的靜態(tài)成員
      3.創(chuàng)建靜態(tài)內(nèi)部類的對象時,不需要外部類的對象,可以直接創(chuàng)建 內(nèi)部類 對象名= new 內(nèi)部類();
Java 中的方法內(nèi)部類
   方法內(nèi)部類就是內(nèi)部類定義在外部類的方法中,方法內(nèi)部類只在該方法的內(nèi)部可見,即只在該方法內(nèi)可以使用。
   ps : 由于方法內(nèi)部類不能在外部類的方法以外的地方使用,因此方法內(nèi)部類不能使用訪問控制符和 static 修飾符。

繼承

1. 繼承的概念 : 
   繼承是類與類的一種關(guān)系, 是一種"is a"的關(guān)系
   ps : Java中的繼承是單繼承
2. 繼承的好處 : 
   1.子類擁有父類所有的屬性和方法
     ps : 屬性和方法的修飾符不能是"private"
   2.實現(xiàn)代碼復用
3. 語法規(guī)則 : 
   class 子類 extends 父類

方法重寫

1. 什么是方法重寫?
   如果子類對繼承父類的方法不滿意, 是可以重寫父類繼承的方法的, 當調(diào)用方法時會優(yōu)先調(diào)用子類的方法
2. 語法規(guī)則 : 
   a. 返回值類型
   b. 方法名
   c. 參數(shù)類型及個數(shù)
   都要與父類繼承的方法相同, 才叫方法重寫

繼承的初始化順序

1. 初始化父類, 再初始化子類
2. 先執(zhí)行初始化對象中屬性, 再執(zhí)行構(gòu)造方法中的初始化
   eg : 父類對象 ---> 屬性初始化 ---> 構(gòu)造方法 ---> 子類對象 ---> 屬性初始化 ---> 構(gòu)造方法

final的使用

final關(guān)鍵字
   使用final關(guān)鍵字做標識有"最終的"含義
final可以修飾類, 方法, 屬性和變量
   final修飾類, 則該類不允許被繼承
   final修飾方法, 則該方法不允許被覆蓋(重寫)
   final修飾屬性
      則該類的屬性不會進行隱式的初始化(類的初始化屬性必須有值)
      或者在構(gòu)造方法中賦值(但只能選其一)
   final修飾變量, 則該變量的值只能賦一次值, 即為常量

super關(guān)鍵字

super關(guān)鍵字 : 在對象的內(nèi)部使用, 可以代表父類對象
1. 訪問父類的屬性
   super.父類屬性;
2. 訪問父類方法
   super.父類方法()
ps : 子類的構(gòu)造過程當中必須調(diào)用其父類的構(gòu)造方法
     如果子類構(gòu)造方法中沒有顯式調(diào)用父類的構(gòu)造方法, 則系統(tǒng)默認調(diào)用父類無參構(gòu)造方法
     如果顯式的調(diào)用構(gòu)造方法, 必須在子類的構(gòu)造方法的第一行
     如果子類構(gòu)造方法中既沒有顯式調(diào)用父類的構(gòu)造方法, 而父類又沒有無參構(gòu)造方法, 則編譯出錯

Object類

1. toString()方法
   在Object類里面定義toString()方法的時候,返回的對象的哈希code碼(對象地址字符串)
   可以通過重寫toString() 方法表示出對象的屬性
2. equals()方法
   比較的是對象的引用是否是指向同一塊內(nèi)存地址

多肽

概念 : 
   對象的多種形態(tài)
1. 引用多肽
   父類的引用可以指向本類的對象
   父類的引用可以指向子類的對象
   (子類的引用不可以指向父類)
ps : 繼承是多肽的實現(xiàn)基礎(chǔ)
2. 方法多肽
   創(chuàng)建本類對象時, 調(diào)用的方法為本類的方法
   創(chuàng)建子類對象時, 調(diào)用的方法為子類重寫的方法或者繼承的方法

引用類型轉(zhuǎn)換

1. 向上類型轉(zhuǎn)換(隱式/自動類型轉(zhuǎn)換), 是小類型到大類型的轉(zhuǎn)換
2. 向下類型轉(zhuǎn)換(強制類型轉(zhuǎn)換), 是大類型到小類型
   ps : 向上類型轉(zhuǎn)換(無風險), 向下類型轉(zhuǎn)換(有風險)
3. instanceof運算符, 來解決引用對象的類型, 避免類型轉(zhuǎn)換的安全性問題

抽象類

1. 語法定義 : 
   抽象類前使用abstract關(guān)鍵字修飾, 則該類為抽象類
2. 應(yīng)用場景 : 
   a.在某些情況下, 某個父類只是知道其子類應(yīng)該包含怎樣的方法, 但無法準確知道這些子類如何實現(xiàn)這些方法
     也就是說抽象類是約束子類必須有哪些方法, 而并不關(guān)注子類是如何實現(xiàn)的
   b.從多個具有相同特征的類中抽象出一個抽象類, 以這個抽象類作為子類的模板, 從而避免了子類設(shè)計的隨意性
3. 作用 : 
   限制規(guī)定子類必須實現(xiàn)某些方法, 但不關(guān)注實現(xiàn)細節(jié)
4. 使用規(guī)則 : 
   a. abstract定義抽象類
   b. abstract定義抽象方法, 只有聲明, 不需要實現(xiàn)
   c. 包含抽象方法的類是抽象類
   d. 抽象類中可以包含普通方法, 也可以沒有抽象方法
   e. 抽象類不能直接創(chuàng)建, 可以定義引用變量

接口

1. 接口概念 :  (是一種規(guī)范, 是用來約束類的)
   接口可以理解為一種特殊的類, 由全局常量和公共的抽象方法所組成
   類是一種具體的實現(xiàn)體, 而接口定義了某一批類所需要遵守的規(guī)范, 接口不關(guān)心這些類的內(nèi)部數(shù)據(jù), 
   也不關(guān)心這些類里方法的實現(xiàn)細節(jié), 它只規(guī)定這些類里必須提供某些方法
2. 接口定義 
   和類定義不同, 定義接口不再使用class關(guān)鍵字, 而是使用interface關(guān)鍵字
接口定義的基本語法 : 
   [修飾符] (abstract 此關(guān)鍵字肯定有, 如果沒有,系統(tǒng)會默認加上) interface 接口名 [extends 父接口1, 父接口2...]
   {
     零到多個常量定義...
     零到多個抽象方法的定義...  
   }
   接口就是用來被繼承, 被實現(xiàn)的, 修飾符一般建議用public
   ps : 不能使用private和protected修飾接口
3. 常量 : 
   接口中的屬性是常量, 即使定義時不添加 public static final 修飾符, 系統(tǒng)也會自動加上
4. 方法 : 
   接口中的方法只能是抽象方法, 即使定義時不添加public abstract 修飾符, 系統(tǒng)也會自動加上
5. 使用接口 : 
   一個類可以實現(xiàn)一個或者多個接口, 實現(xiàn)接口可以使用implements關(guān)鍵字. Java中的一個類只能繼承一個父類,
   是不夠靈活的, 通過實現(xiàn)過個接口可以做補充
   繼承父類實現(xiàn)接口的語法為 : 
   [修飾符] class 類名 extends 父類 implements 接口1, 接口2...
   {
      類體部分  // 如果繼承了抽象類, 需要實現(xiàn)繼承的抽象方法; 要實現(xiàn)接口中的抽象方法
   }
   如果要繼承父類, 繼承父類必須在實現(xiàn)接口之前
使用接口 : 
   接口在使用過程當中, 還經(jīng)常與匿名內(nèi)部類配合使用
   匿名內(nèi)部類就是沒有名字的內(nèi)部類
   多用于關(guān)注實現(xiàn)而不關(guān)注實現(xiàn)類的名稱
語法格式 : 
   Interface i = new Interface(){
     public void method(){
       ...
     }
   }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容