最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Java中包的作用以及使用、訪問(wèn)權(quán)限、單例/多例設(shè)計(jì)模式、枚舉和異常附帶相關(guān)面試題

2023-08-04 17:27 作者:Alphamilk  | 我要投稿

1.包的作用以及使用

包的本質(zhì)其實(shí)是目錄,一個(gè)項(xiàng)目如果都在同一個(gè)目錄下,那么如果項(xiàng)目上有多個(gè)人在開(kāi)發(fā),并且創(chuàng)建的類名是一樣的就會(huì)產(chǎn)生沖突,并且如果一個(gè)項(xiàng)目都在一個(gè)包里進(jìn)行那么也不適合模塊化的開(kāi)發(fā)

使用: 包可以通過(guò)插入(import)進(jìn)行使用其他包內(nèi)的類,但是注意如果調(diào)用別的包里的類名字和你自己包里面類名字一樣的話,必須要詳細(xì)的類,即包名加類名

導(dǎo)入方法:import.類? 或者import.*(代表自動(dòng)導(dǎo)入)

舉例:我在Example101包和Example102的包中都設(shè)置了主類為javaDemo,現(xiàn)在要調(diào)用到兩個(gè)主類

?靜態(tài)導(dǎo)入:用static導(dǎo)入則如同放在在主方法上無(wú)需進(jìn)行實(shí)例化,如下圖可以直接調(diào)用想要用的方法

2.系統(tǒng)常用包:
??? java.lang 包:這是 Java 的核心包,提供了Java語(yǔ)言的基本類和常用工具類。例如,String、Object、System、Math等類就位于該包中。
??? java.util 包:這個(gè)包提供了 Java 中許多實(shí)用的工具類,包括集合類(如List、Set、Map等)、日期和時(shí)間類、隨機(jī)數(shù)生成器、排序算法等。
??? java.io 包:這個(gè)包提供了進(jìn)行輸入輸出操作的類和接口,用于讀寫文件、網(wǎng)絡(luò)通信、序列化等操作。例如,F(xiàn)ile、InputStream、OutputStream、Reader、Writer等都是該包中的常見(jiàn)類。
??? java.net 包:這個(gè)包提供了與網(wǎng)絡(luò)通信相關(guān)的類和接口,用于創(chuàng)建和管理網(wǎng)絡(luò)連接,進(jìn)行網(wǎng)絡(luò)編程等。例如,Socket、URL、URLConnection等類可以用于與服務(wù)器進(jìn)行通信。
? java.sql 包:這個(gè)包提供了與數(shù)據(jù)庫(kù)交互的類和接口,用于執(zhí)行數(shù)據(jù)庫(kù)操作、連接數(shù)據(jù)庫(kù)等。例如,Connection、Statement、ResultSet等類可以用于執(zhí)行 SQL 查詢和更新。
? java.awt 和 javax.swing 包:這些包提供了 Java 的圖形用戶界面(GUI)組件和相關(guān)類,用于創(chuàng)建圖形界面應(yīng)用程序。例如,F(xiàn)rame、Button、Label等類用于創(chuàng)建窗口和控件。
?? java.nio 包:這個(gè)包提供了新的非阻塞 I/O 進(jìn)行文件和網(wǎng)絡(luò)操作。它引入了通道(Channel)和緩沖區(qū)(Buffer)的概念,提供更高效和可擴(kuò)展的 I/O 操作。

2.訪問(wèn)權(quán)限與修飾符

訪問(wèn)的權(quán)限有多個(gè)分別是private public default protected

以下列表展示其四者的對(duì)比:

  • private:僅類內(nèi)部可訪問(wèn)。

  • 默認(rèn)(無(wú)修飾符):同一包內(nèi)可訪問(wèn)。

  • protected:同一包內(nèi)及子類可訪問(wèn),不同包內(nèi)的子類也可以訪問(wèn)。

  • public:所有地方都可以訪問(wèn),沒(méi)有限制。

static與final

static 關(guān)鍵字用于表示靜態(tài)成員,包括靜態(tài)變量和靜態(tài)方法。靜態(tài)成員屬于類本身,而不是實(shí)例化后的對(duì)象。可以通過(guò)類名直接訪問(wèn)靜態(tài)成員。

final 關(guān)鍵字用于聲明常量、防止方法被重寫或類被繼承。對(duì)于變量,final 表示該變量的值不可更改;對(duì)于方法,final 表示該方法不能被子類重寫;對(duì)于類,final 表示該類不能被繼承。

?面試題:final 在 java 中有什么作用?

(1)用來(lái)修飾一個(gè)引用

???? 如果引用為基本數(shù)據(jù)類型,則該引用為常量,該值無(wú)法修改;
???? 如果引用為引用數(shù)據(jù)類型,比如對(duì)象、數(shù)組,則該對(duì)象、數(shù)組本身可以修改,但指向該對(duì)象或數(shù)組的地址的引用不能修改。
???? 如果引用時(shí)類的成員變量,則必須當(dāng)場(chǎng)賦值,否則編譯會(huì)報(bào)錯(cuò)。

(2)用來(lái)修飾一個(gè)方法

當(dāng)使用final修飾方法時(shí),這個(gè)方法將成為最終方法,無(wú)法被子類重寫。但是,該方法仍然可以被繼承。

(3)用來(lái)修飾類

當(dāng)用final修改類時(shí),該類成為最終類,無(wú)法被繼承。

?比如常用的String類就是最終類。

面試題:final、finally、finalize 有什么區(qū)別?

final可以修飾類,變量,方法,修飾的類不能被繼承,修飾的變量不能重新賦值,修飾的方法不能被重寫

finally用于拋異常,finally代碼塊內(nèi)語(yǔ)句無(wú)論是否發(fā)生異常,都會(huì)在執(zhí)行finally,常用于一些流的關(guān)閉。

finalize方法用于垃圾回收。

一般情況下不需要我們實(shí)現(xiàn)finalize,當(dāng)對(duì)象被回收的時(shí)候需要釋放一些資源,比如socket鏈接,在對(duì)象初始化時(shí)創(chuàng)建,整個(gè)生命周期內(nèi)有效,那么需要實(shí)現(xiàn)finalize方法,關(guān)閉這個(gè)鏈接。

但是當(dāng)調(diào)用finalize方法后,并不意味著gc會(huì)立即回收該對(duì)象,所以有可能真正調(diào)用的時(shí)候,對(duì)象又不需要回收了,然后到了真正要回收的時(shí)候,因?yàn)橹罢{(diào)用過(guò)一次,這次又不會(huì)調(diào)用了,產(chǎn)生問(wèn)題。所以,不推薦使用finalize方法。



2.單例設(shè)計(jì)模式

所謂單例,就是指類只能實(shí)例化一個(gè)對(duì)象,比如一個(gè)企業(yè)的CEO,創(chuàng)建其相應(yīng)的類后,因?yàn)橐粋€(gè)公司一般只有一個(gè)CEO,所以不能實(shí)例化多個(gè),防止其他程序員錯(cuò)誤創(chuàng)建。

如何實(shí)現(xiàn)單例的設(shè)計(jì)模式呢?其實(shí)很簡(jiǎn)單,首先創(chuàng)建一個(gè)對(duì)象操作過(guò)程如下

Example ex1 = new Example(傳參)

那么就需要在外部(主方法)讓其沒(méi)辦法實(shí)現(xiàn)這個(gè)操作,只需要

單例設(shè)計(jì)模式分為兩類,餓漢模式懶漢模式

區(qū)分在于其實(shí)例化的時(shí)機(jī)

1.餓漢模式

是在類加載的時(shí)候就進(jìn)行實(shí)例化,意味著程序一開(kāi)始就實(shí)例化對(duì)象

案例代碼:

?2.懶漢模式

是指在調(diào)用類時(shí)候,才開(kāi)始進(jìn)行判斷是否有唯一一個(gè)對(duì)象,若沒(méi)有則創(chuàng)建唯一的對(duì)象,與餓漢模式相比,在程序開(kāi)始時(shí)候并不會(huì)創(chuàng)建對(duì)象,只有要用到的時(shí)候才開(kāi)始創(chuàng)建。其好處是可以減少程序開(kāi)始運(yùn)行時(shí)候的消耗

案例代碼:


3.多例子設(shè)計(jì)模式

剛剛講述的單例設(shè)計(jì)模式是指只有一個(gè)崗位所以只能實(shí)例化一個(gè)對(duì)象,而多例設(shè)計(jì)模式就能理解是多個(gè)對(duì)象,比如紅綠燈,只有三個(gè)對(duì)象,紅色,綠色,黃色。其實(shí)現(xiàn)過(guò)程其實(shí)和單例是差不多的。就是將public static final = new 對(duì)象1? 復(fù)制粘貼 成為

public static final = new 對(duì)象1

public static final = new 對(duì)象2

public static final = new 對(duì)象3

記得私有化構(gòu)造方法防止其他人創(chuàng)建新的對(duì)象


枚舉類:

枚舉其實(shí)就是多例化的設(shè)計(jì)模式,枚舉出有多少個(gè)對(duì)象,但是枚舉也有著很多獨(dú)特的優(yōu)勢(shì),比如說(shuō)創(chuàng)造一個(gè)紅綠燈,三個(gè)對(duì)象分別是RED GREEN YELLOW 那么可以在其類的內(nèi)部對(duì)其進(jìn)行switch判斷比如說(shuō)switch(c)case RED 。。。print(“當(dāng)前為紅燈”);一般的對(duì)象就沒(méi)辦法直接判斷

如下枚舉類的實(shí)用舉例:

枚舉類的實(shí)現(xiàn)接口 枚舉類實(shí)現(xiàn)抽象方法

枚舉類的常用方法:

  • name():返回枚舉常量的名稱。

  • ordinal():返回枚舉常量在枚舉聲明中的位置(從 0 開(kāi)始計(jì)數(shù))。

  • valueOf(String name):返回具有指定名稱的枚舉常量。如果找不到指定名稱的枚舉常量,將拋出 IllegalArgumentException 異常。

  • values():返回包含所有枚舉常量的數(shù)組。

  • compareTo(E other):比較枚舉常量和指定對(duì)象的順序。如果指定對(duì)象為枚舉常量,則返回兩者在枚舉聲明中位置的差值;如果指定對(duì)象為 null 或不是同一枚舉類的實(shí)例,則拋出 ClassCastException 異常。

  • equals(Object other):檢查枚舉常量與指定對(duì)象是否相等。

  • hashCode():返回枚舉常量的哈希碼。

  • toString():返回枚舉常量的字符串表示。

6.異常

1.一般程序在編輯時(shí)候可能不會(huì)出現(xiàn)問(wèn)題,但是運(yùn)行時(shí)候就有可能會(huì)出現(xiàn)很多問(wèn)題,比如說(shuō)除法 number / number1 ,大家都知道number1 即被除數(shù)不能為0 ,但是在寫這個(gè)的時(shí)候可能沒(méi)有留意也不會(huì)彈出異常,但是在運(yùn)行時(shí)候就會(huì)出現(xiàn)異常了。一旦產(chǎn)生異常又沒(méi)有解決措施,那么問(wèn)題就會(huì)給虛擬機(jī)jvm處理,jvm就會(huì)先打印錯(cuò)誤信息后進(jìn)行中斷

2.異常的關(guān)鍵字 try catch finnally 與方法printStackTrace()

上面可以知道異常如果不做任何措施的話就會(huì)中斷,但是很多程序一旦運(yùn)行就盡量不能終止,否則會(huì)給公司帶來(lái)難以想象的損失,因此就需要用到try catch 與finnally 關(guān)鍵字。先解釋以下三者的功能

try:嘗試運(yùn)行這段代碼并查看是否會(huì)出現(xiàn)異常,如果嘗試的過(guò)程出現(xiàn)異常,則立即生成一個(gè)對(duì)應(yīng)異常的對(duì)象。

catch:對(duì)異常進(jìn)行判斷,因?yàn)楫惓R灿泻芏喾N類,比如數(shù)組可能越界異常,數(shù)學(xué)計(jì)算可能出現(xiàn)異常。還有很多種類異常那么對(duì)應(yīng)的處理也不同,catch就是用來(lái)捕捉try產(chǎn)生異常對(duì)象的比較,比如catch(ArithmeticException e)表明捕捉數(shù)學(xué)計(jì)算異常,如果匹配成功那么就執(zhí)行catch內(nèi)的操作否則跳過(guò)。

finally:不管會(huì)不會(huì)出現(xiàn)異常都會(huì)執(zhí)行里面的操作

printStackTrace():打印錯(cuò)誤信息與錯(cuò)誤在第幾行

案例代碼:

面試題 :try-catch-finally 中,如果 catch 中 return 了,finally 還會(huì)執(zhí)行嗎?

會(huì)的

2.異常的種類

在 Java 中,異常是以類的形式存在的,它們都是 Throwable 類及其子類的實(shí)例。Throwable 是異常類的根類,它有兩個(gè)直接的子類:Error 和 Exception。

  1. Error:

    • Error 表示程序中的嚴(yán)重問(wèn)題,通常由虛擬機(jī)拋出,并且在大多數(shù)情況下不應(yīng)該被程序員顯示捕獲。

    • 一旦 Error 被拋出,程序就無(wú)法恢復(fù),并終止執(zhí)行。

    • 常見(jiàn)的 Error 類包括:VirtualMachineError、OutOfMemoryError、StackOverflowError 等。

  2. Exception:

    • 異常是表示非致命性問(wèn)題或意外情況的類。

    • Exception 又分為兩種類型:受檢異常(Checked Exception)和非受檢異常(Unchecked Exception)。

?面試題:常見(jiàn)的異常類有哪些?

  • NullPointerException:空指針異常;

  • SQLException:數(shù)據(jù)庫(kù)相關(guān)的異常;

  • IndexOutOfBoundsException:數(shù)組下角標(biāo)越界異常;

  • FileNotFoundException:打開(kāi)文件失敗時(shí)拋出;

  • IOException:當(dāng)發(fā)生某種IO異常時(shí)拋出;

  • ClassCastException:當(dāng)試圖將對(duì)象強(qiáng)制轉(zhuǎn)換為不是實(shí)例的子類時(shí),拋出此異常;

  • NoSuchMethodException:無(wú)法找到某一方法時(shí),拋出;

  • ArrayStoreException:試圖將錯(cuò)誤類型的對(duì)象存儲(chǔ)到一個(gè)對(duì)象數(shù)組時(shí)拋出的異常;

  • NumberFormatException:當(dāng)試圖將字符串轉(zhuǎn)換成數(shù)字時(shí),失敗了,拋出;

  • IllegalArgumentException 拋出的異常表明向方法傳遞了一個(gè)不合法或不正確的參數(shù)。

  • ArithmeticException當(dāng)出現(xiàn)異常的運(yùn)算條件時(shí),拋出此異常。例如,一個(gè)整數(shù)“除以零”時(shí),拋出此類的一個(gè)實(shí)例。

將異常拋給其他人去處理,可能會(huì)問(wèn)有了try catch 明明可以在其類內(nèi)部就將異常進(jìn)行處理了,為什么還要進(jìn)行拋給外面的人去解決呢?其實(shí)很好理解,比如在工作時(shí)候腿給摔斷了,那么應(yīng)該由誰(shuí)處理?當(dāng)然是公司處理,讓公司解決你出現(xiàn)的問(wèn)題。

異常拋出關(guān)鍵字 throw

面試題? throw 和 throws 的區(qū)別?

(1)throw

作用在方法內(nèi),表示拋出具體異常,由方法體內(nèi)的語(yǔ)句處理;
一定拋出了異常;

(2)throws

作用在方法的聲明上,表示拋出異常,由調(diào)用者來(lái)進(jìn)行異常處理;
可能出現(xiàn)異常,不一定會(huì)發(fā)生異常;

異常的流程:

自定義異常:

雖然有很多很多種的異常類但是有很多并不算是正常執(zhí)行,比如數(shù)據(jù)過(guò)于離譜的這種就應(yīng)該觸發(fā)異常。下面我舉一個(gè)例子,吃包子,一般吃幾個(gè)包子沒(méi)問(wèn)題,但是如果有人輸入自己吃的包子過(guò)于多了那就不對(duì)勁,可以直接觸發(fā)我們自己定義的異常

案例:

RuntimeException與Exception區(qū)別

在 Java 中,異常分為兩種類型:RuntimeException 和 Exception。它們之間的區(qū)別如下:

  1. RuntimeException:

    • RuntimeException 是 Exception 的子類。

    • RuntimeException 是非受檢異常(Unchecked Exception),在編譯時(shí)不強(qiáng)制要求進(jìn)行異常處理。

    • RuntimeException 通常表示程序本身的錯(cuò)誤或邏輯錯(cuò)誤。

    • 常見(jiàn)的 RuntimeException 包括:NullPointerException、IllegalArgumentException、ArithmeticException 等。

  2. Exception:

    • Exception 是所有異常類的父類,包括 RuntimeException 在內(nèi)。

    • Exception 的直接子類中有受檢異常(Checked Exception)和非受檢異常(Unchecked Exception)。

    • 受檢異常是在編譯時(shí)強(qiáng)制要求處理的異常。方法必須聲明可能拋出的受檢異常,并通過(guò) try-catch 塊或 throws 子句進(jìn)行處理,否則程序?qū)o(wú)法通過(guò)編譯。

    • 非受檢異常在編譯時(shí)不要求強(qiáng)制處理,但仍然可以選擇捕獲或拋出。

    • 常見(jiàn)的受檢異常包括:IOException、SQLException、ClassNotFoundException 等。

區(qū)別總結(jié):

  • RuntimeException 是非受檢異常,不需要在編譯時(shí)強(qiáng)制處理;Exception 中的其他子類都是受檢異常,在編譯時(shí)需要強(qiáng)制處理。

  • RuntimeException 通常表示程序本身的錯(cuò)誤或邏輯錯(cuò)誤;Exception 的其他子類通常表示外部資源的故障或不滿足某些條件的情況。

  • 對(duì)于 RuntimeException 可以選擇捕獲或拋出,但不是必需的;對(duì)于受檢異常,必須進(jìn)行處理,要么捕獲并處理,要么在方法簽名中聲明 throws 子句。

需要注意的是,在設(shè)計(jì)自定義異常類時(shí),應(yīng)根據(jù)異常的特性和使用場(chǎng)景來(lái)決定繼承 RuntimeException 還是 Exception。如果異常屬于程序的邏輯錯(cuò)誤或操作錯(cuò)誤,則可以繼承 RuntimeException;如果異常屬于外部資源故障或需要強(qiáng)制處理的情況,則應(yīng)繼承 Exception 或其子類。


Java中包的作用以及使用、訪問(wèn)權(quán)限、單例/多例設(shè)計(jì)模式、枚舉和異常附帶相關(guān)面試題的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
苏尼特左旗| 四子王旗| 蛟河市| 柯坪县| 泉州市| 古丈县| 临江市| 信丰县| 调兵山市| 屏山县| 桓台县| 名山县| 抚州市| 绍兴县| 承德市| 莱西市| 乳源| 沙雅县| 天祝| 博白县| 贺兰县| 通辽市| 湖口县| 浮梁县| 和平县| 镇沅| 泗水县| 海兴县| 洛扎县| 潜山县| 靖远县| 商河县| 新晃| 焉耆| 确山县| 沈阳市| 淮滨县| 广汉市| 子洲县| 昌黎县| 家居|