欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java基礎(chǔ)面試題整理小結(jié)

  發(fā)布時(shí)間:2020-05-19 15:06:35   作者:Hello.World!   我要評(píng)論
本文是小編給大家收藏整理的關(guān)于java基礎(chǔ)面試題小結(jié),在面試中經(jīng)常會(huì)被問(wèn)題,今天小編特此整理把內(nèi)容分享到腳本之家平臺(tái),需要的朋友參考下吧

&和&&的區(qū)別?

& 無(wú)論左邊表達(dá)式執(zhí)行結(jié)果如何,都會(huì)執(zhí)行右邊

&& 左邊執(zhí)行不符合條件時(shí),右邊不執(zhí)行

public static void main(String[] args) {
        int i = 1;
        int j = 2;
        
        // &
        if(++i==10 & ++j==10) { //false
            System.out.println(i);
            System.out.println(j);
        }
        System.out.println(i); //2
        System.out.println(j); //3
        
        // &
        if(++i==10 && ++j==10) {  //false
            System.out.println(i);
            System.out.println(j);
        }
        System.out.println(i); //3
        System.out.println(j); //3
    }

int和 Integer 有什么區(qū)別?(基本數(shù)據(jù)類型有哪些?)(String不是基本數(shù)據(jù)類型)

Java 為每個(gè)基本類型都提供了包裝類,int 的包裝類就是 Integer,并且從 jdk1.5 引入了自動(dòng)拆箱、裝箱機(jī)制,使得二者可以相互轉(zhuǎn)換。

原始類型:boolean,char,byte,short,int,long,float,double

包裝類型: Boolean,Character,Byte,Short,Integer,Long,F(xiàn)loat,Double

String、StringBuffer、 StringBuilder 的區(qū)別?

String 用于字符串操作,不可改變類型,每次值發(fā)生改變,都會(huì)創(chuàng)建一個(gè)新的對(duì)象,底層使用 char 數(shù)組實(shí)現(xiàn),因?yàn)?使用 final,所以 String 不可以被繼承

StringBuffer 用于字符串操作,可變類型,對(duì)方法增加了同步鎖,線程安全

StringBuilder 和 StringBuffer 類似,都是字符串緩沖區(qū),線程不安全

執(zhí)行效率:StringBuilder(線程不安全)>StringBuffer(線程安全)>String

String 類的常用方法都有那些?

indexOf():返回指定字符得索引

charAt():返回指定索引處得字符

repalce():字符串替換

trim():去除字符串兩端的空白

split():分割字符串 返回分割后的字符串?dāng)?shù)組

getBytes():返回字符串的 byte 類型數(shù)組

length():返回字符串的長(zhǎng)度

toLowerCase():字符串轉(zhuǎn)小寫

toUpperCase():字符串轉(zhuǎn)大寫

substring():截取字符串

equals():字符串比較

final修飾 StringBuffer 后還可以 append 嗎?

可以,final 修飾的是一個(gè)引用變量,那么這個(gè)引用始終指向這個(gè)對(duì)象,但這個(gè)對(duì)象內(nèi)部的屬性是可以改變的。

public static void main(String[] args) {
        final StringBuffer sb = new StringBuffer();
        sb.append("a");
        sb.append("b");
        sb.append("c");
        
        System.out.println(sb); //abc
        
    }

String 字符串修改實(shí)現(xiàn)的原理?

當(dāng) String 修改字符串的時(shí)候會(huì)創(chuàng)建一個(gè) StringBuilder 對(duì)象,接下來(lái)調(diào)用 append 方法,最后通過(guò) toString 方法返回。

什么是值傳遞和引用傳遞?

值傳遞:基本類型的一個(gè)概念,傳遞的是該變量的一個(gè)副本,改變副本不影響原變量

引用傳遞:對(duì)象型變量而言,傳遞的是該對(duì)象地址的一個(gè)副本,所以對(duì)引用對(duì)象操作影響原變量

== 比較的是什么?

== 比較兩個(gè)對(duì)象基本內(nèi)存引用,如果兩個(gè)對(duì)象的引用完全相同,返回 true,否則返回 false,如果兩個(gè)對(duì)象是基本數(shù)據(jù)類型,則比較值是否相等。

public static void main(String[] args) {
        int i = 10;
        int j = 10;
        System.out.println(i==j);
        
        String a = new String("hello");
        String b = new String("hello");
        System.out.println(a==b);
    }

兩個(gè)對(duì)象的 hashCode() 相同,則 equals() 也一定為 true 嗎?

如果兩個(gè)對(duì)象相等,則 hashCode 一定也是相同的;反之不成立。

public static void main(String[] args) {
        String str1 = "通話";
        String str2 = "重地";
        System.out.println(str1.hashCode());//1179395
        System.out.println(str2.hashCode());//1179395
        
        System.out.println(str1.equals(str2));//false
    }

Java 里面的 final 關(guān)鍵字是怎么用的?

final關(guān)鍵字修飾的變量,只能進(jìn)行一次賦值操作,并且在生存期內(nèi)不可以改變它的值。

final關(guān)鍵字修飾的參數(shù),在此方法中,不可更改該參數(shù)的值。

final關(guān)鍵字修飾的方法,該方法不能被重寫。

final關(guān)鍵字修飾的類,該類不能被繼承。

解釋下什么是面向?qū)ο??面向?qū)ο蠛兔嫦蜻^(guò)程的區(qū)別?

面向?qū)ο蟮某绦蚴怯蓪?duì)象組成的,每個(gè)對(duì)象包含用戶公開(kāi)的特定功能部分和隱藏的實(shí)現(xiàn)部分。 結(jié)構(gòu)清晰,程序便于模塊化,結(jié)構(gòu)化,抽象化,更加符合人類的思維方式。

面向過(guò)程的程序通過(guò)設(shè)計(jì)一系列的過(guò)程來(lái)解決問(wèn)題。 面向過(guò)程側(cè)重整個(gè)問(wèn)題的解決步驟,著眼局部或者具體。

面向?qū)ο蟮娜筇匦??分別解釋下?

封裝:通常認(rèn)為封裝是把數(shù)據(jù)和操作數(shù)據(jù)的方法封裝起來(lái),對(duì)數(shù)據(jù)的訪問(wèn)只能通過(guò)已定義的接口。

繼承:繼承是從已有類得到繼承信息創(chuàng)建新類的過(guò)程。提供繼承信息的類被稱為父類(超類/基類),得到繼承信息的被稱為子類(派生類)。

多態(tài):分為編譯時(shí)多態(tài)(方法重載)和運(yùn)行時(shí)多態(tài)(方法重寫)。

要實(shí)現(xiàn)多態(tài)需要做兩件事:一是子類繼承父類并重寫父類中的方法,二是用父類型引用子類型對(duì)象,這樣同樣的引用調(diào)用同樣的方法就會(huì)根據(jù)子類對(duì)象的不同而表現(xiàn)出不同的行為。主要由以下三種方式實(shí)現(xiàn):

通過(guò)子類對(duì)父類的覆蓋實(shí)現(xiàn)

通過(guò)在一個(gè)類中對(duì)方法的重載來(lái)實(shí)現(xiàn)

通過(guò)將子類對(duì)象作為父類對(duì)象使用來(lái)實(shí)現(xiàn)

Java 類初始化采用什么順序呢?

初始化父類中的靜態(tài)成員變量和靜態(tài)代碼塊

初始化子類中的靜態(tài)成員變量和靜態(tài)代碼塊

初始化父類中的普通成員變量和代碼塊,再執(zhí)行父類的構(gòu)造方法

初始化子類中的普通成員變量和代碼塊,再執(zhí)行父子類的構(gòu)造方法

Java 是否支持多繼承?

Java不支持多繼承,但Java可以實(shí)現(xiàn)多個(gè)接口,從而達(dá)到類似多繼承的目的。

什么是構(gòu)造函數(shù)?什么是構(gòu)造函數(shù)重載?

新對(duì)象被創(chuàng)建的時(shí)候會(huì)調(diào)用構(gòu)造函數(shù),每個(gè)類都有構(gòu)造函數(shù),如果沒(méi)有顯式的創(chuàng)建構(gòu)造函數(shù),Java 編譯器會(huì)自動(dòng)為該類創(chuàng)建一個(gè)默認(rèn)的構(gòu)造函數(shù)。

若該類已經(jīng)創(chuàng)建非空參構(gòu)造函數(shù),默認(rèn)的無(wú)參構(gòu)造函數(shù)就會(huì)失效。

構(gòu)造函數(shù)重載和方法重載類似,可以為一個(gè)類創(chuàng)建多個(gè)構(gòu)造函數(shù),但是要保證每個(gè)構(gòu)造函數(shù)都有唯一的參數(shù)列表。

重載和重寫的區(qū)別?

重載,編譯時(shí)多態(tài),在一個(gè)類里面,方法名字相同,而參數(shù)不同。返回類型可以相同也可以不同。

重寫,也叫覆蓋,運(yùn)行時(shí)多態(tài),重寫發(fā)生在子類與父類之間,重寫要求子類與父類具有相同的參數(shù)列表和返回類型。重寫的方法調(diào)用時(shí)會(huì)覆蓋父類的方法。

請(qǐng)說(shuō)明 Comparable 和 Comparator 接口的作用以及它們的區(qū)別?

Comparable:

它是一個(gè)排序接口,只包含一個(gè)函數(shù) compareTo()

一個(gè)類實(shí)現(xiàn)了 Comparable 接口,就意味著該類本身支持排序,它可以直接通過(guò) Arrays.sort() 或 Collections.sort() 進(jìn)行排序

public class Human implements Comparable<Human> {
    public Integer id;
    public Integer age;
    
    @Override
    public int compareTo(Human o) {
        if(this.age > o.age) {
            return 1;
        }else if(this.age < o.age) {
            return -1;
        }else{
            return 0;
        }
    }
    
}

Comparator:

它是一個(gè)比較器接口,包括兩個(gè)函數(shù):compare() 和 equals()

一個(gè)類實(shí)現(xiàn)了Comparator接口,那么它就是一個(gè)比較器,其它的類,可以根據(jù)該比較器去排序

綜上所述:Comparable 是內(nèi)部比較器,而 Comparator 是外部比較器。

public class Man implements Comparator<Man>{
    public Integer id;
    public Integer age;

    @Override
    public int compare(Man o1, Man o2) {
        if(o1.age > o2.age) {
            return 1;
        }else if(o1.age < o2.age) {
            return -1;
        }else{
            return 0;
        }
    }
}

抽象類和接口有什么區(qū)別?

抽象類中可以定義構(gòu)造函數(shù),接口不能定義構(gòu)造函數(shù);

抽象類中可以有抽象方法和具體方法,而接口中只能有抽象方法(public abstract);

抽象類中的成員權(quán)限可以是 public、默認(rèn)、protected(抽象類中抽象方法就是為了重寫,所以不能被 private 修飾),而接口中的成員只可以是 public(方法默認(rèn):public abstrat、成員變量默認(rèn):public static final);

抽象類中可以包含靜態(tài)方法,而接口中不可以包含靜態(tài)方法。

static 關(guān)鍵字的作用?Java 中是否可以重寫一個(gè) private 或者是 static 的方法?

static 關(guān)鍵字表明一個(gè)成員變量或成員方法可以在沒(méi)有所屬類的情況下被訪問(wèn)。

重寫是基于運(yùn)行時(shí)動(dòng)態(tài)綁定的,而 static 方法是編譯時(shí)靜態(tài)綁定的,static 方法與任何實(shí)例都不相關(guān),所以不能重寫一個(gè) static 方法

成員變量和局部變量的區(qū)別?

生命周期不同

成員變量:

類成員變量是從該類的準(zhǔn)備階段開(kāi)始,直到系統(tǒng)完全銷毀這個(gè)類,類變量的作用域與這個(gè)類的生存范圍相同

實(shí)例變量是從該類的實(shí)例被創(chuàng)建開(kāi)始存在,直到系統(tǒng)完全銷毀這個(gè)實(shí)例,實(shí)例變量的作用域與對(duì)應(yīng)實(shí)例的生存范圍相同

局部變量根據(jù)定義形式的不同,又可以分為如下三種:

形參,形參的作用域在整個(gè)方法中都有效

方法局部變量,作用域從定義這個(gè)變量的位置到方法結(jié)束時(shí)都有效

代碼塊局部變量,作用域從定義這個(gè)變量的位置到代碼塊結(jié)束時(shí)都有效

super 關(guān)鍵字的作用?

super 關(guān)鍵字可以在子類構(gòu)造方法中顯式調(diào)用父類構(gòu)造,但是必要處于第一行。

super 關(guān)鍵字可以在子類中顯式調(diào)用父類方法或變量。

有時(shí)候可以使用這個(gè)關(guān)鍵字?jǐn)U展從父類繼承過(guò)來(lái)的方法。

請(qǐng)說(shuō)明類和對(duì)象的區(qū)別?

類是對(duì)某一類事物的描述,是抽象的;而對(duì)象是表示的一個(gè)具體的個(gè)體,是類的一個(gè)實(shí)例。

對(duì)象是函數(shù)、變量的集合體,而類是一組函數(shù)、變量的集合體, 即類是一組具有相同屬性的對(duì)象集合體。

(class修飾的是類,new出來(lái)的是對(duì)象)

finally 塊中的代碼什么時(shí)候被執(zhí)行?

在 Java 語(yǔ)言的異常處理中,finally 塊的作用就是為了保證無(wú)論出現(xiàn)什么情況,finally 塊里的代碼一定會(huì)被執(zhí)行。由于程序執(zhí)行 return 就意味著結(jié)束對(duì)當(dāng)前函數(shù)的調(diào)用并跳出這個(gè)函數(shù)體,因此任何語(yǔ)句要執(zhí)行都只能在 return 前執(zhí)行(除非碰到 exit 函數(shù)),因此 finally 塊里的代碼也是在 return 之前執(zhí)行的。

此外,如果 try-finally 或者 catch-finally 中都有 return,那么 finally 塊中的 return 將會(huì)覆蓋別處的 return 語(yǔ)句,最終返回到調(diào)用者那里的是 finally 中 return 的值。

finally 是不是一定會(huì)被執(zhí)行到?

不一定,下面列舉兩種執(zhí)行不到的情況:

當(dāng)程序進(jìn)入 try 塊之前就出現(xiàn)異常時(shí),會(huì)直接結(jié)束,不會(huì)執(zhí)行 finally 塊中的代碼;

當(dāng)程序在 try 塊中強(qiáng)制退出時(shí)也不會(huì)去執(zhí)行 finally 塊中的代碼,比如在 try 塊中執(zhí)行 exit 方法。

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

會(huì),程序在執(zhí)行到 return 時(shí)會(huì)首先將返回值存儲(chǔ)在一個(gè)指定的位置,其次去執(zhí)行 finally 塊,最后再返回。因此,對(duì)基本數(shù)據(jù)類型,在 finally 塊中改變 return 的值沒(méi)有任何影響,直接覆蓋掉;而對(duì)引用類型是有影響的,返回的是在 finally 對(duì) 前面 return 語(yǔ)句返回對(duì)象的修改值。

throw 和 throws 的區(qū)別?

throw:在方法體內(nèi)部,表示拋出異常,由方法體內(nèi)部的語(yǔ)句處理;throw 是具體向外拋出異常的動(dòng)作,所以它拋出的是一個(gè)異常實(shí)例;

throws:在方法聲明后面,表示如果拋出異常,由該方法的調(diào)用者來(lái)進(jìn)行異常的處理;表示出現(xiàn)異常的可能性,并不一定會(huì)發(fā)生這種異常。

常見(jiàn)的異常類有哪些?

ArithmeticExecption

NullPointerException

ClassCastException

ArrayIndexOutOfBoundsException

FileNotFoundException

NumberFormatException

SQLException

IOException

NoSuchMethodException

IndexOutOfBoundsExecption

IllegalArgumentException

Java 的泛型是如何工作的 ? 什么是類型擦除 ?

泛型使得數(shù)據(jù)的類型可以通過(guò)參數(shù)傳遞過(guò)來(lái),它提供了一種擴(kuò)展能力,更符合面向?qū)ο笏枷搿?/p>

當(dāng)具體的類型確定之后,泛型還提供了類型檢測(cè)機(jī)制,不符合的類型不允許賦值,否則編譯不通過(guò)。

所以類型擦除就是在進(jìn)入 JVM 之前,與泛型相關(guān)的信息會(huì)被擦除掉,這些信息被擦除后,相應(yīng)的類型就會(huì)被替換成泛型類型參數(shù)的上限,如果沒(méi)有指定,則替換成 Object。

什么是泛型中的限定通配符和非限定通配符 ?

限定通配符包括兩種:

表示類型的上界,格式為:<? extends T>,即類型必須為 T 類型或者 T 子類

表示類型的下界,格式為:<? super T>,即類型必須為 T 類型或者 T 的父類

非限定通配符:類型為 ,可以用任意類型替代。

List<? extends T> 和 List <? super T> 之間有什么區(qū)別 ?

List<? extends T>,即類型必須為 T 類型或者 T 子類

List <? super T>,即類型必須為 T 類型或者 T 的父類

Java 中的 IO 流的分類?

按功能來(lái)分:輸入流(input)、輸出流(output)。

按類型來(lái)分:字節(jié)流 和 字符流。

字節(jié)流和字符流有什么區(qū)別?

字節(jié)流按 8 位傳輸,以字節(jié)為單位輸入輸出數(shù)據(jù),字符流按 16 位傳輸,以字符為單位輸入輸出數(shù)據(jù)。

但是不管文件讀寫還是網(wǎng)絡(luò)發(fā)送接收,信息的最小存儲(chǔ)單元都是字節(jié)。

總結(jié)

到此這篇關(guān)于java基礎(chǔ)面試題1的文章就介紹到這了,更多相關(guān)java 基礎(chǔ)面試題內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!

相關(guān)文章

  • 大廠Java高級(jí)工程師面試題

    這篇文章主要介紹了大廠Java高級(jí)工程師面試題,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2020-07-27
  • 2020年最新版Java面試題大全

    這篇文章主要介紹了2020年最新版Java面試題大全,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-16
  • 字節(jié)跳動(dòng)Java后端視頻面一面涼經(jīng)

    這篇文章主要介紹了字節(jié)跳動(dòng)Java后端視頻面一面涼經(jīng),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)
    2020-04-13
  • 100+經(jīng)典Java面試題及答案解析

    這篇文章主要介紹了100+經(jīng)典Java面試題及答案解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)
    2020-04-09
  • 抖音、騰訊、阿里、美團(tuán)春招Java開(kāi)發(fā)崗位硬核面試

    這篇文章主要介紹了抖音、騰訊、阿里、美團(tuán)春招Java開(kāi)發(fā)崗位硬核面試,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-18

最新評(píng)論