日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java知识点汇总1

發(fā)布時間:2025/3/17 java 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java知识点汇总1 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

面向對象

“萬物皆對象”怎么理解?
面向過程:強調的是功能行為,以函數為最小單位,考慮怎么做;
面向對象:強調了具備了功能的對象,以類/對象為最小單位,考慮誰來做。

任何資源、變量等都可以看成是對象,每個對象都有自己的狀態(tài)特征和行為特征,即屬性和方法,面向對象思想是指在編程過程中,通過對象之間行為的交互來解決問題。

  • 在Java語言范疇中,我們將功能、結構等封裝到類中,通過類的實例化來調用功能結構,即通過"對象.屬性"/"對象.方法"來調用;
  • 涉及到Java相關的技術,包括前端HTML頁面、后端數據庫的交互、以及文件資源、網絡資源URL等,都可視為對象;
    以類的形式組織代碼,以對象的形式封裝數據;
  • 類與對象

    類是很多個具有相同屬性和行為特征的對象所抽象出來的,對象是類的實例化;
    總結:類是對象的抽象,對象是類的實例;

    類的三大特征:
    封裝性:隱藏對象內部的復雜性,只對外公開簡單的接口。便于外界調用,從而提高系統的可擴展性、可維護性。

  • 實現:屬性的權限修改為private,并且創(chuàng)建getXxx()/setXxx()方法,用于調用private的屬性(一般是類的成員變量);

  • 優(yōu)點:

  • 我們程序設計追求“高內聚,低耦合”。
    ①. 高內聚:類的內部數據操作細節(jié)自己完成,不允許外部干涉;
    ②. 低耦合:僅對外暴露少量的方法用于使用;
    ③. 更加安全;

  • 缺點:不能直接訪問private修飾的變量,增加訪問難度。
  • 繼承性 :子類可以繼承父類的屬性和方法,并能拓展新的屬性和方法;

  • 實現:使用extends關鍵字將多個類具有的共同屬性與特征行為即成員變量/成員方法提取出來定義在一個公共類中,方便其他類繼承;
  • Class A extends Class B{}
  • 特點:java中類具有單繼承性:一個類只能有一個直接父類,但一個類可以被多個子類繼承;

  • 優(yōu)點:

  • ①. 減少了代碼的冗余,提高了代碼的復用性,從而提高軟件開發(fā)效率;
    ②. 便于功能擴展;
    3.多態(tài)的前提;

  • 缺點:父類變化,子類也會跟著變化,形成強耦合關系,應減少繼承關系,降低耦合度。
    tips: 一旦子類A繼承父類B之后,A就獲取了B中聲明的所有結構:屬性、方法;
    注:父類中聲明為private的屬性或方法,子類繼承父類后,仍然認為獲取了父類中的私有結構
    只是因為封裝性原因,使得子類不能直接調用父類的結構。
  • 多態(tài)性(Polymorphism):父類或接口定義的引用變量可以指向子類/具體實現類的實現對象。

  • 多態(tài)實現的條件:
  • ①. 子類繼承父類并重寫父類中已有的方法;
    ②. 父類引用指向子類對象,相同的引用調用同一個方法會根據子類對象的不同而表現出不同的行為;
    ③. 向上轉型;

  • 作用:
  • ①. 應用程序不必為每一個派生類編寫功能調用,只需對基類進行處理,提高代碼的復用性;
    ②. 父類引用可以調用不同子類的功能(向后兼容),提高了代碼的擴展性和可維護性;

  • 分類:
    編譯時多態(tài) (方法的重載overload)
    運行時多態(tài)(方法的重寫override)
  • 體現:
    Java引用變量有兩個類型:編譯時類型和運行時類型。編譯時類型由聲明該變量時使用的類型決定,運行時類型由實際賦給該變量的對象決定。
    若編譯時類型和運行時類型不一致,就出現了對象的多態(tài)性。
  • Animal a = new Dog(); a.eat();//調用的方法必須是子父類都有的

    總結:編譯看左邊(父類的引用),運行看右邊(子類的對象)

    重載與重寫
    重載:功能類似的方法,可以使用相同的方法名來定義不同功能的方法;在同一個類中,允許存在一 個以上的同名方法,只要它們的參數個數或者參數類型不同即可。

  • 特點:
  • ①. 與返回值類型無關,只看參數列表,且參數列表必須不同。(參數個數或參數類型)。
    ②. 調用時,根據方法參數列表的不同來區(qū)別。

  • 在通過對象調用方法時,如何確定某一個指定的方法?
  • JVM會根據參數類型、個數、順序等找到相對應的方法并運行;

    重寫 : 子類繼承父類之后,可以對父類中同名同參數的方法,進行覆蓋操作;

  • 應用:重寫以后,當創(chuàng)建子類對象后,通過子類對象調用子父類中的同名同參數時,執(zhí)行的是子類重寫的方法
  • 方法的聲明:
    權限修飾符 返回值類型 方法名(形參列表)throws 異常的類型{}:
  • 重寫的規(guī)定:
  • ①. 子類重寫的方法的方法名和形參列表與父類中被重寫的方法名和形參列表相同
    ②. 子類重寫的方法的權限修飾符>=父類被重寫方法的權限修飾符
    特殊情況:子類不能重寫父類中private的方法;

  • 返回值類型:
  • ①. 父類被重寫的方法的返回值類型void,子類也必須是void
    ②. 父類:A類(Object) 子類:A類/A類的子類(String)
    ③. 父類:基本數據類型(double) 子類:相同的基本數據類型(double)

  • 子類重寫的方法拋出的異常類型<=被重寫的方法拋出的異常類型
    tips:
  • 子類和父類中的同名同參數的方法要么都static(不是重寫),要么都非static(考慮重寫)
    static方法是隨著類的加載而加載的,不能被覆蓋/重寫

  • 若子類重寫了父類方法,就意味著子類里定義的方法徹底覆蓋了父類里的同名方法,系統將不可能把父類里的方法轉移到子類中;
  • 對于實例變量則不存在這樣的現象,即使子類里定義了與父類完全相同的實例變量,這個實例變量依然不可能覆蓋父類中定義的實例變量。
    eg:
  • class Base {int count = 10;public void display() {System. out. println(this. count);} } class Sub extends Base{int count = 20;public void display() { System. out. println(this. count);} }public class FieldMethodTest {public static void main(String[] args) {Sub s = new Sub();System. out. println(s.count); //20 聲明的是Sub,先找自己再找父類。s.display(); //20? display()重寫Base b = s; //多態(tài)性//==,對于引用數據類型,比較的是兩個引用數據類型變量的地址值是否相同System. out.println(b == s);//trueSystem. out . println(b. count); //10,多態(tài)性 屬性看左邊b.display(); //20 虛擬方法調用,調用父類,實際執(zhí)行子類(子類重寫了)//(成員變量/靜態(tài)方法)(屬性不具有多態(tài)性!)看左邊,方法看右邊} }

    對于多態(tài)的調用:成員變量/靜態(tài)方法看左邊, 方法看右邊。

    重載與重寫的區(qū)別:
    1.從編譯和運行的角度看:
    重載,是指允許存在多個同名方法,而這些方法的參數不同。編譯器根據方法不同的參數表,對同名方法的名稱做修飾。對于編譯器而言,這些同名方法就成了不同的方法。它們的調用地址在編譯期就綁定了。Java的重載是可以包括父類和子類的,即子類可以重載父類的同名不同參數的方法。
    所以:對于重載而言,在方法調用之前,編譯器就已經確定了所要調用的方法,這稱為 “早綁定” 或 “靜態(tài)綁定”;
    而對于多態(tài),只有等到方法調用的那一刻,解釋運行器才會確定所要調用的具體方法,這稱為 “晚綁定” 或 “動態(tài)綁定”。

    數組

    二維數組
    規(guī)定:二維數組分為外層數組的元素,內層數組的元素:

    int[][] arr = new int[4][3]; //外層數組元素:arr[0], arr[1]…… //內層數組元素:arr[0][0], arr[0][1]……

    數組元素的默認初始化值
    二維數組有兩種默認初始化:

    初始化方式一:int[][] arr = new int[4][3]; 初始化方式二:double[][] arr2 = new double[4][];
  • 針對于初始化方式一:int[][] arr = new int[4][3];
    外層元素的初始化值為:地址值
    內層元素的初始化值:與一維數組初始化情況相同

  • 針對于初始化方式二:double[][] arr2 = new double[4][];
    外層元素的初始化值為:null,指針指向的地址沒有值;
    內層元素的初始化值:不能調用,否則空指針異常,指針沒有初始化值代表指針沒有指向任何東西,為空。

  • 形參傳遞機制

    方法的形參的傳遞機制:值傳遞;

  • 如果參數是基本數據類型,此時實參賦給形參的是實參真實存儲的數據值;
  • 如果參數是引用數據類型,此時實參賦給形參的是實參存儲數據的地址值;
  • 匿名對象

  • 定義:我們創(chuàng)建的對象,沒有顯式的賦給一個變量名,為匿名對象;
  • 特征:匿名對象只能調用一次;
  • this關鍵

    使用情況

  • this可以用來修飾:屬性、方法、構造器
  • this修飾屬性和方法: this理解為:當前對象
  • this調用屬性/方法

  • 一般情況下:通過 " this.屬性 " / " this.方法 "的方式調用當前對象的屬性/方法,只不過通常情況下省略了this;
  • 特殊情況下:如果方法的形參和類的屬性重名,必須顯式的使用"this.變量"的方式,表明此變量是屬性,而非形參(若不使用this,則會默認就近原則調用形參);
    eg1:
  • public void eat(){System.out.println("吃飯");study(); //相當于 this.study(); 省略了this}public void study(){System.out.println("學習");}

    eg2:

    class Person{private int age;private String name;public void setName(String name){ //形參名和屬性名相同,會覆蓋成員變量// name = name; 就近原則this.name = name;} }

    this調用構造器

  • 在類的構造器中,可以顯式的使用"this(形參列表)“方式,調用本類中指定的"其他構造器”;
  • 構造器中不能通過this(形參列表)"方式調用自己;
  • 如果一個類中又n個構造器,則最多有n-1個構造器使用"this(形參列表)"方式;
  • 規(guī)定:"this(形參列表)"必須聲明在當前構造器的首行,“Call to ‘this()’ must be first statement in constructor body”;
  • 構造器內部:最多只能聲明一個"this(形參列表)",用來調用其他構造器,不能多次調用,不能循環(huán)調用;
  • public Person(){ //構造器0System.out.println("我是千萬萬個冗余代碼");//創(chuàng)建空參構造器,可以放置冗余代碼// 下面的構造器可以直接調用上面放置冗余的構造器}public Person(int age){ //構造器1this(); //調用構造器0this.age = age; / /如果正在構造器內調用,this可以理解為“當前正在創(chuàng)建的對象的屬性”}public Person(String name,int age){ //構造器2this(age);// 調用構造器1this.name = name;}

    總結

    以上是生活随笔為你收集整理的Java知识点汇总1的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。