天天看點

【Java面試題】1.Java面試題,基礎知識

作者:流風不凍0205

1.Java語言有什麼特點?和C++有什麼關系和差別?

面向對象(封裝,繼承,多态);

平台無關性,具體表現在,Java是“一次編寫,到處運作”的語言。是以采用Java語言編寫的程式具有很好的可移植性,而保證這一點的原始是Java的虛拟機機制。在引入虛拟機之後,Java語言在不同的平台上運作不需要重新編譯;

可靠性,安全性;

支援多線程。C++語言沒有内置的多線程機制,是以必須調用作業系統的多線程功能來進行多線程程式設計,而Java語言提供了多線程支援;

支援網絡程式設計并且很友善。Java語言誕生就是為了簡化網絡程式設計設計的,是以Java語言不僅支援網絡程式設計而且很友善;

編譯與解釋并存。

Java和C++的關系和差別

Java C++
面向對象,支援封裝,繼承和多态
沒有指針 支援指針
不支援多繼承,但允許一個類實作多個接口 支援多繼承
自動進行無用記憶體回收操作 必須由程式釋放記憶體資源
不支援操作符重載 支援操作符重載
沒有結束符 字元串或者字元數組最後都會有一個額外的字元“\o”來表示結束
不提供goto語句,但goto作為關鍵字 提供goto語句

2.關于JVM,JDK和JRE之間的關系

JDK(Java Development Kit),是功能齊全的Java SDK。它擁有JRE所擁有的一切,還有編譯器javac和工具,如javadoc和jdb。它能夠建立和編譯程式。

JRE(Java Runtime Environment),它是運作已編譯Java程式所需的所有内容的集合,包括Java虛拟機JVM,Java類庫,java指令和其他的一些基礎構件。但是,它不能用于建立新程式。

JDK包含JRE,JRE包含JVM。

【Java面試題】1.Java面試題,基礎知識

JVM:Java虛拟機,即為JVM,是運作Java位元組碼的虛拟機。JVM有針對不同系統的特定實作(Windows,Linux,macOS),目的是使用相同的位元組碼,他們都會給出相同的結果。位元組碼和不同系統的JVM實作是Java語言“一次編譯,到處運作”的關鍵。

如果隻是為了運作一下Java程式的話,隻需要安裝JRE即可;如果需要進行Java程式設計方面的工作,那就需要安裝JDK。有時,即使你不需要進行Java開發,也需要安裝JDK。比如

用JSP部署Web應用程式,應用程式伺服器會将JSP轉換為Java servlet,并且需要使用JDK來編譯servlet。

那什麼是位元組碼?采用位元組碼的好處?

在Java中,JVM可以了解的代碼叫做位元組碼,即擴充名為.class的檔案。位元組碼檔案是由十六進制組成,JVM以兩個十六進制值為一組,即以位元組為機關進行讀取。它不面向任何特定的處理器,隻面向虛拟機。Java語言通過位元組碼的方式,在一定程度上解決了傳統解釋型語言執行效率低的問題,同時又保留了解釋型語言可移植的特點。是以Java程式運作比較高效。而且由于位元組碼并不針對一種特定的機器,是以,Java程式無需重新編譯既可在多種不同作業系統上的計算機上運作。

Java從源代碼到運作一般是下面3步:

【Java面試題】1.Java面試題,基礎知識

Java是編譯執行的語言,還是解釋執行的語言?

需要注意.class->機器碼這一步。這一步JVM類加載器首先加載位元組碼檔案,然後通過解釋器逐行解釋執行,這種執行速度會相對比較慢。而且有些方法和代碼塊是經常需要被調用的(熱點代碼),是以後面引進了JIT編譯器,JIT屬于運作時編譯。當JIT編譯器完成第一次編譯後,會将位元組碼對應的機器碼儲存下來,下次直接使用。機器碼的運作效率高于Java解釋器的。這就解釋了Java是編譯與解釋共存的語言。

3.Java有哪些資料類型?

資料類型分為兩種:基本資料類型和引用資料類型

基本資料類型:boolean(布爾型),float(單精度浮點型),char(字元型),byte(位元組型),

Short(短整型),int(整型),long(長整型),double(雙精度浮點型)

【Java面試題】1.Java面試題,基礎知識

引用資料類型:建立在基本資料類型上,包括數組,類和接口。

Java不支援C++中的指針類型,結構類型,聯合類型和枚舉類型。

字元型常量和字元串常量的差別?

【Java面試題】1.Java面試題,基礎知識

包裝類型是什麼?基本類型和包裝類型有什麼差別?

Java為每一個基本資料類型都引入了對應的包裝類型,int的包裝類就是Integer。

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

包裝類型:Boolean,Character,Byte,Short,Integer,Long,Float,Double

那麼基本類型和包裝類型的差別是什麼?

包裝類型可以為null,而基本類型不可以。 這使得包裝類型可以用于POJO中,而基本類型則不行。

那為什麼POJO的屬性必須要用包裝類型呢?

資料庫的查詢結果可能為null,如果使用基本類型,因為要自動拆箱(将包裝類型轉為基本類型,比如從Integer對象轉為int),就會抛出NullPointerException異常。

包裝類型可用于泛型,基本類型不可以。泛型使用基本類型時會編譯出錯。因為泛型在編譯時會進行類型擦除,最後隻保留原始類型,而原始類型隻能是Object類及其子類,基本類型是個特例。

基本類型比包裝類型更高效。基本類型在棧中直接存儲的具體數值,而包裝類型則存儲的是堆中的引用。比起基本類型,包裝類型需要占用更多的記憶體空間。

那什麼是自動裝箱和自動拆箱?

從Java5中開始引入了自動裝箱/拆箱機制,把基本類型轉換成包裝類型的過程叫做裝箱;反之,把包裝類型轉換成基本類型的過程叫做拆箱,使二者可以互相轉換。

自動裝箱:把基本資料類型重新轉化為對象。成為一個對象之後就可以調用對象所聲明的所有的方法。

【Java面試題】1.Java面試題,基礎知識

自動拆箱:将對象重新轉化為基本資料類型。

【Java面試題】1.Java面試題,基礎知識

因為對象時不能直接進行運算的,而是要轉化為基本資料類型後才能進行加減乘除。

繼續閱讀