Java面試易錯題精選

      網友投稿 632 2025-04-04

      一、成員變量和局部變量的區別:

      1:成員變量直接定義在類中。

      局部變量定義在方法中,參數上,語句中。

      2:成員變量在這個類中有效。

      局部變量只在自己所屬的大括號內有效,大括號結束,局部變量失去作用域。

      3:成員變量存在于堆內存中,隨著對象的產生而存在,消失而消失。

      局部變量存在于棧內存中,隨著所屬區域的運行而存在,結束而釋放。

      二、構造函數的定義和特點

      定義:用于給對象進行初始化,是給與之對應的對象進行初始化,它具有針對性,函數中的一種。

      特點:

      1:構造函數的名稱和所在類的名稱相同。

      2:不需要定義返回值類型。

      3:該函數沒有具體的返回值。

      記住:所有對象創建時,都需要初始化才可以使用。

      注意事項:一個類在定義時,如果沒有定義過構造函數,那么該類中會自動生成一個空參數的構造函數,為了方便該類創建對象,完成初始化。如果在類中自定義了構造函數,那么默認的構造函數就沒有了。

      三、構造函數和一般函數有什么區別呢?

      1:兩個函數定義格式不同。

      2:構造函數是在對象創建時,就被調用,用于初始化,而且初始化動作只執行一次。

      一般函數,是對象創建后,需要調用才執行,可以被調用多次。

      四、成員變量和靜態變量的區別:

      1,成員變量所屬于對象。所以也稱為實例變量。

      靜態變量所屬于類。所以也稱為類變量。

      2,成員變量存在于堆內存中。

      靜態變量存在于方法區中。

      3,成員變量隨著對象創建而存在。隨著對象被回收而消失。

      靜態變量隨著類的加載而存在。隨著類的消失而消失。

      4,成員變量只能被對象所調用 。

      靜態變量可以被對象調用,也可以被類名調用。

      ==所以,成員變量可以稱為對象的特有數據,靜態變量稱為對象的共享數據。==

      五、靜態代碼塊:就是一個有靜態關鍵字標示的一個代碼塊區域,定義在類中。

      作用:可以完成類的初始化。靜態代碼塊隨著類的加載而執行,而且只執行一次(new 多個對象就只執行一次)。如果和主函數在同一類中,優先于主函數執行。

      Public:訪問權限最大。

      static:不需要對象,直接類名即可。

      void:主函數沒有返回值。

      Main:主函數特定的名稱。

      (String[] args):主函數的參數,是一個字符串數組類型的參數,jvm調用main方法時,傳遞的實際參數是 new String[0]。

      六、繼承的好處(面向對象特征之一)

      好處:

      1:提高了代碼的復用性。

      2:讓類與類之間產生了關系,提供了另一個特征多態的前提。

      父類的由來:其實是由多個類不斷向上抽取共性內容而來的。

      java中對于繼承,java只支持單繼承。java雖然不直接支持多繼承,但是保留了這種多繼承機制,進行改良。

      七、為什么不支持多繼承呢?

      因為當一個類同時繼承兩個父類時,兩個父類中有相同的功能,那么子類對象調用該功能時,運行哪一個呢?因為父類中的方法中存在方法體。

      但是java支持多重繼承。A繼承B B繼承C C繼承D。

      多重繼承的出現,就有了繼承體系。體系中的頂層父類是通過不斷向上抽取而來的。它里面定義的該體系最基本最共性內容的功能。

      所以,一個體系要想被使用,直接查閱該系統中的父類的功能即可知道該體系的基本用法。那么想要使用一個體系時,需要建立對象。建議建立最子類對象,因為最子類不僅可以使用父類中的功能。還可以使用子類特有的一些功能。

      ==簡單說:對于一個繼承體系的使用,查閱頂層父類中的內容,創建最底層子類的對象。 ==

      八、super和this的用法

      當子父類中出現一樣的屬性時,子類類型的對象,調用該屬性,值是子類的屬性值。

      如果想要調用父類中的屬性值,需要使用一個關鍵字:super

      This:代表是本類類型的對象引用。

      Super:代表是子類所屬的父類中的內存空間引用。

      注意:子父類中通常是不會出現同名成員變量的,因為父類中只要定義了,子類就不用再定義了,直接繼承過來用就可以了。

      九、super( )和this( )是否可以同時出現的構造函數中?

      兩個語句只能有一個定義在第一行,所以只能出現其中一個。

      十、super( )或者this( )為什么一定要定義在第一行?

      因為super( )或者this( )都是調用構造函數,構造函數用于初始化,所以初始化的動作要先完成。

      十一、final的特點

      1:這個關鍵字是一個修飾符,可以修飾類,方法,變量。

      2:被final修飾的類是一個最終類,不可以被繼承。

      3:被final修飾的方法是一個最終方法,不可以被覆蓋。

      4:被final修飾的變量是一個常量,只能賦值一次。

      其實這樣的原因的就是給一些固定的數據起個閱讀性較強的名稱。 不加final修飾不是也可以使用嗎?那么這個值是一個變量,是可以更改的。加了final,程序更為嚴謹。

      常量名稱定義時,有規范,所有字母都大寫,如果由多個單詞組成,中間用_ 連接。

      十二、抽象類的特點

      1:抽象方法只能定義在抽象類中,抽象類和抽象方法必須由abstract關鍵字修飾(可以描述類和方法,不可以描述變量)。

      2:抽象方法只定義方法聲明,并不定義方法實現。

      3:抽象類不可以被創建對象(實例化)。

      4:只有通過子類繼承抽象類并覆蓋了抽象類中的所有抽象方法后,該子類才可以實例化。否則,該子類還是一個抽象類。

      十三、接口都用于設計上的特點:(可以理解主板上提供的接口)

      1:接口是對外提供的規則。

      2:接口是功能的擴展。

      3:接口的出現降低了耦合性。

      十四、抽象類與接口的定義

      抽象類:一般用于描述一個體系單元,將一組共性內容進行抽取,特點:可以在類中定義抽象內容讓子類實現,可以定義非抽象內容讓子類直接使用。它里面定義的都是一些體系中的基本內容。

      接口:一般用于定義對象的擴展功能,是在繼承之外還需這個對象具備的一些功能。

      十五、抽象類和接口的區別和聯系

      抽象類和接口的共性:都是不斷向上抽取的結果。

      抽象類和接口的區別:

      1:抽象類只能被繼承,而且只能單繼承。

      接口需要被實現,而且可以多實現。

      2:抽象類中可以定義非抽象方法,子類可以直接繼承使用。

      接口中都有抽象方法,需要子類去實現。

      3:抽象類使用的是 is a 關系。

      接口使用的 like a 關系。

      4:抽象類的成員修飾符可以自定義。

      接口中的成員修飾符是固定的。全都是public的。

      十六、多 態(面向對象特征之一)★★★★★

      函數本身就具備多態性,某一種事物有不同的具體的體現。

      體現:父類引用或者接口的引用指向了自己的子類對象。//Animal a = new Cat();

      多態的好處:提高了程序的擴展性。

      多態的弊端:當父類引用指向子類對象時,雖然提高了擴展性,但是只能訪問父類中具備的方法,不可以訪問子類中特有的方法。(前期不能使用后期產生的功能,即訪問的局限性)

      多態的前提:

      1:必須要有關系,比如繼承、實現。

      2:通常會有覆蓋操作。

      十七、Object類

      所有類的直接或者間接父類,Java認為所有的對象都具備一些基本的共性內容,這些內容可以不斷的向上抽取,最終就抽取到了一個最頂層的類中的,該類中定義的就是所有對象都具備的功能。

      具體方法:

      1,boolean equals(Object obj):用于比較兩個對象是否相等,其實內部比較的就是兩個對象地址。

      而根據對象的屬性不同,判斷對象是否相同的具體內容也不一樣。所以在定義類時,一般都會復寫equals方法,建立本類特有的判斷對象是否相同的依據。

      public boolean equals(Object obj){ if(!(obj instanceof Person)) return false; Person p = (Person)obj; return this.age == p.age; }

      2,String toString():將對象變成字符串;默認返回的格式:類名@哈希值 = getClass().getName() + ‘@’ + Integer.toHexString(hashCode())

      為了對象對應的字符串內容有意義,可以通過復寫,建立該類對象自己特有的字符串表現形式。

      public String toString(){ return "person : "+age; }

      3,Class getClass():獲取任意對象運行時的所屬字節碼文件對象。

      4,int hashCode():返回該對象的哈希碼值。支持此方法是為了提高哈希表的性能。

      ==通常equals,toString,hashCode,在應用中都會被重寫,建立具體對象的特有的內容。==

      十八、匿名內部類

      沒有名字的內部類。就是內部類的簡化形式。一般只用一次就可以用這種形式。匿名內部類其實就是一個匿名子類對象。想要定義匿名內部類:需要前提,內部類必須繼承一個類或者實現接口。

      匿名內部類的格式:new 父類名&接口名(){ 定義子類成員或者覆蓋父類方法 }.方法。

      匿名內部類的使用場景:

      當函數的參數是接口類型引用時,如果接口中的方法不超過3個。可以通過匿名內部類來完成參數的傳遞。

      其實就是在創建匿名內部類時,該類中的封裝的方法不要過多,最好兩個或者兩個以內。

      //1 new Object(){ void show(){ System.out.println("show run"); } }.show(); //2 Object obj = new Object(){ void show(){ System.out.println("show run"); } }; obj.show();

      1和2的寫法正確嗎?有區別嗎?說出原因。

      寫法是正確的,1和2都是在通過匿名內部類建立一個Object類的子類對象。

      區別: 第一個可是編譯通過,并運行。 第二個編譯失敗,因為匿名內部類是一個子類對象,當用Object的obj引用指向時,就被提升為了 Object類型,而編譯時檢查Object類中是否有show方法,所以編譯失敗。

      十九、異 常★★★★

      異常:就是不正常。程序在運行時出現的不正常情況。其實就是程序中出現的問題。這個問題按照面向對象思想進行描述,并封裝成了對象。因為問題的產生有產生的原因、有問題的名稱、有問題的描述等多個屬性信息存在。當出現多屬性信息最方便的方式就是將這些信息進行封裝。異常就是java按照面向對象的思想將問題進行對象封裝。這樣就方便于操作問題以及處理問題。

      出現的問題有很多種,比如下標越界,空指針等都是。就對這些問題進行分類。而且這些問題都有共性內容比如:每一個問題都有名稱,同時還有問題描述的信息,問題出現的位置,所以可以不斷的向上抽取。形成了異常體系。

      try {

      需要被檢測的代碼;

      }

      catch(異常類 變量名){

      異常處理代碼;

      }

      fianlly{

      一定會執行的代碼;

      }

      二十、throw 和throws關鍵字的區別

      throw用于拋出異常對象,后面跟的是異常對象;throw用在函數內。

      throws用于拋出異常類,后面跟的異常類名,可以跟多個,用逗號隔開。throws用在函數上。

      通常情況:函數內容如果有throw,拋出異常對象,并沒有進行處理,那么函數上一定要聲明,否則編譯失敗。但是也有特殊情況。

      Java面試易錯題精選

      二十一、有哪些異常,它們的區別

      異常的分類:

      1:編譯時被檢查的異常,只要是Exception及其子類都是編譯時被檢測的異常。

      2:運行時異常,其中Exception有一個特殊的子類RuntimeException,以及RuntimeException的子類是運行異常,也就說這個異常是編譯時不被檢查的異常。

      編譯時被檢查的異常和運行時異常的區別:

      編譯被檢查的異常在函數內被拋出,函數必須要聲明,否編譯失敗。

      聲明的原因:是需要調用者對該異常進行處理。

      運行時異常如果在函數內被拋出,在函數上不需要聲明。

      不聲明的原因:不需要調用者處理,運行時異常發生,已經無法再讓程序繼續運行,所以,不讓調用處理的,直接讓程序停止,由調用者對代碼進行修正。

      ==常見異常:==

      1、腳標越界異常(IndexOutOfBoundsException)包括數組、字符串;

      2、空指針異常(NullPointerException)

      3、類型轉換異常:ClassCastException

      4、沒有這個元素異常:NullPointerException

      5、不支持操作異常;

      異常要盡量避免,如果避免不了,需要預先給出處理方式。比如家庭備藥,比如滅火器。

      二十二、訪問修飾符的范圍

      菩提本無樹,明鏡亦非臺。本來無疑物,何處染塵埃。--六祖慧能

      Java

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:視聲智能擬沖刺北交所上市!募集1.5億擴充智能家居等產品
      下一篇:如何讓替換文字(文字怎樣替換)
      相關文章
      4480yy私人影院亚洲| 亚洲日本一区二区三区| 国产亚洲一区二区三区在线| 亚洲人成在线播放网站岛国| 亚洲午夜福利AV一区二区无码| 国产成人精品日本亚洲11| 久久亚洲AV成人无码电影| 亚洲日本va午夜中文字幕一区| 亚洲乱码精品久久久久..| 国产亚洲精品91| 日韩亚洲精品福利| 在线观看亚洲网站| 亚洲第一黄色网址| AV在线播放日韩亚洲欧| 亚洲国产成人影院播放| 精品久久久久久久久亚洲偷窥女厕| 亚洲日产乱码一二三区别| 日韩色视频一区二区三区亚洲| 在线aⅴ亚洲中文字幕| 亚洲精品天堂成人片AV在线播放| 亚洲综合国产成人丁香五月激情| 久久亚洲sm情趣捆绑调教| 亚洲欧洲日产韩国在线| 亚洲人成电影院在线观看| 精品久久亚洲中文无码| 亚洲日韩精品无码专区加勒比☆| 亚洲精品伦理熟女国产一区二区| 日本亚洲色大成网站www久久| 久久亚洲av无码精品浪潮| 亚洲一区无码中文字幕| 亚洲91av视频| 亚洲高清在线mv| 四虎亚洲精品高清在线观看| 亚洲国产成人精品无码区花野真一 | 亚洲理论电影在线观看| 久久精品7亚洲午夜a| 亚洲成人高清在线观看| 亚洲欧美日韩国产成人| 亚洲国产成人久久综合碰| 在线日韩日本国产亚洲| 久久亚洲综合色一区二区三区|