国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java入門(mén)高頻考查基礎(chǔ)知識(shí)1

這篇具有很好參考價(jià)值的文章主要介紹了Java入門(mén)高頻考查基礎(chǔ)知識(shí)1。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

Java語(yǔ)言是一種廣泛應(yīng)用于軟件開(kāi)發(fā)的高級(jí)編程語(yǔ)言,最初由Sun Microsystems于1995年發(fā)布。

????????

以下是Java語(yǔ)言的一些特點(diǎn)和用途:

1. 跨平臺(tái)性:?Java是一種跨平臺(tái)的編程語(yǔ)言,一次編寫(xiě),到處運(yùn)行(Write Once, Run Anywhere,WORA)。這得益于Java虛擬機(jī)(JVM),它使得編譯后的Java程序可以在不同的操作系統(tǒng)上運(yùn)行,只需安裝相應(yīng)平臺(tái)的JVM。

2. 面向?qū)ο螅?/strong>?Java是一種面向?qū)ο蟮木幊陶Z(yǔ)言,它支持面向?qū)ο蟮木幊谭妒?,例如封裝、繼承、多態(tài)等。

3. 自動(dòng)內(nèi)存管理:?Java使用自動(dòng)內(nèi)存管理機(jī)制,開(kāi)發(fā)人員無(wú)需手動(dòng)管理內(nèi)存分配和釋放,而是通過(guò)垃圾回收器(Garbage Collector)來(lái)自動(dòng)管理對(duì)象的生命周期。

4. 強(qiáng)類(lèi)型:?Java是一種強(qiáng)類(lèi)型的語(yǔ)言,即要求在編譯期間就對(duì)變量進(jìn)行類(lèi)型檢查,避免了一些潛在的類(lèi)型錯(cuò)誤。

5. 豐富的類(lèi)庫(kù)支持:Java提供了強(qiáng)大且豐富的類(lèi)庫(kù),包括用于網(wǎng)絡(luò)、數(shù)據(jù)庫(kù)、圖形界面、多媒體處理等方面的API,能夠支持各種應(yīng)用程序的開(kāi)發(fā)。

6. 多線程支持:Java內(nèi)置了對(duì)多線程的支持,使用多線程可以實(shí)現(xiàn)并發(fā)執(zhí)行,提高程序的性能和響應(yīng)能力。

7. 應(yīng)用廣泛:?Java被廣泛應(yīng)用于Web開(kāi)發(fā)、企業(yè)級(jí)應(yīng)用開(kāi)發(fā)、移動(dòng)應(yīng)用開(kāi)發(fā)(Android平臺(tái))、大數(shù)據(jù)、云計(jì)算等各個(gè)領(lǐng)域。

????????

除了上述特點(diǎn)以外,Java還具有良好的安全性、穩(wěn)定性和擴(kuò)展性,因此備受開(kāi)發(fā)者和企業(yè)的青睞。Java語(yǔ)言的不斷更新和發(fā)展,使得它在現(xiàn)代軟件開(kāi)發(fā)中依然發(fā)揮著重要的作用。

????????

讓人前眼一亮提升表現(xiàn)分基礎(chǔ)是關(guān)鍵:

? ? 1. 理解基礎(chǔ)概念:確保你對(duì)Java的基本概念有清晰的理解,比如OOP原則(封裝、繼承、多態(tài)和抽象)、集合框架、異常處理、多線程等。

? ? 2.掌握語(yǔ)法和API:對(duì)Java語(yǔ)法要熟練掌握,熟悉標(biāo)準(zhǔn)庫(kù)的API,如常用的java.lang,java.util等包。

? ? 3.強(qiáng)化核心概念:數(shù)據(jù)結(jié)構(gòu)如數(shù)組、鏈表和圖,控制流程語(yǔ)句(if-else、switch、for、while、do-while),以及遞歸和迭代等。

? ? 4.了解JVM:了解Java虛擬機(jī)(JVM)的基本工作原理,比如類(lèi)加載器、內(nèi)存模型、垃圾收集器等。

? ? 5.編寫(xiě)干凈的代碼:練習(xí)編寫(xiě)清晰、高效的代碼。面試時(shí)寫(xiě)代碼要保持結(jié)構(gòu)清晰,變量命名合理。

? ? 6.調(diào)試技能:提升你的代碼調(diào)試技能,了解如何在Java程序中使用調(diào)試工具。

? ? 7.思路清晰:在解釋你的思路時(shí)要清晰和條理,即使遇到不會(huì)的問(wèn)題也不要慌張,可以嘗試從不同角度思考問(wèn)題。

? ? 8.詢(xún)問(wèn)和反饋:如果對(duì)面試官提出的問(wèn)題不理解,可以尋求澄清。完成問(wèn)題后,詢(xún)問(wèn)面試官對(duì)你解答的反饋。

? ? 9.保持更新:Java是一個(gè)不斷發(fā)展的語(yǔ)言,要關(guān)注其新的特性和更新,比如 Java 8 引入的lambda表達(dá)式和Stream API。

? ? 10.練習(xí)編程題:本文后面和后續(xù)更新相關(guān)的面試題來(lái)練習(xí)。

? ? 11.模擬面試:進(jìn)行模擬面試可以幫助你適應(yīng)面試環(huán)境和時(shí)間壓力,也是檢驗(yàn)自己哪些地方需要改進(jìn)的好方法。

? ? 12.實(shí)戰(zhàn)經(jīng)驗(yàn):如果有項(xiàng)目經(jīng)歷,要準(zhǔn)備好如何清晰地描述你的項(xiàng)目和其中你負(fù)責(zé)的部分。

目錄

一、Java中的基本數(shù)據(jù)類(lèi)型,它們分別占用字節(jié)

二、Java中的面向?qū)ο筇匦?/p>

三、Java中的訪問(wèn)修飾符

四、Java中的自動(dòng)裝箱和自動(dòng)拆箱

五、Java中的重載(overloading)和重寫(xiě)(overriding)

六、Java中的異常處理機(jī)制,Java中異常類(lèi)

七、請(qǐng)解釋一下Java中的final、finally、finalize各自的作用

八、String、StringBuilder和StringBuffer之間的區(qū)別

九、在Java中,==和equals()方法有什么區(qū)別?

十、ava深拷貝(deep copy)和淺拷貝(shallow copy)

十一、Java內(nèi)存泄漏情況

十二、Java多態(tài)特性


一、Java中的基本數(shù)據(jù)類(lèi)型,它們分別占用字節(jié)

Java 中的基本數(shù)據(jù)類(lèi)型包括以下幾種:

????????1. byte:占用 1 個(gè)字節(jié)(8 位)
????????2. short:占用 2 個(gè)字節(jié)(16 位)
????????3. int:占用 4 個(gè)字節(jié)(32 位)
????????4. long:占用 8 個(gè)字節(jié)(64 位)
????????5. float:占用 4 個(gè)字節(jié)(32 位)
????????6. double:占用 8 個(gè)字節(jié)(64 位)
????????7. char:占用 2 個(gè)字節(jié)(16 位)
????????8. boolean:理論上占用 1 個(gè)位
,但在實(shí)際中可能會(huì)占用更多的空間

需要注意的是,基本數(shù)據(jù)類(lèi)型在不同的平臺(tái)上所占的字節(jié)數(shù)可能會(huì)有所不同,因?yàn)檫@些大小是由 Java 語(yǔ)言規(guī)范規(guī)定的,而不是由底層硬件規(guī)定的。

????????

二、Java中的面向?qū)ο筇匦?/h2>

Java 中的面向?qū)ο筇匦灾饕ㄒ韵聨讉€(gè)方面:

????????1. 封裝(Encapsulation):封裝是指將數(shù)據(jù)和操作數(shù)據(jù)的方法捆綁在一起,以防止對(duì)數(shù)據(jù)的意外修改和濫用。在 Java 中,可以通過(guò)訪問(wèn)控制符(如 public、protected、private)來(lái)實(shí)現(xiàn)封裝,確保數(shù)據(jù)只能通過(guò)規(guī)定的方式進(jìn)行訪問(wèn)和修改。

????????2. 繼承(Inheritance):繼承是面向?qū)ο缶幊讨械闹匾拍?,它允許一個(gè)類(lèi)(子類(lèi))從另一個(gè)類(lèi)(父類(lèi))中繼承屬性和方法,并可以在此基礎(chǔ)上進(jìn)行擴(kuò)展和修改。通過(guò)繼承,可以實(shí)現(xiàn)代碼的重用,并建立類(lèi)之間的層次關(guān)系。

????????3. 多態(tài)(Polymorphism):多態(tài)是指同一操作作用于不同的對(duì)象上會(huì)有不同的行為。在 Java 中,多態(tài)性可以通過(guò)方法重載和方法重寫(xiě)來(lái)實(shí)現(xiàn)。方法重載是在同一個(gè)類(lèi)中,方法名相同但參數(shù)列表不同的多個(gè)方法;方法重寫(xiě)是子類(lèi)重寫(xiě)父類(lèi)的方法,實(shí)現(xiàn)不同的行為邏輯。

????????4. 抽象(Abstraction):抽象是指將具有共性的內(nèi)容提取出來(lái)形成類(lèi)的方式。在 Java 中,可以通過(guò)抽象類(lèi)(abstract class)和接口(interface)來(lái)實(shí)現(xiàn)抽象。抽象類(lèi)不能實(shí)例化,而接口只提供方法聲明而不包含方法的實(shí)現(xiàn),通過(guò)這兩種方式可以實(shí)現(xiàn)對(duì)業(yè)務(wù)邏輯的抽象描述。

????????

這些面向?qū)ο筇匦允沟?Java 編程更加靈活和易于維護(hù),同時(shí)也有助于提高代碼的可讀性和可重用性。

????????

三、Java中的訪問(wèn)修飾符

在Java中,訪問(wèn)修飾符用于控制類(lèi)、方法和變量的訪問(wèn)級(jí)別。Java中有四種訪問(wèn)修飾符:

  1. public:public修飾符是最為開(kāi)放的訪問(wèn)級(jí)別,被修飾的成員可以在任何地方被訪問(wèn),其他類(lèi)可以自由地訪問(wèn)、繼承和重寫(xiě)public成員。

  2. protected:protected修飾符對(duì)于當(dāng)前包內(nèi)的類(lèi)和子類(lèi)是可見(jiàn)的。外部包的類(lèi)無(wú)法訪問(wèn)protected成員,但如果子類(lèi)在不同的包中,可以訪問(wèn)其父類(lèi)的protected成員。

  3. default(默認(rèn)修飾符):如果沒(méi)有顯式指定訪問(wèn)修飾符,則默認(rèn)使用default修飾符。默認(rèn)修飾符對(duì)于同一包中的類(lèi)是可見(jiàn)的,但對(duì)于不同包中的類(lèi)是不可見(jiàn)的。

  4. private:private修飾符是最為限制的訪問(wèn)級(jí)別,被private修飾的成員只能在聲明它的類(lèi)中訪問(wèn)。其他類(lèi)無(wú)法直接訪問(wèn)、繼承或重寫(xiě)private成員。

下面是一些使用訪問(wèn)修飾符的例子:

public class MyClass {
    public int publicVariable;
    protected int protectedVariable;
    int defaultVariable;
    private int privateVariable;

    public void publicMethod() {
        // 公共方法的實(shí)現(xiàn)
    }

    protected void protectedMethod() {
        // 受保護(hù)方法的實(shí)現(xiàn)
    }

    void defaultMethod() {
        // 默認(rèn)方法的實(shí)現(xiàn)
    }

    private void privateMethod() {
        // 私有方法的實(shí)現(xiàn)
    }
}

盡管Java提供了這些訪問(wèn)修飾符,但良好的編程實(shí)踐建議限制對(duì)類(lèi)的直接訪問(wèn),使用public方法來(lái)訪問(wèn)和修改類(lèi)的狀態(tài)。這有助于封裝和維護(hù)代碼的穩(wěn)定性。同樣地,類(lèi)的成員變量也應(yīng)該盡可能地私有化,通過(guò)公共方法來(lái)操作它們。

????????

四、Java中的自動(dòng)裝箱和自動(dòng)拆箱

在Java中,自動(dòng)裝箱(Autoboxing)和自動(dòng)拆箱(Unboxing)是編譯器提供的功能,用于在基本數(shù)據(jù)類(lèi)型和對(duì)應(yīng)的包裝類(lèi)之間進(jìn)行自動(dòng)轉(zhuǎn)換。

自動(dòng)裝箱是指將基本數(shù)據(jù)類(lèi)型自動(dòng)轉(zhuǎn)換為對(duì)應(yīng)的包裝類(lèi)對(duì)象。例如,當(dāng)你將一個(gè)`int`類(lèi)型的值賦給一個(gè)`Integer`類(lèi)型的變量時(shí),編譯器會(huì)自動(dòng)將`int`類(lèi)型的值裝箱為`Integer`對(duì)象。這個(gè)過(guò)程是隱式的,不需要顯式地調(diào)用構(gòu)造函數(shù)。例如:

int number = 10;
Integer obj = number; // 自動(dòng)裝箱

自動(dòng)拆箱是指將包裝類(lèi)對(duì)象自動(dòng)轉(zhuǎn)換為對(duì)應(yīng)的基本數(shù)據(jù)類(lèi)型。例如,當(dāng)你將一個(gè)`Integer`對(duì)象賦給一個(gè)`int`類(lèi)型的變量時(shí),編譯器會(huì)自動(dòng)將`Integer`對(duì)象拆箱為`int`類(lèi)型的值。這個(gè)過(guò)程也是隱式的,不需要顯式地調(diào)用方法。例如:

Integer obj = 20;
int number = obj; // 自動(dòng)拆箱

自動(dòng)裝箱和自動(dòng)拆箱使得在基本數(shù)據(jù)類(lèi)型和包裝類(lèi)之間進(jìn)行轉(zhuǎn)換更加方便,可以使代碼更簡(jiǎn)潔易讀。然而,需要注意的是,自動(dòng)裝箱和自動(dòng)拆箱可能會(huì)帶來(lái)一些性能開(kāi)銷(xiāo),因?yàn)樗鼈兩婕暗筋l繁的對(duì)象創(chuàng)建和銷(xiāo)毀。在某些情況下,手動(dòng)進(jìn)行裝箱和拆箱操作可能會(huì)更加高效。

????????

五、Java中的重載(overloading)和重寫(xiě)(overriding)

在 Java 中,重載(overloading)和重寫(xiě)(overriding)是面向?qū)ο缶幊讨谐S玫膬煞N概念,它們分別用于描述在類(lèi)中的方法的多態(tài)性。

????????

重載(overloading)指的是在同一個(gè)類(lèi)中,可以存在多個(gè)同名的方法,但它們的參數(shù)列表不同。重載的方法可以有不同的返回類(lèi)型,但是參數(shù)列表必須不同。在調(diào)用重載的方法時(shí),編譯器會(huì)根據(jù)傳入的參數(shù)自動(dòng)匹配合適的方法。重載方法的返回類(lèi)型不影響方法的區(qū)分度,因此不能以返回類(lèi)型作為重載的條件。

舉個(gè)例子:

public class OverloadExample {
    public int add(int a, int b) {
        return a + b;
    }

    public double add(double a, double b) {
        return a + b;
    }
}

在上面的例子中,add 方法被重載了,分別接受不同類(lèi)型的參數(shù)。

????????

重寫(xiě)(overriding)指的是子類(lèi)重新定義了父類(lèi)中已有的方法,方法名、參數(shù)列表和返回類(lèi)型都相同。重寫(xiě)的方法可以訪問(wèn)父類(lèi)中定義的方法,但是不能重新定義父類(lèi)方法的訪問(wèn)權(quán)限。重寫(xiě)通常用于實(shí)現(xiàn)多態(tài)性,即父類(lèi)引用指向子類(lèi)對(duì)象時(shí),調(diào)用的方法是子類(lèi)中重寫(xiě)的方法。

舉個(gè)例子:

class Animal {
    public void makeSound() {
        System.out.println("Some sound");
    }
}

class Cat extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Meow");
    }
}

在上面的例子中,Cat 類(lèi)重寫(xiě)了 Animal 類(lèi)中的 makeSound 方法。

????????

總的來(lái)說(shuō),重載是一個(gè)編譯時(shí)的概念,而重寫(xiě)是一個(gè)運(yùn)行時(shí)的概念。重載是在同一個(gè)類(lèi)中多個(gè)方法之間的關(guān)系,而重寫(xiě)是子類(lèi)和父類(lèi)之間方法的關(guān)系。

????????

六、Java中的異常處理機(jī)制,Java中異常類(lèi)

在 Java 中,異常是指程序在運(yùn)行時(shí)可能發(fā)生的不正常情況,如錯(cuò)誤、錯(cuò)誤輸入或者是硬件故障等。Java 中的異常處理機(jī)制是通過(guò) try-catch-finally 塊和 throw 關(guān)鍵字來(lái)實(shí)現(xiàn)的。

????????

異常處理機(jī)制的基本概念如下:
????????1. `try-catch` 塊:在 `try` 塊中放置可能會(huì)引發(fā)異常的代碼,然后使用 `catch` 塊來(lái)捕獲并處理這些異常,防止程序中斷。
????????2. `throw` 關(guān)鍵字:用于在代碼中人工觸發(fā)異常,并將異常拋出到調(diào)用者處進(jìn)行處理。
????????3. `finally` 塊:無(wú)論是否發(fā)生了異常,`finally` 塊中的代碼始終會(huì)被執(zhí)行,通常用于資源清理等操作。

????????

Java 中的常見(jiàn)異常類(lèi)可以分為兩大類(lèi):Checked 異常和 Unchecked 異常。

????????1. Checked 異常:必須在代碼中顯式地進(jìn)行處理,否則程序?qū)o(wú)法通過(guò)編譯。這些異常通常表示程序中的一些邏輯錯(cuò)誤或外部環(huán)境的問(wèn)題,需要程序員在代碼中處理,以保證程序的穩(wěn)定性。常見(jiàn)的 Checked 異常包括 `IOException`、`FileNotFoundException`、`SQLException` 等。

????????2. Unchecked 異常:不強(qiáng)制要求進(jìn)行顯式地處理,通常由程序邏輯錯(cuò)誤引起,如空指針異常、數(shù)組越界異常等。通常情況下,Unchecked 異常是由 Java 虛擬機(jī)在運(yùn)行時(shí)拋出的。常見(jiàn)的 Unchecked 異常包括 `NullPointerException`、`IndexOutOfBoundsException`、`ArithmeticException` 等。

????????

在實(shí)際編程中,可以根據(jù)實(shí)際需求選擇合適的異常處理策略,并使用 try-catch 塊來(lái)捕獲并處理異常,保證程序的穩(wěn)定性和可靠性。

????????

七、請(qǐng)解釋一下Java中的final、finally、finalize各自的作用

在 Java 中,final、finally 和 finalize 是三個(gè)不同的關(guān)鍵字,具有不同的作用和用途。

1. final 關(guān)鍵字:final 關(guān)鍵字可以用來(lái)修飾類(lèi)、方法和變量。

? ?- 當(dāng) final 修飾一個(gè)類(lèi)時(shí),表示該類(lèi)不能被繼承,即為最終的類(lèi)。
? ?- 當(dāng) final 修飾一個(gè)方法時(shí),表示該方法不能被子類(lèi)重寫(xiě),即為最終的方法。
? ?- 當(dāng) final 修飾一個(gè)變量時(shí),表示該變量的值無(wú)法被修改,即為最終的常量。

? ?final 關(guān)鍵字的作用是保證被修飾的類(lèi)、方法或變量的穩(wěn)定性和不可變性,提供額外的安全性和效率。

????????

2. finally 關(guān)鍵字:finally 關(guān)鍵字主要用于異常處理,表示無(wú)論是否發(fā)生異常,finally 塊中的代碼都會(huì)被執(zhí)行。

? ?通常在 try-catch 塊后面跟著一個(gè) finally 塊,用于釋放資源、清理操作和確保關(guān)鍵代碼的執(zhí)行。

try {
    // 可能會(huì)拋出異常的代碼
} catch (Exception e) {
    // 異常處理邏輯
} finally {
    // 無(wú)論有無(wú)異常,都會(huì)執(zhí)行的代碼塊
}

????????

3. finalize 方法:finalize 方法是 Object 類(lèi)的一個(gè)方法,被稱(chēng)為垃圾回收器的“終結(jié)方法”。

? ?finalize 方法通常由垃圾回收器在回收對(duì)象之前調(diào)用,用于在對(duì)象銷(xiāo)毀之前進(jìn)行一些清理操作,例如關(guān)閉文件流或釋放系統(tǒng)資源等。但是,finalize 方法并不是直接銷(xiāo)毀對(duì)象,僅僅是提供了一個(gè)機(jī)會(huì)讓對(duì)象在被銷(xiāo)毀之前執(zhí)行一些必要的清理操作。

? ?在實(shí)際編程中,一般不直接使用 finalize 方法,而是使用 try-finally 塊或者其他合適的資源管理方式來(lái)確保資源的釋放。因?yàn)?finalize 方法的調(diào)用時(shí)間是不確定的,并且對(duì)性能可能會(huì)有一定的影響。

????????

綜上所述,final、finally 和 finalize 三者分別用于修飾和控制類(lèi)、方法和變量的特性,保證程序可靠性、資源釋放和內(nèi)存管理。

????????

八、String、StringBuilder和StringBuffer之間的區(qū)別

String、StringBuilder 和 StringBuffer 是 Java 中處理字符串的三個(gè)類(lèi),它們之間的區(qū)別主要涉及可變性、線程安全性和性能。

????????

1. String 類(lèi):
? ?- 不可變性:String 是不可變的,一旦創(chuàng)建,其值不能被修改。每次對(duì) String 進(jìn)行操作,例如拼接、替換等,都會(huì)創(chuàng)建一個(gè)新的 String 對(duì)象,原來(lái)的 String 對(duì)象會(huì)被丟棄。這種不可變性使得 String 在多線程環(huán)境下是線程安全的。
? ?- 線程安全性:String 是不可變的,因此可以共享,適用于多線程環(huán)境。
? ?- 性能:由于 String 的不可變性,頻繁的字符串拼接操作會(huì)導(dǎo)致創(chuàng)建大量的臨時(shí)對(duì)象,對(duì)內(nèi)存和性能會(huì)帶來(lái)一定的開(kāi)銷(xiāo)。

????????

2. StringBuilder 類(lèi):
? ?- 可變性:StringBuilder 是可變的,允許對(duì)字符串進(jìn)行修改和操作,而不會(huì)創(chuàng)建新的對(duì)象。適用于需要頻繁進(jìn)行字符串操作的場(chǎng)景。
? ?- 線程安全性:StringBuilder 不是線程安全的,不適用于多線程環(huán)境下。
? ?- 性能:由于 StringBuilder 的可變性,避免了大量臨時(shí)對(duì)象的創(chuàng)建,對(duì)于頻繁的字符串拼接操作具有更好的性能。

????????

3. StringBuffer 類(lèi):
? ?- 可變性:StringBuffer 也是可變的,類(lèi)似于 StringBuilder,允許對(duì)字符串進(jìn)行修改和操作,而不會(huì)創(chuàng)建新的對(duì)象。
? ?- 線程安全性:StringBuffer 是線程安全的,使用了同步機(jī)制,適用于多線程環(huán)境下。
? ?- 性能:由于 StringBuffer 的線程安全性,需要額外的同步開(kāi)銷(xiāo),性能上略低于 StringBuilder。

????????

根據(jù)具體的需求,可以選擇使用 String、StringBuilder 或 StringBuffer。如果字符串不需要進(jìn)行頻繁的修改,且在多線程環(huán)境下,建議使用 String 類(lèi);如果字符串需要頻繁的修改且在單線程環(huán)境下,建議使用 StringBuilder;如果在多線程環(huán)境下,建議使用 StringBuffer 來(lái)保證線程安全性。

????????

九、在Java中,==和equals()方法有什么區(qū)別?

在 Java 中,"==" 和 equals() 方法都用于比較對(duì)象,但是它們的作用和行為有所不同。

????????

? 1. "==" 運(yùn)算符:
? ?? ?- 對(duì)于基本數(shù)據(jù)類(lèi)型,"==" 用于比較值是否相等。
? ?? ?- 對(duì)于引用類(lèi)型,"==" 用于比較兩個(gè)對(duì)象的引用是否相等,即比較兩個(gè)對(duì)象在內(nèi)存中的地址是否相同。

????????

? 2. equals() 方法:
? ?? ?- equals() 方法是 Object 類(lèi)的一個(gè)方法,在 Java 中的任何對(duì)象都可以直接或間接調(diào)用該方法。
? ?? ?- 默認(rèn)情況下,equals() 方法比較兩個(gè)對(duì)象的引用是否相等,即判斷兩個(gè)對(duì)象是否指向同一塊內(nèi)存地址。
? ?? ?- 但是,可以根據(jù)需要在自定義的類(lèi)中重寫(xiě) equals() 方法,以實(shí)現(xiàn)自定義的對(duì)象比較邏輯,例如比較對(duì)象的字段值是否相等。

????????

需要注意的是,對(duì)于常見(jiàn)的 String 類(lèi)和封裝類(lèi)(如 Integer、Double 等),它們重寫(xiě)了 equals() 方法來(lái)比較對(duì)象的內(nèi)容而不是引用。

????????

總結(jié):
? ?- "==" 運(yùn)算符比較的是引用的地址,用于判斷兩個(gè)對(duì)象是否指向同一塊內(nèi)存。
? ?- equals() 方法用于比較對(duì)象的內(nèi)容,但默認(rèn)情況下比較的是引用是否相等,可以通過(guò)重寫(xiě) equals() 方法來(lái)自定義對(duì)象的比較邏輯。

????????

十、ava深拷貝(deep copy)和淺拷貝(shallow copy)

在Java中,深拷貝(Deep Copy)和淺拷貝(Shallow Copy)是用來(lái)描述對(duì)象拷貝的兩種不同方法,它們之間有以下區(qū)別:

? 1. 淺拷貝(Shallow Copy):
? ?? ?- 淺拷貝會(huì)創(chuàng)建一個(gè)新的對(duì)象,該對(duì)象和原始對(duì)象共享相同的引用。
? ?? ?- 對(duì)于引用類(lèi)型的成員變量,淺拷貝只會(huì)復(fù)制引用,而不會(huì)復(fù)制引用指向的對(duì)象本身。
? ?? ?- 因此,在淺拷貝中,對(duì)原始對(duì)象或拷貝對(duì)象的引用類(lèi)型成員變量進(jìn)行修改會(huì)影響到兩者,因?yàn)樗鼈冎赶蛲粋€(gè)對(duì)象。
? ?- 在Java中,可以通過(guò)實(shí)現(xiàn)`Cloneable`接口并重寫(xiě)`clone()`方法來(lái)實(shí)現(xiàn)淺拷貝。

? 2. 深拷貝(Deep Copy):
? ?? ?- 深拷貝會(huì)創(chuàng)建一個(gè)新的對(duì)象,該對(duì)象擁有獨(dú)立的引用和值。
? ?? ?- 在深拷貝中,不僅對(duì)對(duì)象進(jìn)行拷貝,還會(huì)對(duì)對(duì)象的引用類(lèi)型成員變量進(jìn)行遞歸拷貝。
? ?? ?- 因此,在深拷貝中,對(duì)原始對(duì)象或拷貝對(duì)象的引用類(lèi)型成員變量進(jìn)行修改不會(huì)相互影響,因?yàn)樗鼈冎赶虿煌膶?duì)象。
? ?? ?- 在Java中,可以通過(guò)實(shí)現(xiàn)`Serializable`接口或使用第三方庫(kù)(例如`Gson`、`Jackson`等)來(lái)實(shí)現(xiàn)深拷貝。

需要注意的是,默認(rèn)的對(duì)象拷貝操作是淺拷貝,即對(duì)于簡(jiǎn)單類(lèi)型的成員變量會(huì)進(jìn)行復(fù)制,而對(duì)于引用類(lèi)型的成員變量只會(huì)復(fù)制引用。如果需要實(shí)現(xiàn)深拷貝,開(kāi)發(fā)人員需要顯式地處理引用類(lèi)型的成員變量,以確保其也能被正確地拷貝。

在實(shí)際開(kāi)發(fā)中,需要根據(jù)具體的需求來(lái)選擇使用淺拷貝還是深拷貝,以確保對(duì)象的拷貝行為符合預(yù)期。

????????

十一、Java內(nèi)存泄漏情況

Java內(nèi)存泄漏是指在程序運(yùn)行過(guò)程中,由于無(wú)法釋放不再使用的對(duì)象所占用的內(nèi)存空間,導(dǎo)致系統(tǒng)的可用內(nèi)存持續(xù)減少,最終出現(xiàn)內(nèi)存溢出或性能下降的情況。以下是導(dǎo)致Java內(nèi)存泄漏的常見(jiàn)情況:

  1. 未及時(shí)釋放對(duì)象引用:當(dāng)一個(gè)對(duì)象不再需要時(shí),如果程序員沒(méi)有及時(shí)將其引用置為null,那么這個(gè)對(duì)象將無(wú)法被垃圾回收器回收,造成內(nèi)存泄漏。
  2. 集合類(lèi)持有對(duì)象:如果集合類(lèi)(如ArrayList、HashMap等)持有對(duì)象的引用,并且程序員忘記從集合中移除對(duì)象,那么這些對(duì)象將一直被集合持有,無(wú)法被釋放。
  3. 靜態(tài)集合:靜態(tài)集合中的對(duì)象會(huì)一直存在于內(nèi)存中,如果程序員忘記從靜態(tài)集合中移除對(duì)象,就會(huì)導(dǎo)致內(nèi)存泄漏。
  4. 監(jiān)聽(tīng)器和回調(diào):注冊(cè)的監(jiān)聽(tīng)器或回調(diào)未被及時(shí)注銷(xiāo),導(dǎo)致持有對(duì)象的引用而無(wú)法被釋放,造成內(nèi)存泄漏。
  5. 線程:線程的使用也容易導(dǎo)致內(nèi)存泄漏,如果線程未正確終止或無(wú)法正常釋放,會(huì)導(dǎo)致線程持有的對(duì)象無(wú)法被釋放。
  6. 單例模式:若單例對(duì)象持有了外部對(duì)象的引用,并且長(zhǎng)時(shí)間不釋放,也可能導(dǎo)致內(nèi)存泄漏。
  7. 使用緩存:緩存中的對(duì)象如果長(zhǎng)時(shí)間保持在緩存中且未設(shè)置合適的過(guò)期策略,也容易導(dǎo)致內(nèi)存泄漏。

為了避免Java內(nèi)存泄漏,開(kāi)發(fā)人員應(yīng)該注意及時(shí)釋放不再使用的對(duì)象引用,避免無(wú)意識(shí)地持有對(duì)象的引用,合理管理集合、監(jiān)聽(tīng)器、線程等對(duì)象的生命周期,并注意內(nèi)存資源的合理利用。此外,可以使用一些內(nèi)存分析工具(如Java VisualVM、YourKit Java Profiler等)來(lái)幫助發(fā)現(xiàn)和解決內(nèi)存泄漏問(wèn)題。

????????

十二、Java多態(tài)特性

Java多態(tài)性(Polymorphism)是面向?qū)ο缶幊讨械囊粋€(gè)重要概念,它允許一個(gè)對(duì)象具有多種形態(tài)。具體來(lái)說(shuō),Java多態(tài)性有兩種形式:靜態(tài)多態(tài)性(編譯時(shí)多態(tài)性)和動(dòng)態(tài)多態(tài)性(運(yùn)行時(shí)多態(tài)性)。

? 1. 靜態(tài)多態(tài)性(編譯時(shí)多態(tài)性):?靜態(tài)多態(tài)性是通過(guò)方法重載(Overloading)實(shí)現(xiàn)的,它允許我們?cè)谕粋€(gè)類(lèi)中定義多個(gè)方法,具有相同的名稱(chēng)但參數(shù)列表不同。在編譯時(shí),編譯器能夠根據(jù)方法調(diào)用的參數(shù)類(lèi)型選擇調(diào)用合適的方法。例如:

public class Calculation {
    public int add(int a, int b) {
        return a + b;
    }
    
    public float add(float a, float b) {
        return a + b;
    }
}

在上述代碼中,Calculation類(lèi)中定義了兩個(gè)名為add的方法,分別接受兩個(gè)整數(shù)和兩個(gè)浮點(diǎn)數(shù)作為參數(shù)。在編譯時(shí),通過(guò)方法調(diào)用的參數(shù)類(lèi)型來(lái)確定調(diào)用哪個(gè)方法。

?????????

? 2.?動(dòng)態(tài)多態(tài)性(運(yùn)行時(shí)多態(tài)性):?動(dòng)態(tài)多態(tài)性是通過(guò)方法重寫(xiě)(Overriding)和繼承實(shí)現(xiàn)的。當(dāng)一個(gè)子類(lèi)繼承自父類(lèi)并重寫(xiě)了父類(lèi)的方法后,可以在運(yùn)行時(shí)根據(jù)實(shí)際的對(duì)象類(lèi)型來(lái)調(diào)用該方法。這樣,即使引用變量的類(lèi)型是父類(lèi),當(dāng)實(shí)際的對(duì)象是子類(lèi)對(duì)象時(shí),調(diào)用的是子類(lèi)的方法。例如:

public class Animal {
    public void makeSound() {
        System.out.println("Animal is making a sound");
    }
}

public class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Dog is barking");
    }
}

public class Cat extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Cat is meowing");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal animal1 = new Dog();
        Animal animal2 = new Cat();
        
        animal1.makeSound(); // 輸出:"Dog is barking"
        animal2.makeSound(); // 輸出:"Cat is meowing"
    }
}

在上述代碼中,Animal類(lèi)是父類(lèi),DogCat類(lèi)是子類(lèi),它們都重寫(xiě)了makeSound方法。在Main類(lèi)中,創(chuàng)建了一個(gè)Animal類(lèi)型的引用變量animal1animal2,分別指向DogCat實(shí)例。在運(yùn)行時(shí),根據(jù)實(shí)際的對(duì)象類(lèi)型,調(diào)用相應(yīng)子類(lèi)重寫(xiě)的方法。

????????

Java多態(tài)性使得代碼更加靈活和可擴(kuò)展,提高了代碼的重用性和可維護(hù)性。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-824844.html

到了這里,關(guān)于Java入門(mén)高頻考查基礎(chǔ)知識(shí)1的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Java入門(mén)基礎(chǔ)知識(shí)

    Java入門(mén)基礎(chǔ)知識(shí)

    JDK是Java工具開(kāi)發(fā)包,包含了JVM(程序運(yùn)行環(huán)境),核心類(lèi)庫(kù)(直接應(yīng)用即可),開(kāi)發(fā)工具(Javac,java,jdb,jhat…) JRE是Java運(yùn)行環(huán)境,包含了JVM,核心類(lèi)庫(kù),運(yùn)行工具 JDK包含了JRE,JRE包含了jvm 全部小寫(xiě)(有特定含義的英文字符) class 表示一個(gè)類(lèi) 整數(shù)類(lèi)型 小數(shù)類(lèi)型 字符串類(lèi)型 :只用\\\"雙引

    2024年02月09日
    瀏覽(92)
  • Java基礎(chǔ)入門(mén)知識(shí)

    以下是學(xué)習(xí)java必備的知識(shí) 目錄 前言 一、Java入門(mén) 二、基本數(shù)據(jù)類(lèi)型與數(shù)組 標(biāo)識(shí)符與 2. 基本數(shù)據(jù)類(lèi)型 3. 類(lèi)型轉(zhuǎn)換運(yùn)算 4. 運(yùn)算符 5. 數(shù)組 6.控制結(jié)構(gòu)(與c使用一致) 總結(jié) Java語(yǔ)言是面向?qū)ο缶幊陶Z(yǔ)言,編寫(xiě)的軟件與平臺(tái)無(wú)關(guān)。具有語(yǔ)法簡(jiǎn)單、面向?qū)ο蟆⒎€(wěn)定、與平臺(tái)無(wú)

    2024年02月16日
    瀏覽(93)
  • Java基礎(chǔ)知識(shí)篇——Java基本介紹

    Java基礎(chǔ)知識(shí)篇——Java基本介紹

    Java 是 Sun Microsystems 于 1995 年首次發(fā)布的一種 編程語(yǔ)言 和計(jì)算平臺(tái)。編程語(yǔ)言還是比較好理解的,什么是 計(jì)算平臺(tái) 呢? 計(jì)算平臺(tái)是電腦中運(yùn)行應(yīng)用程序(軟件的環(huán)境),包括硬件環(huán)境和軟件環(huán)境。一般系統(tǒng)平臺(tái)包括一臺(tái)電腦的硬件體系結(jié)構(gòu),操作系統(tǒng)、運(yùn)行時(shí)庫(kù)。 Java 是快

    2024年03月11日
    瀏覽(95)
  • 【Java基礎(chǔ)】Java容器相關(guān)知識(shí)小結(jié)

    目錄 0. 前言 1. Collection接口 1.1. List接口 1.1.1. ArrayList 1.1.2. LinkedList 1.1.3. Vector 1.1.4. Stack 1.2. Set接口 1.2.1. HashSet 1.2.2. LinkedHashSet 1.2.3. TreeSet 1.3. Queue接口 1.3.1. PriorityQueue 1.3.2. LinkedList 2. Map接口 2.1. HashMap 2.2. TreeMap 2.3. LinkedHashMap 3.常見(jiàn)用法——增/刪/改/查/排序/容量 后記 參考文章

    2024年02月05日
    瀏覽(92)
  • java基礎(chǔ)知識(shí)

    java基礎(chǔ)知識(shí)

    java的數(shù)據(jù)結(jié)構(gòu)有哪些? 線性結(jié)構(gòu):數(shù)組、鏈表、哈希表;隊(duì)列、棧 非線性結(jié)構(gòu)有:堆、樹(shù)(二叉樹(shù)、B樹(shù)、B+樹(shù)、紅黑樹(shù)) 圖 常用的集合類(lèi)有List集合,Set集合,Map集合,其中List集合與Set集合繼承了Collection接口, List 有序可重復(fù)的集合接口,繼承自Collection接口,表示元素按照插入順

    2024年02月06日
    瀏覽(99)
  • java基礎(chǔ)知識(shí)梳理

    雖然已經(jīng)在實(shí)際工作中與java打交道5年之多,但是一直沒(méi)系統(tǒng)地對(duì)java這門(mén)語(yǔ)言進(jìn)行梳理和總結(jié),掌握的知識(shí)也比較零散。恰好利用這段時(shí)間重新認(rèn)識(shí)下java,并對(duì)一些常見(jiàn)的語(yǔ)法和知識(shí)點(diǎn)做個(gè)總結(jié)與回顧,一方面為了加深印象,方便后面查閱,一方面為了學(xué)好java打下基礎(chǔ)。拉

    2024年02月04日
    瀏覽(103)
  • java基礎(chǔ)知識(shí)二

    1.1、基本概念 類(lèi)是具有相同屬性和行為的一組對(duì)象的 集合 ,包含數(shù)據(jù)和操作,數(shù)據(jù)被稱(chēng)為 成員變量 ,操作被稱(chēng)為方法 對(duì)象是類(lèi)的實(shí)例,即 對(duì)象 = 數(shù)據(jù) + 行為 或者 對(duì)象 = 狀態(tài) + 操作 類(lèi)抽象的、概念上的定義,對(duì)象是一個(gè)具體的、實(shí)際存在的個(gè)體,即一個(gè)實(shí)例 1.2、類(lèi)的特

    2024年02月07日
    瀏覽(97)
  • Java基礎(chǔ)知識(shí)篇02——Java基本語(yǔ)法

    Java基礎(chǔ)知識(shí)篇02——Java基本語(yǔ)法

    定義: 就是用了保存數(shù)據(jù)的一個(gè)類(lèi)型,一種數(shù)據(jù)類(lèi)型,只能保存該類(lèi)型數(shù)據(jù)值 作用: 只有了解數(shù)據(jù)類(lèi)型,才能選擇合適的類(lèi)型存放數(shù)據(jù),才能更好的利用計(jì)算機(jī)硬件資源(內(nèi)存和硬盤(pán)等)。 不同的數(shù)據(jù)類(lèi)型存放數(shù)據(jù)大小是不同的。 數(shù)據(jù)類(lèi)型的使用方式就是用來(lái)聲明一個(gè)變量,

    2024年03月15日
    瀏覽(96)
  • Java GC基礎(chǔ)知識(shí)

    在對(duì)象中添加一個(gè) 引用計(jì)數(shù)器 ,每當(dāng)有一個(gè)地方引用它時(shí),計(jì)數(shù)器值就加一;當(dāng)引用失效時(shí),計(jì)數(shù)器值就減一;任何時(shí)刻計(jì)數(shù)器為零的對(duì)象就是不可 能再被使用的 引用計(jì)數(shù)法的缺陷: 如果使用 引用計(jì)數(shù)法 , objA 和 objB 除互相引用外沒(méi)有任何其他引用,但是無(wú)法被回收。

    2023年04月13日
    瀏覽(89)
  • Java中常量基礎(chǔ)知識(shí)

    Java中常量基礎(chǔ)知識(shí)

    什么是字面常量? 拿第一行輸出語(yǔ)句來(lái)說(shuō),這行代碼輸出了 “hello” 這個(gè)字符串,無(wú)論何時(shí)何地運(yùn)行程序,輸出的這個(gè)字符串都不會(huì)變,這就是字面常量。 定義:常量即程序運(yùn)行期間,固定不變的量稱(chēng)為常量。 package ht; public class ht1 { ? ?public static void main(String[] args) { ? ?

    2024年02月06日
    瀏覽(87)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包