日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

牛客java面试题总结版(一)

發布時間:2025/4/16 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 牛客java面试题总结版(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.什么是Java虛擬機(JVM)?為什么Java被稱作是“平臺無關的編程語言”?
官方版:Java虛擬機是一個可以執行Java字節碼的虛擬機進程。Java源文件被編譯成能被Java虛擬機執行的字節碼文件。
Java被設計成允許應用程序可以運行在任意的平臺,而不需要程序員為每一個平臺單獨重寫或者是重新編譯。Java虛擬機讓這個變為可能,因為它知道底層硬件平臺的指令長度和其他特性。

大神版:鏈接:https://www.nowcoder.com/questionTerminal/a90230b35b5f4a7287f779ecdd88841d
java的跨平臺不是java源程序的跨平臺 ,如果是這樣,那么所以語言都是跨平臺的, java源程序先經過javac編譯器編譯成二進制的.class字節碼文件(java的跨平臺指的就是.class字節碼文件的跨平臺,.class字節碼文件是與平臺無關的),.class文件再運行在jvm上,java解釋器(jvm的一部分)會將其解釋成對應平臺的機器碼執行,所以java所謂的跨平臺就是在不同平臺上安裝了不同的jvm,而在不同平臺上生成的.class文件都是一樣的,而.class文件再由對應平臺的jvm解釋成對應平臺的機器碼執行。 最后解釋下機器碼和字節碼的區別: 一,機器碼,完全依附硬件而存在~并且不同硬件由于內嵌指令集不同,即使相同的0 1代碼 意思也可能是不同的~換句話說,根本不存在跨平臺性~比如~不同型號的CPU,你給他個指令10001101,他們可能會解析為不同的結果~ 二,我們知道JAVA是跨平臺的,為什么呢?因為他有一個jvm,不論哪種硬件,只要你裝有jvm,那么他就認識這個JAVA字節碼~~~~至于底層的機器碼,咱不用管,有jvm搞定,他會把字節碼再翻譯成所在機器認識的機器碼~~~

2.JDK和JRE的區別是什么?
官方版:Java運行時環境(JRE)。它包括Java虛擬機、Java核心類庫和支持文件。它不包含開發工具(JDK)–編譯器、調試器和其他工具。
Java開發工具包(JDK)是完整的Java軟件開發包,包含了JRE,編譯器和其他的工具(比如:JavaDoc,Java調試器),可以讓開發者開發、編譯、執行Java應用程序。

大神版:鏈接:https://www.nowcoder.com/questionTerminal/36bd480a52d542298a8ca2056021f774
JRE: Java Runtime Environment
JDK:Java Development Kit
JRE顧名思義是java運行時環境,包含了java虛擬機,java基礎類庫。是使用java語言編寫的程序運行所需要的軟件環境,是提供給想運行java程序的用戶使用的。
JDK顧名思義是java開發工具包,是程序員使用java語言編寫java程序所需的開發工具包,是提供給程序員使用的。JDK包含了JRE,同時還包含了編譯java源碼的編譯器javac,還包含了很多java程序調試和分析的工具:jconsole,jvisualvm等工具軟件,還包含了java程序編寫所需的文檔和demo例子程序。
如果你需要運行java程序,只需安裝JRE就可以了。如果你需要編寫java程序,需要安裝JDK。
JRE根據不同操作系統(如:windows,linux等)和不同JRE提供商(IBM,ORACLE等)有很多版本

3.”static”關鍵字是什么意思?Java中是否可以覆蓋(override)一個private或者是static的方法?
官方版:“static”關鍵字表明一個成員變量或者是成員方法可以在沒有所屬的類的實例變量的情況下被訪問。
Java中static方法不能被覆蓋,因為方法覆蓋是基于運行時動態綁定的,而static方法是編譯時靜態綁定的。static方法跟類的任何實例都不相關,所以概念上不適用。
java中也不可以覆蓋private的方法,因為private修飾的變量和方法只能在當前類中使用,如果是其他的類繼承當前類是不能訪問到private變量或方法的,當然也不能覆蓋。
大神版:鏈接:https://www.nowcoder.com/questionTerminal/6f66f55a1f844e21b580e73d36223cf7
Static表示靜態的意思,可用于修飾成員變量和成員函數,被靜態修飾的成員函數只能訪問靜態成員,不可以訪問非靜態成員。靜態是隨著類的加載而加載的,因此可以直接用類進行訪問。 重寫是子類中的方法和子類繼承的父類中的方法一樣(函數名,參數,參數類型,反回值類型),但是子類中的訪問權限要不低于父類中的訪問權限。重寫的前提是必須要繼承,private修飾不支持繼承,因此被私有的方法不可以被重寫。靜態方法形式上可以被重寫,即子類中可以重寫父類中靜態的方法。但是實際上從內存的角度上靜態方法不可以被重寫。

附一篇代碼:

class Super{ static String greeting(){ return "Good night"; } String name(){ return "Richard"; } } class Sub extends Super{ static String greeting(){ return "Hello"; } String name(){ return "Dick"; } } class Test{ public static void main(String[] args){ Super s = new Sub(); System.out.println(s.greeting()+","+s.name()); } }

運行結果:Good night,Dick
大佬的解釋是:這個例子說明“實例方法被覆蓋,靜態方法被隱藏”
這里一直不明白靜態方法被隱藏是什么意思,直到看到這句話:**子類重寫父類的static方法時,編譯的時候誠信子類特性,但運行時,確實用的父類方法,因為虛擬機把子類的static方法隱藏了。**?了解!

4.是否可以在static環境中直接訪問非static變量?
官方版:static變量在Java中是屬于類的,它在所有的實例中的值是一樣的。當類被Java虛擬機載入的時候,會對static變量進行初始化。如果你的代碼嘗試不用實例來訪問非static的變量,編譯器會報錯,因為這些變量還沒有被創建出來,還沒有跟任何實例關聯上。

大神版:因為靜態的成員屬于類,隨著類的加載而加載到靜態方法區內存,當類加載時,此時不一定有實例創建,沒有實例,就不可以訪問非靜態的成員。

PS:不可以直接訪問,但可以間接訪問,在static方法中new一個類的實例,然后借用它訪問非static變量既ok(比如main()函數)。

5.Java支持的數據類型有哪些?什么是自動拆裝箱?
Java語言支持的8種基本數據類型是:
byte
short
int
long
float
double
boolean
char
自動裝箱是Java編譯器在基本數據類型和對應的對象包裝類型之間做的一個轉化。比如:把int轉化成Integer,double轉化成Double,等等。反之就是自動拆箱。
Java支持的數據類型包括兩種:一種是基本數據類型,包含byte,char,short, boolean ,int , long, float,double;另一種是引用類型:如String等,其實是對象的引用,JVM中虛擬棧中存的是對象的地址,創建的對象實質在堆中,通過地址來找到堆中的對象的過程,即為引用類型。自動裝箱就是Java編譯器在基本數據類型和對應的對象包裝類型間的轉化,即int轉化為Integer,自動拆箱是Integer調用其方法將其轉化為int的過程

大神解釋:自動裝箱就是編譯器把java基本數據類型轉換成對應對象包裝類型的過程,比如int轉換成Integer,double轉換成Double,反之就是自動拆箱 。
引用類型聲明的變量是指該變量在內存中實際存儲的是一個引用地址,實體在堆中。引用類型包括類、數組、接口等。而包裝類也屬于引用類型,自動裝箱、拆箱就是基本類型和引用類型(此處為包裝類型)之間的轉化。而轉化為引用類型之后,就可以new一個對象,從而就可以調用包裝類型中的封裝好的方法,方便使用。

總結

以上是生活随笔為你收集整理的牛客java面试题总结版(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。