CodeGym /Java Blog /Toto sisi /前 21 個 Java 面試問題
John Squirrels
等級 41
San Francisco

前 21 個 Java 面試問題

在 Toto sisi 群組發布
Java面試題數不勝數,無法在一篇文章中囊括所有。然而,根據 IT 公司的人力資源經理的說法,您可以在這裡找到一些非常常見的 Java 面試問題。 前 21 個 Java 面試問題 - 1
  1. “拆卸” public static void main(String args[])

    新生最流行的 Java 面試問題之一,而且非常簡單。

    • public是訪問修飾符。我們用它來指定訪問這個方法。這裡修飾符是“public”,所以任何類都可以訪問這個方法。

    • static. 這個 Java 關鍵字意味著我們在不創建類的新對象的情況下使用此方法。

    • Void是方法的返回類型。這意味著該方法不返回任何值。

    • main是方法的名稱。JVM“知道”它是應用程序的入口點(它應該有一個特定的簽名)。Main是主要執行發生的方法。

    • String args[]. 這是傳遞給 main 方法的參數。這裡我們有 Java 應用程序在運行時接受的 String 類型的參數。您可以在終端上輸入它們。

  2. equals()和 和有什麼不一樣==

    首先,“ ==”是一個運算符,而equals()是一個方法。我們使用==運算符進行引用比較(或地址比較)和equals()方法進行內容比較。這意味著==檢查兩個對像是否指向相同的內存位置,同時equals()比較對像中的值。

  3. 我們可以在沒有方法的情況下執行程序main()嗎?

    很多java基礎面試題真的很簡單。像這個。簡短的回答是:是的,我們可以。例如,我們可以使用靜態塊來做到這一點。

    您可以使用靜態塊來初始化靜態數據成員。它在方法之前執行main,在類加載時執行。

    
    class Example{  
     Static{
    System.out.println("static block is invoked");
    }  
      public static void main(String args[]){  
       System.out.println("Now main method");  
      }  
    }
    

    輸出是:

    
    static block is invoked
    Now main method
    
  4. 總的 main 方法不存在怎麼辦?如果您嘗試運行一個根本沒有 main 方法的普通類,則會出現下一個錯誤:Main method not found in class Test,請將 main 方法定義為:public static void main (String [] args) 或 JavaFX 應用程序類必須擴展 javafx.application.Application。錯誤本身表明,如果這是一個 JavaFX 應用程序並且該類是從 javafx.application.Application 繼承的,那麼它是可能的。
  5. 什麼是immutable對象?你能創建immutable對象嗎?

    您不能immutable在創建後修改類的對象。因此,一旦創建它們,就無法更改它們。如果您嘗試修改Immutable對象,您會得到一個新對象(克隆)並在創建時更改此克隆。

    一個很好的例子是String,它是immutable用 Java 編寫的。這意味著您不能更改對象本身,但可以更改對該對象的引用。

  6. 以下代碼創建了多少個對象?

    替代#4 的 Java 技術面試問題之一。

    
    String s1="Hello";  
    String s2="Hello";  
    String s3="Hello";  
    

    答案是“只有一個”,因為 Java 有一個字符串池。當我們使用 new() 運算符創建一個 String 對象時,它會在堆內存中創建一個新對象。如果我們使用 String 文字語法,就像在我們的示例中一樣,它可能會從 String 池中返回一個現有對象(如果它已經存在)。

  7. 以下代碼創建了多少個對象?

    
    String s = new String("Hello");
    

    有 2 個對象。一個在字符串常量池中(如果不存在的話),另一個在堆中。

  8. StringJava 中的類和StringBuilder類之間有什麼區別StringBuffer

    在頂級 Java 面試問題中有一位領導者。

    首先String是一個不可變類。這意味著您不能在創建後修改其內容。WhileStringBufferStringBuilder是可變類,因此您可以稍後更改它們。如果我們更改String對象的內容,它會創建一個新字符串,因此不會修改原始字符串。這就是為什麼 with 的性能StringBuffer優於 with 的原因String

    StringBufferStringBuilderthatStringBuffer的方法之間的主要區別是同步的,而StringBuilder's 不是。

  9. String使用文字和使用運算符創建的有什麼區別new()嗎?

    有。如果我們使用運算符創建一個字符串new(),它會出現在堆和字符串池中(如果不存在的話)。如果您String使用文字創建一個,它將在字符串池中創建(如果尚不存在)。字符串池是堆內的一個存儲區域,用於存儲字符串文字。

  10. 您可以在 Java 中重寫private或方法嗎?static

    新手的Java棘手面試問題之一。您真的不能在 Java 中重寫privatestatic方法。

    您不能覆蓋這些private方法,因為私有訪問說明符的範圍僅在類內。當你要覆蓋某些東西時,我們應該有父類和子類。如果父類的方法是private,則子類不能使用它,子類中的方法將被視為新方法(不會被覆蓋)。

    Static方法也不能被覆蓋,因為static方法是類本身的一部分,而不是類的任何對象的一部分。static當然,您可以在子類中聲明具有相同簽名的相同方法,但同樣,它們將被視為新方法。

  11. Abstract Class和之間的區別Interface

    與 OOP 原則相關的流行 Java 開發人員面試問題之一。首先,在 Java 中interface定義一個行為並abstract class創建層次結構。

    抽像類 界面
    抽像類中可以有一個方法體(非抽象方法) 接口只能有抽象方法。在 Java 8 或更新版本中,可以定義默認方法並直接在接口中實現它們。此外,Java 8 中的接口可以有靜態方法。
    實例變量可以在抽像類中 接口不能有實例變量。
    允許構造函數 接口不能有任何構造函數。
    允許靜態方法 不允許使用靜態方法
    類只能有一個抽象父類 一個接口可以實現不同的類
    抽像類可以提供接口的實現。 接口不能提供抽像類的實現。
    允許抽像類擴展其他 Java 類並實現多個 Java 接口。 一個接口只允許擴展另一個 Java 接口。
    Java 抽像類可以有私有和受保護的類成員 默認情況下,Java 接口的成員是公共的
  12. 我們可以static在類中聲明變量和方法abstract嗎?

    是的,可以static在方法中聲明變量和方法abstract。不需要使對象訪問靜態上下文。所以我們可以通過abstract類名訪問類內部聲明的靜態上下文abstract

  13. JVM分配了哪些類型的內存區域?

    類區存儲每個類的結構,例如,運行時常量池、字段、方法數據以及方法的所有代碼。

    是一個運行時數據區域,內存分配給對象。

    堆棧存儲幀。它包含局部變量和部分結果,並參與方法調用和返回。每個線程都有一個私有的 JVM 堆棧,與線程同時創建。每次調用方法時都會創建一個新框架。框架在其方法調用完成時被銷毀。

    程序計數器寄存器包含當前正在執行的 Java 虛擬機指令的地址。

    本機方法堆棧包含應用程序中使用的所有本機方法。

  14. 為什麼java中不允許多重繼承?

    這真的很複雜。想像三個類A, B,CC繼承Aand B。現在,AB具有相同的方法,您可以從子類對象調用它……哪個?A的還是B?這裡我們有歧義。

    如果您嘗試繼承兩個類,Java 會呈現編譯時錯誤。

  15. 我們可以重載該main()方法嗎?

    當然,通過使用方法重載,我們可以main在 Java 程序中擁有多個方法。試試看!

  16. 我們可以將構造函數聲明為嗎final

    沒有。構造函數不能聲明為 afinal因為它不能被繼承。所以將構造函數聲明為final. 但是,如果您嘗試這樣做,Java 編譯器會向您拋出一個錯誤。

  17. 我們可以將接口聲明為final嗎?

    不,我們不能這樣做。接口不能是final因為接口應該由某個類根據其定義來實現。所以做接口是沒有意義的final。但是,如果您嘗試這樣做,編譯器將顯示錯誤。

  18. static binding和 和有什麼不一樣dynamic binding

    可以由編譯binding器在編譯時解析的調用static或早期綁定。Binding所有static,privatefinal方法都是在編譯時完成的。

    Dynamic binding編譯器中無法選擇要調用的方法。覆蓋是一個完美的例子dynamic binding。重寫父類和子類具有相同的方法。

    
    Static Binding
    class Cat{  
     private void talk()
    {System.out.println("cat is mewing...");
    }  
      
     public static void main(String args[]){  
      Cat cat=new Cat();  
      cat.talk();  
     }  
    }  
    Dynamic Binding
    class Animal{  
     void talk(){
    System.out.println("animal is talking...");
    }  
    }  
      
    class Cat extends Animal{  
     void talk(){
    System.out.println("cat is talking...");
    }    
     public static void main(String args[]){  
      Animal animal=new Cat();  
      animal.talk();  
     }  
    }
    
  19. 如何在 Java 中創建只讀類?

    您可以通過將所有類的字段設為私有來實現。只讀類只有 getter 方法,這些方法將類的私有屬性返回給方法main。您無法修改此屬性,原因是缺少 setter 方法。

    
    public class HockeyPlayer{    
    private String team ="Maple leaf";    
    public String getTeam(){    
    return team;    
    }    
    }
    
  20. 如何在 Java 中創建只寫類?

    同樣,您應該製作所有班級的字段private。現在,您的只寫類應該只有 setter 方法而沒有 getter。因此,我們無法讀取類的屬性。

    
    public class HockeyPlayer{       
    private String team;    
    public void setTeam(String college){    
    this.team = team;    
    }    
    }    
    
  21. 每個try塊後面必須跟一個catch塊,不是嗎?

    沒有。這不是必須的。每個try塊可以沒有catch塊。它後面可以跟一個 catch 塊或 finally 塊,甚至根本沒有它們。

    
    public class Main{  
         public static void main(String []args){  
            try{  
                int variable = 1;   
                System.out.println(variable/0);  
            }  
            finally  
            {  
                System.out.println("the other part of the program...");  
            }  
         }  
    }
    

    輸出:

    
    Exception in thread main java.lang.ArithmeticException:/ by zero
    the other part of the program...
    

    再舉一個例子:
    
    class Main {
            public static void main(String[] args) throws IOException {
                try(InputStreamReader inputStreamReader = new InputStreamReader(System.in);
                    BufferedReader reader = new BufferedReader(inputStreamReader)){
                    System.out.println("test");
                }
            }
        }
    

    輸出:

    
    test
    

    PS:在 Java 8 之前,接口中的方法只能是抽象的。在 Java 8 或更新版本中,可以定義默認方法並直接在接口中實現它們。
  22. throw和關鍵字有什麼區別throws

    Throws用於聲明異常,因此它的工作方式類似於塊try-catchThrow關鍵字用於從方法或任何其他代碼塊中顯式拋出異常。

    Throw後跟一個Exception類的實例,throws 後跟異常類名。

    Throw在方法體中用於拋出異常。Throws在方法簽名中用於聲明方法中存在的語句中可能發生的異常。

    允許一次拋出一個異常,但您可以通過使用throw關鍵字聲明它們來處理多個異常。您可以聲明多個異常,例如,public void method()throws IOException, SQLException

這裡我們只有幾個java面試問題和答案。本文是訪談系列的第一篇。下一個(即將推出)是關於數據結構的問題。
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION