
-
“拆卸”
public static void main(String args[])
。新生最流行的 Java 面試問題之一,而且非常簡單。
-
public
是訪問修飾符。我們用它來指定訪問這個方法。這裡修飾符是“public”,所以任何類都可以訪問這個方法。 -
static
. 這個 Java 關鍵字意味著我們在不創建類的新對象的情況下使用此方法。 -
Void
是方法的返回類型。這意味著該方法不返回任何值。 -
main
是方法的名稱。JVM“知道”它是應用程序的入口點(它應該有一個特定的簽名)。Main
是主要執行發生的方法。 -
String args[]
. 這是傳遞給 main 方法的參數。這裡我們有 Java 應用程序在運行時接受的 String 類型的參數。您可以在終端上輸入它們。
-
-
equals()
和 和有什麼不一樣==
?首先,“
==
”是一個運算符,而equals()
是一個方法。我們使用==
運算符進行引用比較(或地址比較)和equals()
方法進行內容比較。這意味著==
檢查兩個對像是否指向相同的內存位置,同時equals()
比較對像中的值。 -
我們可以在沒有方法的情況下執行程序
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
總的 main 方法不存在怎麼辦?如果您嘗試運行一個根本沒有 main 方法的普通類,則會出現下一個錯誤:Main method not found in class Test,請將 main 方法定義為:public static void main (String [] args) 或 JavaFX 應用程序類必須擴展 javafx.application.Application。錯誤本身表明,如果這是一個 JavaFX 應用程序並且該類是從 javafx.application.Application 繼承的,那麼它是可能的。
-
什麼是
immutable
對象?你能創建immutable
對象嗎?您不能
immutable
在創建後修改類的對象。因此,一旦創建它們,就無法更改它們。如果您嘗試修改Immutable
對象,您會得到一個新對象(克隆)並在創建時更改此克隆。一個很好的例子是
String
,它是immutable
用 Java 編寫的。這意味著您不能更改對象本身,但可以更改對該對象的引用。 -
以下代碼創建了多少個對象?
替代#4 的 Java 技術面試問題之一。
String s1="Hello"; String s2="Hello"; String s3="Hello";
答案是“只有一個”,因為 Java 有一個字符串池。當我們使用 new() 運算符創建一個 String 對象時,它會在堆內存中創建一個新對象。如果我們使用 String 文字語法,就像在我們的示例中一樣,它可能會從 String 池中返回一個現有對象(如果它已經存在)。
-
以下代碼創建了多少個對象?
String s = new String("Hello");
有 2 個對象。一個在字符串常量池中(如果不存在的話),另一個在堆中。
-
String
Java 中的類和StringBuilder
類之間有什麼區別StringBuffer
?在頂級 Java 面試問題中有一位領導者。
首先
String
是一個不可變類。這意味著您不能在創建後修改其內容。WhileStringBuffer
和StringBuilder
是可變類,因此您可以稍後更改它們。如果我們更改String
對象的內容,它會創建一個新字符串,因此不會修改原始字符串。這就是為什麼 with 的性能StringBuffer
優於 with 的原因String
。StringBuffer
和StringBuilder
thatStringBuffer
的方法之間的主要區別是同步的,而StringBuilder
's 不是。 -
String
使用文字和使用運算符創建的有什麼區別new()
嗎?有。如果我們使用運算符創建一個字符串
new()
,它會出現在堆和字符串池中(如果不存在的話)。如果您String
使用文字創建一個,它將在字符串池中創建(如果尚不存在)。字符串池是堆內的一個存儲區域,用於存儲字符串文字。 -
您可以在 Java 中重寫
private
或方法嗎?static
新手的Java棘手面試問題之一。您真的不能在 Java 中重寫
private
或static
方法。您不能覆蓋這些
private
方法,因為私有訪問說明符的範圍僅在類內。當你要覆蓋某些東西時,我們應該有父類和子類。如果父類的方法是private
,則子類不能使用它,子類中的方法將被視為新方法(不會被覆蓋)。Static
方法也不能被覆蓋,因為static
方法是類本身的一部分,而不是類的任何對象的一部分。static
當然,您可以在子類中聲明具有相同簽名的相同方法,但同樣,它們將被視為新方法。 -
Abstract Class
和之間的區別Interface
與 OOP 原則相關的流行 Java 開發人員面試問題之一。首先,在 Java 中
interface
定義一個行為並abstract class
創建層次結構。抽像類 界面 抽像類中可以有一個方法體(非抽象方法) 接口只能有抽象方法。在 Java 8 或更新版本中,可以定義默認方法並直接在接口中實現它們。此外,Java 8 中的接口可以有靜態方法。 實例變量可以在抽像類中 接口不能有實例變量。 允許構造函數 接口不能有任何構造函數。 允許靜態方法 不允許使用靜態方法 類只能有一個抽象父類 一個接口可以實現不同的類 抽像類可以提供接口的實現。 接口不能提供抽像類的實現。 允許抽像類擴展其他 Java 類並實現多個 Java 接口。 一個接口只允許擴展另一個 Java 接口。 Java 抽像類可以有私有和受保護的類成員 默認情況下,Java 接口的成員是公共的 -
我們可以
static
在類中聲明變量和方法abstract
嗎?是的,可以
static
在方法中聲明變量和方法abstract
。不需要使對象訪問靜態上下文。所以我們可以通過abstract
類名訪問類內部聲明的靜態上下文abstract
。 -
JVM分配了哪些類型的內存區域?
類區存儲每個類的結構,例如,運行時常量池、字段、方法數據以及方法的所有代碼。
堆是一個運行時數據區域,內存分配給對象。
堆棧存儲幀。它包含局部變量和部分結果,並參與方法調用和返回。每個線程都有一個私有的 JVM 堆棧,與線程同時創建。每次調用方法時都會創建一個新框架。框架在其方法調用完成時被銷毀。
程序計數器寄存器包含當前正在執行的 Java 虛擬機指令的地址。
本機方法堆棧包含應用程序中使用的所有本機方法。
-
為什麼java中不允許多重繼承?
這真的很複雜。想像三個類
A
,B
,C
和C
繼承A
andB
。現在,A
類B
具有相同的方法,您可以從子類對象調用它……哪個?A
的還是B
?這裡我們有歧義。如果您嘗試繼承兩個類,Java 會呈現編譯時錯誤。
-
我們可以重載該
main()
方法嗎?當然,通過使用方法重載,我們可以
main
在 Java 程序中擁有多個方法。試試看! -
我們可以將構造函數聲明為嗎
final
?沒有。構造函數不能聲明為 a
final
因為它不能被繼承。所以將構造函數聲明為final
. 但是,如果您嘗試這樣做,Java 編譯器會向您拋出一個錯誤。 -
我們可以將接口聲明為
final
嗎?不,我們不能這樣做。接口不能是
final
因為接口應該由某個類根據其定義來實現。所以做接口是沒有意義的final
。但是,如果您嘗試這樣做,編譯器將顯示錯誤。 -
static binding
和 和有什麼不一樣dynamic binding
?可以由編譯
binding
器在編譯時解析的調用static
或早期綁定。Binding
所有static
,private
和final
方法都是在編譯時完成的。在
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(); } }
-
如何在 Java 中創建只讀類?
您可以通過將所有類的字段設為私有來實現。只讀類只有 getter 方法,這些方法將類的私有屬性返回給方法
main
。您無法修改此屬性,原因是缺少 setter 方法。public class HockeyPlayer{ private String team ="Maple leaf"; public String getTeam(){ return team; } }
-
如何在 Java 中創建只寫類?
同樣,您應該製作所有班級的字段
private
。現在,您的只寫類應該只有 setter 方法而沒有 getter。因此,我們無法讀取類的屬性。public class HockeyPlayer{ private String team; public void setTeam(String college){ this.team = team; } }
-
每個
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 或更新版本中,可以定義默認方法並直接在接口中實現它們。 -
throw
和關鍵字有什麼區別throws
?Throws
用於聲明異常,因此它的工作方式類似於塊try-catch
。Throw
關鍵字用於從方法或任何其他代碼塊中顯式拋出異常。Throw
後跟一個Exception
類的實例,throws 後跟異常類名。Throw
在方法體中用於拋出異常。Throws
在方法簽名中用於聲明方法中存在的語句中可能發生的異常。允許一次拋出一個異常,但您可以通過使用
throw
關鍵字聲明它們來處理多個異常。您可以聲明多個異常,例如,public void method()throws IOException
,SQLException
。
GO TO FULL VERSION