最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java面試之高級(jí)特性基礎(chǔ)總結(jié)

 更新時(shí)間:2023年01月11日 09:57:52   作者:世界盡頭與你  
這篇文章主要為大家詳細(xì)介紹了10個(gè)Java高級(jí)特性基礎(chǔ)相關(guān)的問(wèn)題,也是大家面試中常常會(huì)遇到的問(wèn)題。文中的示例代講解詳細(xì),感興趣的可以了解一下

1.為什么 Java 中只有值傳遞

  • 值傳遞 :方法接收的是實(shí)參值的拷貝,會(huì)創(chuàng)建副本。
  • 引用傳遞 :方法接收的直接是實(shí)參所引用的對(duì)象在堆中的地址,不會(huì)創(chuàng)建副本,對(duì)形參的修改將影響到實(shí)參。

很多程序設(shè)計(jì)語(yǔ)言(比如 C++、 Pascal )提供了兩種參數(shù)傳遞的方式,不過(guò),在 Java 中只有值傳遞。

Java 中將實(shí)參傳遞給方法(或函數(shù))的方式是 值傳遞 :

  • 如果參數(shù)是基本類(lèi)型的話(huà),很簡(jiǎn)單,傳遞的就是基本類(lèi)型的字面量值的拷貝,會(huì)創(chuàng)建副本。
  • 如果參數(shù)是引用類(lèi)型,傳遞的就是實(shí)參所引用的對(duì)象在堆中地址值的拷貝,同樣也會(huì)創(chuàng)建副本。

2.static 關(guān)鍵字使用場(chǎng)景

修飾成員變量和成員方法:

被 static 修飾的成員屬于類(lèi),不屬于單個(gè)這個(gè)類(lèi)的某個(gè)對(duì)象,被類(lèi)中所有對(duì)象共享,可以并且建議通過(guò)類(lèi)名調(diào)用。被 static 聲明的成員變量屬于靜態(tài)成員變量,靜態(tài)變量 存放在 Java 內(nèi)存區(qū)域的方法區(qū)。

靜態(tài)代碼塊:

靜態(tài)代碼塊定義在類(lèi)中方法外, 靜態(tài)代碼塊在非靜態(tài)代碼塊之前執(zhí)行(靜態(tài)代碼塊 —> 非靜態(tài)代碼塊 —> 構(gòu)造方法)。 該類(lèi)不管創(chuàng)建多少對(duì)象,靜態(tài)代碼塊只執(zhí)行一次

靜態(tài)導(dǎo)包:

格式為:import static

這兩個(gè)關(guān)鍵字連用可以指定導(dǎo)入某個(gè)類(lèi)中的指定靜態(tài)資源,并且不需要使用類(lèi)名調(diào)用類(lèi)中靜態(tài)成員,可以直接使用類(lèi)中靜態(tài)成員變量和成員方法

import static java.lang.Math.*;
public class Demo {
  public static void main(String[] args) {
    int max = max(1,2);
    System.out.println(max);
  }
}

靜態(tài)內(nèi)部類(lèi):

靜態(tài)內(nèi)部類(lèi)與非靜態(tài)內(nèi)部類(lèi)之間存在一個(gè)最大的區(qū)別,我們知道非靜態(tài)內(nèi)部類(lèi)在編譯完成之后會(huì)隱含地保存著一個(gè)引用,該引用是指向創(chuàng)建它的外圍類(lèi),但是靜態(tài)內(nèi)部類(lèi)卻沒(méi)有。沒(méi)有這個(gè)引用就意味著:

1.它的創(chuàng)建是不需要依賴(lài)外圍類(lèi)的創(chuàng)建。

2.它不能使用任何外圍類(lèi)的非 static 成員變量和方法。

例如:靜態(tài)內(nèi)部類(lèi)實(shí)現(xiàn)單例模式:

public class Singleton {
    // 聲明為 private 避免調(diào)用默認(rèn)構(gòu)造方法創(chuàng)建對(duì)象
    private Singleton() {
    }
    // 聲明為 private 表明靜態(tài)內(nèi)部該類(lèi)只能在該 Singleton 類(lèi)中被訪問(wèn)
    private static class SingletonHolder {
        private static final Singleton INSTANCE = new Singleton();
    }
    public static Singleton getUniqueInstance() {
        return SingletonHolder.INSTANCE;
    }
}

當(dāng) Singleton 類(lèi)加載時(shí),靜態(tài)內(nèi)部類(lèi) SingletonHolder 沒(méi)有被加載進(jìn)內(nèi)存。只有當(dāng)調(diào)用 getUniqueInstance()方法從而觸發(fā) SingletonHolder.INSTANCE 時(shí) SingletonHolder 才會(huì)被加載,此時(shí)初始化 INSTANCE 實(shí)例,并且 JVM 能確保 INSTANCE 只被實(shí)例化一次。

這種方式不僅具有延遲初始化的好處,而且由 JVM 提供了對(duì)線程安全的支持。

3.Exception 和 Error 有什么區(qū)別

在 Java 中,所有的異常都有一個(gè)共同的祖先 java.lang 包中的 Throwable 類(lèi)。Throwable 類(lèi)有兩個(gè)重要的子類(lèi):

  • Exception :程序本身可以處理的異常,可以通過(guò) catch 來(lái)進(jìn)行捕獲。Exception 又可以分為 Checked Exception (受檢查異常,必須處理) 和 Unchecked Exception (不受檢查異常,可以不處理)。
  • Error :Error 屬于程序無(wú)法處理的錯(cuò)誤 ,不建議通過(guò)catch捕獲 。例如 Java 虛擬機(jī)運(yùn)行錯(cuò)誤(Virtual MachineError)、虛擬機(jī)內(nèi)存不夠錯(cuò)誤(OutOfMemoryError)、類(lèi)定義錯(cuò)誤(NoClassDefFoundError)等 。這些異常發(fā)生時(shí),Java 虛擬機(jī)(JVM)一般會(huì)選擇線程終止。

4.Checked Exception 和 Unchecked Exception 有什么區(qū)別

Checked Exception 即 受檢查異常 ,Java 代碼在編譯過(guò)程中,如果受檢查異常沒(méi)有被 catch或者throws 關(guān)鍵字處理的話(huà),就沒(méi)辦法通過(guò)編譯。

比如下面這段 IO 操作的代碼:

除了RuntimeException及其子類(lèi)以外,其他的Exception類(lèi)及其子類(lèi)都屬于受檢查異常 。常見(jiàn)的受檢查異常有: IO相關(guān)的異常、ClassNotFoundException 、SQLException…

Unchecked Exception 即 不受檢查異常 ,Java 代碼在編譯過(guò)程中 ,我們即使不處理不受檢查異常也可以正常通過(guò)編譯。

RuntimeException 及其子類(lèi)都統(tǒng)稱(chēng)為非受檢查異常

常見(jiàn)的Unchecked Exception:

  • NullPointerException(空指針錯(cuò)誤)
  • IllegalArgumentException(參數(shù)錯(cuò)誤比如方法入?yún)㈩?lèi)型錯(cuò)誤)
  • NumberFormatException(字符串轉(zhuǎn)換為數(shù)字格式錯(cuò)誤,IllegalArgumentException的子類(lèi))
  • ArrayIndexOutOfBoundsException(數(shù)組越界錯(cuò)誤)
  • ClassCastException(類(lèi)型轉(zhuǎn)換錯(cuò)誤)
  • ArithmeticException(算術(shù)錯(cuò)誤)
  • SecurityException (安全錯(cuò)誤比如權(quán)限不夠)
  • UnsupportedOperationException(不支持的操作錯(cuò)誤比如重復(fù)創(chuàng)建同一用戶(hù))

5.Throwable 類(lèi)常用方法有哪些

String getMessage(): 返回異常發(fā)生時(shí)的簡(jiǎn)要描述

String toString(): 返回異常發(fā)生時(shí)的詳細(xì)信息

String getLocalizedMessage(): 返回異常對(duì)象的本地化信息。使用 Throwable 的子類(lèi)覆蓋這個(gè)方法,可以生成本地化信息。如果子類(lèi)沒(méi)有覆蓋該方法,則該方法返回的信息與 getMessage()返回的結(jié)果相同

void printStackTrace(): 在控制臺(tái)上打印 Throwable 對(duì)象封裝的異常信息

6.finally 中的代碼一定會(huì)執(zhí)行嗎

在某些情況下,finally 中的代碼不會(huì)被執(zhí)行。

就比如說(shuō) finally 之前虛擬機(jī)被終止運(yùn)行的話(huà),finally 中的代碼就不會(huì)被執(zhí)行。

public static void main(String[] args) {
    try {
        System.out.println("Do something");
        throw new RuntimeException("RuntimeException");
    } catch (Exception e) {
        System.out.println(e.getMessage());
        // 終止當(dāng)前正在運(yùn)行的Java虛擬機(jī)
        System.exit(1);
    } finally {
        System.out.println("Finally");
    }
}

這個(gè)程序只會(huì)輸出:

Do something
RuntimeException

另外,在以下 2 種特殊情況下,finally 塊的代碼也不會(huì)被執(zhí)行:

  • 程序所在的線程死亡
  • 關(guān)閉 CPU

7.如何使用 try-with-resources 代替try-catch-finally

面對(duì)必須要關(guān)閉的資源,我們總是應(yīng)該優(yōu)先使用 try-with-resources 而不是try-finally。try-with-resources語(yǔ)句讓我們更容易編寫(xiě)必須要關(guān)閉的資源的代碼,若采用try-finally則幾乎做不到這點(diǎn)。

Java 中類(lèi)似于InputStream、OutputStream 、Scanner 、PrintWriter等的資源都需要我們調(diào)用close()方法來(lái)手動(dòng)關(guān)閉,一般情況下我們都是通過(guò)try-catch-finally語(yǔ)句來(lái)實(shí)現(xiàn)這個(gè)需求,如下:

public static void main(String[] args) {
    // 讀取文本文件的內(nèi)容
    Scanner scanner = null;
    try {
        scanner = new Scanner(new File("D://read.txt"));
        while (scanner.hasNext()) {
            System.out.println(scanner.nextLine());
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } finally {
        if (scanner != null) {
            scanner.close();
        }
    }
}

使用 Java 7 之后的 try-with-resources 語(yǔ)句改造上面的代碼:

public static void main(String[] args) {
    try (Scanner scanner = new Scanner(new File("D://read.txt"))) {
        while (scanner.hasNext()) {
            System.out.println(scanner.nextLine());
        }
    } catch (FileNotFoundException fnfe) {
        fnfe.printStackTrace();
    }
}

當(dāng)然多個(gè)資源需要關(guān)閉的時(shí)候,使用 try-with-resources 實(shí)現(xiàn)起來(lái)也非常簡(jiǎn)單:

通過(guò)使用分號(hào)分隔,可以在try-with-resources塊中聲明多個(gè)資源:

try (BufferedInputStream bin = new BufferedInputStream(new FileInputStream(new File("test.txt")));
     BufferedOutputStream bout = new BufferedOutputStream(new FileOutputStream(new File("out.txt")))) {
    int b;
    while ((b = bin.read()) != -1) {
        bout.write(b);
    }
}
catch (IOException e) {
    e.printStackTrace();
}

8.注解的解析方法有哪幾種

注解只有被解析之后才會(huì)生效,常見(jiàn)的解析方法有兩種:

  • 編譯期直接掃描 :編譯器在編譯 Java 代碼的時(shí)候掃描對(duì)應(yīng)的注解并處理,比如某個(gè)方法使用@Override 注解,編譯器在編譯的時(shí)候就會(huì)檢測(cè)當(dāng)前的方法是否重寫(xiě)了父類(lèi)對(duì)應(yīng)的方法。
  • 運(yùn)行期通過(guò)反射處理 :像框架中自帶的注解(比如 Spring 框架的 @Value 、@Component)都是通過(guò)反射來(lái)進(jìn)行處理的。

9.泛型的使用方式有哪幾種

泛型一般有三種使用方式:泛型類(lèi)、泛型接口、泛型方法

10.項(xiàng)目中哪里用到了泛型

1.自定義接口通用返回結(jié)果 CommonResult<T> 通過(guò)參數(shù) T 可根據(jù)具體的返回類(lèi)型動(dòng)態(tài)指定結(jié)果的數(shù)據(jù)類(lèi)型

2.定義 Excel 處理類(lèi) ExcelUtil<T> 用于動(dòng)態(tài)指定 Excel 導(dǎo)出的數(shù)據(jù)類(lèi)型

3.構(gòu)建集合工具類(lèi)(參考 Collections 中的 sort, binarySearch 方法)。

到此這篇關(guān)于Java面試之高級(jí)特性基礎(chǔ)總結(jié)的文章就介紹到這了,更多相關(guān)Java高級(jí)特性?xún)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#中NAudio音頻庫(kù)的安裝與使用教程詳解

    C#中NAudio音頻庫(kù)的安裝與使用教程詳解

    NAudio為.NET平臺(tái)下的開(kāi)源庫(kù),采用ML-PL協(xié)議,它支持許多音頻操作,可實(shí)現(xiàn)多種API播放與錄制、多種不同音頻格式等功能,下面就跟隨小編一起學(xué)習(xí)一下NAudio的安裝與使用吧
    2023-11-11
  • 全面解析Java觀察者模式

    全面解析Java觀察者模式

    這篇文章主要幫助大家全面解析Java觀察者模式,了解java設(shè)計(jì)模式中的觀察者模式,感興趣的小伙伴們可以參考一下
    2016-09-09
  • Java中的Vector和ArrayList區(qū)別及比較

    Java中的Vector和ArrayList區(qū)別及比較

    這篇文章主要介紹了Java中的Vector和ArrayList區(qū)別及比較,本文從API、同步、數(shù)據(jù)增長(zhǎng)、使用模式4個(gè)方面總結(jié)了它們之間的不同之處,需要的朋友可以參考下
    2015-03-03
  • SpringMVC通過(guò)攔截器實(shí)現(xiàn)IP黑名單

    SpringMVC通過(guò)攔截器實(shí)現(xiàn)IP黑名單

    這篇文章主要為大家詳細(xì)介紹了SpringMVC通過(guò)攔截器實(shí)現(xiàn)IP黑名單,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • 解決spring boot2集成activiti6踩過(guò)的坑

    解決spring boot2集成activiti6踩過(guò)的坑

    這篇文章主要介紹了解決spring boot2集成activiti6踩過(guò)的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • SpringBoot項(xiàng)目中使用緩存Cache的正確方法分享

    SpringBoot項(xiàng)目中使用緩存Cache的正確方法分享

    緩存可以通過(guò)將經(jīng)常訪問(wèn)的數(shù)據(jù)存儲(chǔ)在內(nèi)存中,減少底層數(shù)據(jù)源如數(shù)據(jù)庫(kù)的壓力,從而有效提高系統(tǒng)的性能和穩(wěn)定性。本文就來(lái)講講SpringBoot項(xiàng)目中使用緩存Cache的正確姿勢(shì)吧
    2023-04-04
  • Java基礎(chǔ)之方法重寫(xiě)和多態(tài)示例

    Java基礎(chǔ)之方法重寫(xiě)和多態(tài)示例

    這篇文章主要介紹了Java基礎(chǔ)之方法重寫(xiě)和多態(tài),結(jié)合實(shí)例形式分析了java方法重寫(xiě)和多態(tài)的相關(guān)原理與使用技巧,需要的朋友可以參考下
    2019-08-08
  • 詳談Java泛型中T和問(wèn)號(hào)(通配符)的區(qū)別

    詳談Java泛型中T和問(wèn)號(hào)(通配符)的區(qū)別

    下面小編就為大家?guī)?lái)一篇詳談Java泛型中T和問(wèn)號(hào)(通配符)的區(qū)別。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • Spring中@PostConstruct的實(shí)現(xiàn)方法

    Spring中@PostConstruct的實(shí)現(xiàn)方法

    大多數(shù)java程序員都使用過(guò)@PostConstruct注解,它的作用就是在Bean初始化完成后執(zhí)行,相當(dāng)于我們常說(shuō)的init()方法,但是我們看@PostConstruct只有單單的一個(gè)注解,它到底是如何實(shí)現(xiàn)在Bean初始化完成后就被調(diào)用的呢,本文將詳細(xì)給大家介紹一下
    2023-06-06
  • 6個(gè)必備的Java并發(fā)面試種子題目合集

    6個(gè)必備的Java并發(fā)面試種子題目合集

    并發(fā)是Java面試的經(jīng)常會(huì)考到的知識(shí)點(diǎn),這篇文章主要為大家整理了6個(gè)必備的Java并發(fā)面試種子題目,文中的示例代碼簡(jiǎn)潔易懂,需要的可以學(xué)習(xí)一下
    2023-07-07

最新評(píng)論

扶风县| 安顺市| 马公市| 射阳县| 武隆县| 西乌| 丹棱县| 福海县| 收藏| 保山市| 南澳县| 永吉县| 英超| 石景山区| 分宜县| 上虞市| 新龙县| 北票市| 大新县| 壶关县| 谷城县| 靖边县| 新乡县| 噶尔县| 万全县| 临武县| 延长县| 保定市| 安远县| 泸州市| 长武县| 玛曲县| 龙胜| 红桥区| 盘锦市| 宣恩县| 长顺县| 吕梁市| 三河市| 海伦市| 临江市|