[不得不知道系列]Java面試你不得不知道的基礎(chǔ)知識一

當(dāng)今世界上使用最廣泛的編程語言之一是Java。Java是通用的高級編程語言。核心java是java編程技術(shù)概念的基礎(chǔ),該術(shù)語由sun Microsystems用來描述Java的標準版本(JSE)。核心Java只是Java的一部分,它代表J2SE,其中包含Java的所有基礎(chǔ)知識,包括一些原理和軟件包詳細信息。Java核心概念涵蓋了所有OOPS概念,特殊運算符,數(shù)據(jù)類型,包裝類,異常處理,多態(tài)性,多線程,鏈接列表,隊列,堆棧,數(shù)組列表。它最常用于開發(fā)桌面應(yīng)用程序和服務(wù)器環(huán)境(開發(fā)獨立應(yīng)用程序)。

JDK和JVM有什么區(qū)別?

JDK(Java開發(fā)工具包)是一個開發(fā)目的,它還包括執(zhí)行環(huán)境。但是JVM純粹是運行時環(huán)境,因此您將無法使用JVM編譯源文件。

OOPS的基本概念是什么?

抽象化

多態(tài)性

繼承

封裝

你能解釋多態(tài)嗎?

多態(tài)被簡要描述為“一個接口,許多實現(xiàn)”。多態(tài)性是能夠在不同上下文中為某事物賦予不同含義或用法的一種特征-具體來說,就是允許諸如變量,函數(shù)或?qū)ο笾惖膶嶓w具有多種形式。

內(nèi)部類和子類之間有什么區(qū)別?

內(nèi)部類是嵌套在另一個類中的一個類。內(nèi)部類具有對其嵌套的類的訪問權(quán)限,并且可以訪問在外部類中定義的所有變量和方法。

子類是從另一個稱為超類的類繼承的類。子類可以訪問其父類的所有公共和受保護的方法以及字段。

Java類的private,public是什么?

在Java中,訪問說明符是在定義訪問范圍的類名之前使用的關(guān)鍵字。類的訪問說明符的類型為:

  • public:類,方法,字段可從任何地方訪問。
  • Protected::方法,字段可以從它們所屬的同一類或子類以及同一包的類中訪問,但不能從外部訪問。
  • default: Method,Field,class只能從同一程序包訪問,而不能從其本機程序包外部訪問。
  • private:方法,字段可以從它們所屬的相同類中訪問。
您能解釋一下靜態(tài)方法和靜態(tài)變量嗎?

當(dāng)需要在一個類的多個對象之間共享方法或變量,而不是為每個對象創(chuàng)建單獨的副本時,我們使用static關(guān)鍵字使所有對象共享一個方法或變量。

Java支持運算符重載嗎?

沒有

可以重載方法嗎?

是的,派生類仍然可以覆蓋重載的方法。多態(tài)仍然可能發(fā)生。編譯器將不會綁定方法調(diào)用,因為它已被重載,因為它可能會在現(xiàn)在或?qū)肀桓采w。

什么是數(shù)據(jù)封裝,其意義是什么?

封裝是面向?qū)ο缶幊讨械囊粋€概念,用于在單個單元中組合屬性和方法。

封裝可幫助程序員遵循模塊化的方法進行軟件開發(fā),因為每個對象都有自己的一組方法和變量,并且其功能獨立于其他對象。封裝還用于數(shù)據(jù)隱藏。

什么是單例模式?舉例說明其用法

Java中的單例類只能有一個實例,因此其所有方法和變量都只屬于一個實例。單例類概念對于需要限制一個類的對象數(shù)量的情況很有用。

單例使用情況的最佳示例是,由于某些驅(qū)動程序限制或任何許可問題,只有一個數(shù)據(jù)庫連接存在限制。

什么是守護線程?

它是一個線程,不會阻止JVM在程序完成但該線程仍在運行時退出。守護程序線程的一個示例是垃圾回收。

Java中的循環(huán)是什么?三種循環(huán)類型是什么?

循環(huán)在編程中用于重復(fù)執(zhí)行一條語句或語句塊。Java中有三種循環(huán)類型:

for

在Java中,for循環(huán)用于重復(fù)執(zhí)行給定次數(shù)的語句。當(dāng)程序員知道執(zhí)行語句的次數(shù)時,將使用for循環(huán)。

While循環(huán)

當(dāng)某些語句需要重復(fù)執(zhí)行直到滿足條件時,使用while循環(huán)。在while循環(huán)中,在執(zhí)行語句之前先檢查條件。

do While

Do While循環(huán)與while循環(huán)相同,只是執(zhí)行語句塊后檢查條件的不同。因此,在do while循環(huán)的情況下,語句至少執(zhí)行一次。

您可以定義死鎖嗎?

死鎖描述了一種情況,其中兩個或多個線程永遠被阻塞,互相等待。

什么是無限循環(huán)?如何聲明無限循環(huán)?

無限循環(huán)無條件運行,并且無限運行。通過在語句塊的主體中??定義任何中斷邏輯,可以中斷無限循環(huán)。

無限循環(huán)聲明如下:

for(;;)

{

//要執(zhí)行的語句

//添加任何循環(huán)中斷邏輯

}

Continue和break語句有什么區(qū)別?

中斷和繼續(xù)是循環(huán)中使用的兩個重要關(guān)鍵字。在循環(huán)中使用break關(guān)鍵字時,循環(huán)會立即中斷,而在使用continue關(guān)鍵字時,當(dāng)前迭代會中斷,并且循環(huán)會繼續(xù)進行下一次迭代。

在下面的示例中,當(dāng)計數(shù)器達到4時,循環(huán)中斷。

for (counter=0;counter
  System.out.println(counter);
  If (counter==4) {
    Break;
  }
}

在下面的示例中,當(dāng)計數(shù)器達到4時,循環(huán)會跳至tonext迭代,而continue關(guān)鍵字之后的所有語句都將跳過當(dāng)前迭代。

for (counter=0;counter
  System.out.println(counter);
  If (counter==4) {
    continue;
  }
  System.outprintln(“This will not get printed when counter is 4”);
}
Java中的double和float變量有什么區(qū)別?

在Java中,float占用4個字節(jié)的內(nèi)存,而Double占用8個字節(jié)的內(nèi)存。浮點數(shù)是單精度浮點十進制數(shù),而雙精度數(shù)是雙精度十進制數(shù)。

什么是javac?

javac從* .java文件生成Java字節(jié)碼。它是您的源代碼的中間表示,其中包含指示

Java中的最終關(guān)鍵字是什么?舉個例子

在Java中,使用關(guān)鍵字Final聲明一個常量。值只能分配一次,分配后不能更改常量的值。

在下面的示例中,聲明了名稱為const_val的常量,并為其分配了一個值:

private Final int const_val=100

當(dāng)一個方法聲明為final方法時,它不能被子類覆蓋。此方法比任何其他方法都快,因為它們在編譯時已解決。

當(dāng)一個類聲明為final時,則不能將其子類化。示例String,Integer和其他包裝器類。

什么是三元運算符?

三元運算符(也稱為條件運算符)用于根據(jù)布爾值評估來決定將哪個值分配給變量。表示為?

在下面的示例中,如果等級為1,則為狀態(tài)分配值“Done”,否則為“Pending”。


public class conditionTest {

    public static void main(string args[]) {
    
        String status;
        
        int rank;
        
        status= (rank == 1) ? “Done”: “Pending”;
    
    }

}
Java中有6種不同類型的運算符?

在Java中,運算符可以分為以下六種類型:

算術(shù)運算符

用于算術(shù)計算。例如+,-,*,/,%,++,–

關(guān)系運算符

用于關(guān)系比較。例如==,!=,>,<,<=,> =

按位運算符

用于逐位操作。例如&,|,^,?

邏輯運算符

用于邏輯比較。例如&&,|| ,!

賦值運算符

用于為變量分配值。例如=,+ =,-=,* =,/ =

Java派生所有類的基類是什么?

java.lang.object

Java中的main()方法可以返回任何數(shù)據(jù)嗎?

在Java中,main()方法無法返回任何數(shù)據(jù),因此,始終使用無效的返回類型進行聲明。

什么是Java包?包裝的意義是什么?

在Java中,包是類和接口的集合,這些類和接口相互關(guān)聯(lián)在一起,因此捆綁在一起。軟件包的使用有助于開發(fā)人員對代碼進行模塊化,并對代碼進行分組以進行適當(dāng)?shù)闹赜?。將代碼打包到Packages中之后,就可以將其導(dǎo)入其他類中并使用了。

我們可以在沒有任何抽象方法的情況下將類聲明為Abstract嗎?

是的,即使沒有任何抽象方法,我們也可以在類名之前使用abstract關(guān)鍵字來創(chuàng)建一個抽象類。但是,如果一個類甚至具有一個抽象方法,則必須將其聲明為抽象方法,否則將產(chǎn)生錯誤。

堆內(nèi)存和堆棧內(nèi)存有什么區(qū)別?

堆內(nèi)存由應(yīng)用程序的所有部分使用。每當(dāng)創(chuàng)建對象時,它始終存儲在堆空間中,并且堆棧存儲器包含對該對象的引用。內(nèi)存管理在Heap內(nèi)存中更為復(fù)雜,因為它在全局范圍內(nèi)使用。

堆棧存儲器僅由一個執(zhí)行線程使用。堆棧內(nèi)存僅包含局部原始變量和堆空間中對象的引用變量。堆棧中的內(nèi)存管理以LIFO方式完成

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

抽象類和接口之間的主要區(qū)別在于,接口只能擁有沒有具體實現(xiàn)的公共靜態(tài)方法的聲明,而抽象類可以具有帶有或不帶有具體實現(xiàn)的帶有任何訪問說明符(公共,私有等)的成員。

使用抽象類和接口的另一個主要區(qū)別是,實現(xiàn)接口的類必須實現(xiàn)接口的所有方法,而從抽象類繼承的類則不需要實現(xiàn)其超類的所有方法。

一個類可以實現(xiàn)多個接口,但只能擴展一個抽象類。

接口對抽象類的性能影響是什么?

與抽象類相比,接口的性能較慢,因為接口需要額外的間接調(diào)用。開發(fā)人員要考慮的另一個關(guān)鍵因素是,任何類只能擴展一個抽象類,而一個類可以實現(xiàn)許多接口。

每當(dāng)在類中實現(xiàn)接口時,使用接口也給開發(fā)人員帶來了額外的負擔(dān);開發(fā)人員被迫實現(xiàn)每種接口方法。

導(dǎo)入軟件包是否也可以在Java中導(dǎo)入其子軟件包?

在Java中,當(dāng)導(dǎo)入包時,不會導(dǎo)入其子包,并且如果需要,開發(fā)人員需要分別導(dǎo)入它們。

例如,如果開發(fā)人員導(dǎo)入了一個軟件包university。*,則將裝入名為university的軟件包中的所有類,但不會裝入該子軟件包中的任何類。

我們可以將類的主要方法聲明為私有方法嗎?

在Java中,main方法必須是public static以便正確運行任何應(yīng)用程序。如果將main方法聲明為私有方法,則開發(fā)人員將不會獲得任何編譯錯誤,它將無法執(zhí)行,并會給出運行時錯誤。

我們?nèi)绾瓮ㄟ^引用將參數(shù)傳遞給函數(shù),而不是通過值傳遞?

在Java中,我們只能通過值而不是通過引用將參數(shù)傳遞給函數(shù)。

如何在Java中序列化對象?

在Java中,要通過序列化將對象轉(zhuǎn)換為字節(jié)流,該類將實現(xiàn)一個名為Serializable的接口。實現(xiàn)可序列化接口的類的所有對象均被序列化,其狀態(tài)保存在字節(jié)流中。

什么時候應(yīng)該使用序列化?

當(dāng)需要通過網(wǎng)絡(luò)傳輸數(shù)據(jù)時,使用串行化。使用序列化,可以保存對象的狀態(tài)并將其轉(zhuǎn)換為字節(jié)流。字節(jié)流通過網(wǎng)絡(luò)傳輸,并且在目標位置重新創(chuàng)建對象。

在Java中,在try塊后面緊跟一個catch塊是否強制進行異常處理?

嘗試阻止之后,需要緊接著是Catch阻止,finally阻止或二者兼有。從try塊引發(fā)的任何異常都需要捕獲在catch塊中,或者必須在代碼中止之前將要執(zhí)行的任何特定任務(wù)放入Final塊中。

即使在異常塊中發(fā)生某些異常,是否有任何方法可以跳過最終的異常塊?

如果在Try塊中引發(fā)異常,則控制傳遞到catch塊(如果存在),否則傳遞到finally塊。當(dāng)發(fā)生異常時,總是執(zhí)行finally塊,避免在finally塊中執(zhí)行任何語句的唯一方法是通過在try塊的末尾編寫以下代碼行來強行中止代碼:

System.exit(0);

一個類可以有多個構(gòu)造函數(shù)嗎?

是的,一個類可以具有多個帶有不同參數(shù)的構(gòu)造函數(shù)。用于創(chuàng)建對象的構(gòu)造函數(shù)取決于創(chuàng)建對象時傳遞的參數(shù)。

super關(guān)鍵字有什么作用?

當(dāng)您在子類中重寫方法時,可以使用super關(guān)鍵字來訪問該方法。

我們可以重寫類的靜態(tài)方法嗎?

我們不能覆蓋靜態(tài)方法。靜態(tài)方法屬于一個類,而不屬于單個對象,并且在編譯時(而不是在運行時)解析。即使我們嘗試覆蓋靜態(tài)方法,也不會遇到編譯錯誤,也不會在運行代碼時產(chǎn)生覆蓋的影響。

public class superclass {
    public void displayResult() {
        System.out.println(“Printing from superclass”);
    }
}

public class subclass extends superclass {

    public void displayResult() {
    
        System.out.println(“Displaying from subClass”);
        
        super.displayResult();
        
    }
    
    public static void main(String args[]) {
    
        subclass obj=new subclass();
        
        obj.displayResult();
    
    }

}

Output will be:

Displaying from subclass

Displaying from superclass
字符串是Java中的數(shù)據(jù)類型嗎?

字符串不是Java中的原始數(shù)據(jù)類型。在Java中創(chuàng)建字符串時,它實際上是創(chuàng)建的Java.Lang.String類的對象。創(chuàng)建此字符串對象后,可以在該字符串對象上使用String類的所有內(nèi)置方法。

  1. Java內(nèi)存管理面試指南一
  2. Java基礎(chǔ)面試指南一
  3. Java基礎(chǔ)面試指南二
  4. Java基礎(chǔ)面試指南三
  5. Java基礎(chǔ)面試指南四
  6. Java線程面試指南一
  7. Java線程面試指南二
  8. Redis面試指南一
  9. Kafka面試指南一
  10. Spring面試指南一
  11. SpringBoot面試指南一
  12. 微服務(wù)面試指南一

作者:分布式編程
出處:https://zthinker.com/
如果你喜歡本文,請長按二維碼,關(guān)注 分布式編程
.

分布式編程

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容