最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

2022最新Java基礎(chǔ)面試題100題

2022-09-08 18:03 作者:要寵你上天  | 我要投稿

1、何為編程

編程就是讓計算機為解決某個問題而使用某種程序設(shè)計語言編寫程序代碼,并最終得到結(jié)果的過程。

為了使計算機能夠理解人的意圖,人類就必須要將需解決的問題的思路、方法、和手段通過計算機能夠理解的形式告訴計算機,使得計算機能夠根據(jù)人的指令一步一步去工作,完成某種特定的任務(wù)。這種人和計算機之間交流的過程就是編程。

2、什么是Java

Java是一門面向?qū)ο缶幊陶Z言,不僅吸收了C++語言的各種優(yōu)點,還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特征。Java語言作為靜態(tài)面向?qū)ο缶幊陶Z言的代表,極好地實現(xiàn)了面向?qū)ο罄碚?,允許程序員以優(yōu)雅的思維方式進行復(fù)雜的編程 。

3、jdk1.5之后的三大版本

Java SE(J2SE,Java 2 Platform Standard Edition,標準版)

Java SE 以前稱為 J2SE。它允許開發(fā)和部署在桌面、服務(wù)器、嵌入式環(huán)境和實時環(huán)境中使用的 Java 應(yīng)用程序。Java SE 包含了支持 JavaWeb 服務(wù)開發(fā)的類,并為Java EE和Java ME提供基礎(chǔ)。

Java EE(J2EE,Java 2 Platform Enterprise Edition,企業(yè)版)

Java EE 以前稱為 J2EE。企業(yè)版本幫助開發(fā)和部署可移植、健壯、可伸縮且安全的服務(wù)器端Java 應(yīng)用程序。Java EE 是在 Java SE 的基礎(chǔ)上構(gòu)建的,它提供 Web 服務(wù)、組件模型、管理和通信 API,可以用來實現(xiàn)企業(yè)級的面向服務(wù)體系結(jié)構(gòu)(service-orientedarchitecture,SOA)和 Web2.0應(yīng)用程序。2018年2月,Eclipse 宣布正式將 JavaEE 更名為 JakartaEE

Java ME(J2ME,Java 2 Platform Micro Edition,微型版)

Java ME 以前稱為 J2ME。Java ME 為在移動設(shè)備和嵌入式設(shè)備(比如手機、PDA、電視機頂盒和打印機)上運行的應(yīng)用程序提供一個健壯且靈活的環(huán)境。Java ME 包括靈活的用戶界面、健壯的安全模型、許多內(nèi)置的網(wǎng)絡(luò)協(xié)議以及對可以動態(tài)下載的連網(wǎng)和離線應(yīng)用程序的豐富支持。基于 Java ME 規(guī)范的應(yīng)用程序只需編寫一次,就可以用于許多設(shè)備,而且可以利用每個設(shè)備的本機功能。

4、JVM、JRE和JDK的關(guān)系

JVM

Java Virtual Machine是Java虛擬機,Java程序需要運行在虛擬機上,不同的平臺有自己的虛擬機,因此Java語言可以實現(xiàn)跨平臺。

JRE

Java Runtime Environment包括Java虛擬機和Java程序所需的核心類庫等。核心類庫主要是java.lang包:包含了運行Java程序必不可少的系統(tǒng)類,如基本數(shù)據(jù)類型、基本數(shù)學(xué)函數(shù)、字符串處理、線程、異常處理類等,系統(tǒng)缺省加載這個包如果想要運行一個開發(fā)好的Java程序,計算機中只需要安裝JRE即可。

JDK

Java Development Kit是提供給Java開發(fā)人員使用的,其中包含了Java的開發(fā)工具,也包括了JRE。所以安裝了JDK,就無需再單獨安裝JRE了。其中的開發(fā)工具:編譯工具(javac.exe),打包工具(jar.exe)等

JVM&JRE&JDK關(guān)系圖

5、什么是跨平臺性?原理是什么

所謂跨平臺性,是指java語言編寫的程序,一次編譯后,可以在多個系統(tǒng)平臺上運行。

實現(xiàn)原理:Java程序是通過java虛擬機在系統(tǒng)平臺上運行的,只要該系統(tǒng)可以安裝相應(yīng)的java虛擬機,該系統(tǒng)就可以運行java程序。

6、Java語言有哪些特點

簡單易學(xué)(Java語言的語法與C語言和C++語言很接近)

面向?qū)ο螅ǚ庋b,繼承,多態(tài))

平臺無關(guān)性(Java虛擬機實現(xiàn)平臺無關(guān)性)

支持網(wǎng)絡(luò)編程并且很方便(Java語言誕生本身就是為簡化網(wǎng)絡(luò)編程設(shè)計的)

支持多線程(多線程機制使應(yīng)用程序在同一時間并行執(zhí)行多項任)

健壯性(Java語言的強類型機制、異常處理、垃圾的自動收集等)

安全性

7、什么是字節(jié)碼?采用字節(jié)碼的最大好處是什么

字節(jié)碼:Java源代碼經(jīng)過虛擬機編譯器編譯后產(chǎn)生的文件(即擴展為.class的文件),它不面向任何特定的處理器,只面向虛擬機。

采用字節(jié)碼的好處:

Java語言通過字節(jié)碼的方式,在一定程度上解決了傳統(tǒng)解釋型語言執(zhí)行效率低的問題,同時又保留了解釋型語言可移植的特點。

所以Java程序運行時比較高效,而且,由于字節(jié)碼并不專對一種特定的機器,因此,Java程序無須重新編譯便可在多種不同的計算機上運行。

先看下java中的編譯器和解釋器:

Java中引入了虛擬機的概念,即在機器和編譯程序之間加入了一層抽象的虛擬機器。這臺虛擬的機器在任何平臺上都提供給編譯程序一個的共同的接口。

編譯程序只需要面向虛擬機,生成虛擬機能夠理解的代碼,然后由解釋器來將虛擬機代碼轉(zhuǎn)換為特定系統(tǒng)的機器碼執(zhí)行。在Java中,這種供虛擬機理解的代碼叫做字節(jié)碼(即擴展為.class的文件),它不面向任何特定的處理器,只面向虛擬機。

每一種平臺的解釋器是不同的,但是實現(xiàn)的虛擬機是相同的。Java源程序經(jīng)過編譯器編譯后變成字節(jié)碼,字節(jié)碼由虛擬機解釋執(zhí)行,虛擬機將每一條要執(zhí)行的字節(jié)碼送給解釋器,解釋器將其翻譯成特定機器上的機器碼,然后在特定的機器上運行,這就是上面提到的Java的特點的編譯與解釋并存的解釋。

Java源代碼---->編譯器---->jvm可執(zhí)行的Java字節(jié)碼(即虛擬指令)---->jvm---->jvm中解釋器----->機器可執(zhí)行的二進制機器碼---->程序運行。

8、什么是Java程序的主類?應(yīng)用程序和小程序的主類有何不同?

一個程序中可以有多個類,但只能有一個類是主類。在Java應(yīng)用程序中,這個主類是指包含main()方法的類。而在Java小程序中,這個主類是一個繼承自系統(tǒng)類JApplet或Applet的子類。應(yīng)用程序的主類不一定要求是public類,但小程序的主類要求必須是public類。主類是Java程序執(zhí)行的入口點。

9、Java應(yīng)用程序與小程序之間有那些差別?

簡單說應(yīng)用程序是從主線程啟動(也就是main()方法)。applet小程序沒有main方法,主要是嵌在瀏覽器頁面上運行(調(diào)用init()線程或者run()來啟動),嵌入瀏覽器這點跟flash的小游戲類似。

10、Java和C++的區(qū)別

我知道很多人沒學(xué)過C++,但是面試官就是沒事喜歡拿咱們Java和C++比呀!沒辦法!??!就算沒學(xué)過C++,也要記下來!

都是面向?qū)ο蟮恼Z言,都支持封裝、繼承和多態(tài)

Java不提供指針來直接訪問內(nèi)存,程序內(nèi)存更加安全

Java的類是單繼承的,C++支持多重繼承;雖然Java的類不可以多繼承,但是接口可以多繼承。

Java有自動內(nèi)存管理機制,不需要程序員手動釋放無用內(nèi)存

11、Oracle JDK 和 OpenJDK 的對比

1. Oracle JDK版本將每三年發(fā)布一次,而OpenJDK版本每三個月發(fā)布一次;

2. OpenJDK 是一個參考模型并且是完全開源的,而Oracle JDK是OpenJDK的一個實現(xiàn),并不是完全開源的;

3. Oracle JDK 比 OpenJDK 更穩(wěn)定。OpenJDK和Oracle JDK的代碼幾乎相同,但Oracle JDK有更多的類和一些錯誤修復(fù)。因此,如果您想開發(fā)企業(yè)/商業(yè)軟件,我建議您選擇Oracle JDK,因為它經(jīng)過了徹底的測試和穩(wěn)定。

某些情況下,有些人提到在使用OpenJDK 可能會遇到了許多應(yīng)用程序崩潰的問題,但是,只需切換到Oracle JDK就可以解決問題;

4. 在響應(yīng)性和JVM性能方面,Oracle JDK與OpenJDK相比提供了更好的性能;

5. Oracle JDK不會為即將發(fā)布的版本提供長期支持,用戶每次都必須通過更新到最新版本獲得支持來獲取最新版本;

6. Oracle JDK根據(jù)二進制代碼許可協(xié)議獲得許可,而OpenJDK根據(jù)GPL v2許可獲得許可。

12、Java有哪些數(shù)據(jù)類型

定義:Java語言是強類型語言,對于每一種數(shù)據(jù)都定義了明確的具體的數(shù)據(jù)類型,在內(nèi)存中分配了不同大小的內(nèi)存空間。

分類

基本數(shù)據(jù)類型

? ? ? 數(shù)值型

? ? ? 整數(shù)類型(byte,short,int,long)

? ? ? ?浮點類型(float,double)

? ? ? ?字符型(char)

? ? ? ?布爾型(boolean)

引用數(shù)據(jù)類型

? ? ? 類(class)

? ? ?接口(interface)

? ? ?數(shù)組([])

Java基本數(shù)據(jù)類型圖

13、switch 是否能作用在 byte 上,是否能作用在 long 上,是否能作用在 String 上

在 Java 5 以前,switch(expr)中,expr 只能是 byte、short、char、int。從 Java5 開始,Java 中引入了枚舉類型,expr 也可以是 enum 類型,從 Java 7 開始,expr 還可以是字符串(String),但是長整型(long)在目前所有的版本中都是不可以的。

14、用最有效率的方法計算 2 乘以 8

2 << 3(左移 3 位相當(dāng)于乘以 2 的 3 次方,右移 3 位相當(dāng)于除以 2 的 3 次方)。

15、Math.round(11.5) 等于多少?Math.round(-11.5)等于多少

Math.round(11.5)的返回值是 12,Math.round(-11.5)的返回值是-11。四舍五入的原理是在參數(shù)上加 0.5 然后進行下取整。

16、float f=3.4;是否正確

不正確。3.4 是雙精度數(shù),將雙精度型(double)賦值給浮點型(float)屬于下轉(zhuǎn)型(down-casting,也稱為窄化)會造成精度損失,因此需要強制類型轉(zhuǎn)換float f =(float)3.4; 或者寫成 float f =3.4F;。

17、short s1 = 1; s1 = s1 + 1;有錯嗎?short s1 = 1; s1 += 1;有錯嗎

對于 short s1 = 1; s1 = s1 + 1;由于 1 是 int 類型,因此 s1+1 運算結(jié)果也是 int型,需要強制轉(zhuǎn)換類型才能賦值給short 型。

而 short s1 = 1; s1 += 1;可以正確編譯,因為 s1+= 1;相當(dāng)于 s1 = (short(s1 + 1);其中有隱含的強制類型轉(zhuǎn)換。

18、Java語言采用何種編碼方案?有何特點?

Java語言采用Unicode編碼標準,Unicode(標準碼),它為每個字符制訂了一個唯一的數(shù)值,因此在任何的語言,平臺,程序都可以放心的使用。

19、什么Java注釋

定義:用于解釋說明程序的文字

單行注釋

格式: // 注釋文字

多行注釋

格式: /* 注釋文字 */

文檔注釋

格式:/** 注釋文字 */

作用

在程序中,尤其是復(fù)雜的程序中,適當(dāng)?shù)丶尤胱⑨尶梢栽黾映绦虻目勺x性,有利于程序的修改、調(diào)試和交流。注釋的內(nèi)容在程序編譯的時候會被忽視,不會產(chǎn)生目標代碼,注釋的部分不會對程序的執(zhí)行結(jié)果產(chǎn)生任何影響。注意事項:多行和文檔注釋都不能嵌套使用。

20、訪問修飾符 public,private,protected,以及不寫(默認)時的區(qū)別

定義:Java中,可以使用訪問修飾符來保護對類、變量、方法和構(gòu)造方法的訪問。Java 支持 4 種不同的訪問權(quán)限。

private : 在同一類內(nèi)可見。使用對象:變量、方法。 注意:不能修飾類(外部類)

default (即缺省,什么也不寫,不使用任何關(guān)鍵字): 在同一包內(nèi)可見,不使用任何修飾符。使用對象:類、接口、變量、方法。

protected : 對同一包內(nèi)的類和所有子類可見。使用對象:變量、方法。 注意:不能修飾類(外部類)。

public : 對所有類可見。使用對象:類、接口、變量、方法訪問


修飾符圖

21、&和&&的區(qū)別

&運算符有兩種用法:(1)按位與;(2)邏輯與。

&&運算符是短路與運算。邏輯與跟短路與的差別是非常巨大的,雖然二者都要求運算符左右兩端的布爾值都是true 整個表達式的值才是 true。

&&之所以稱為短路運算,是因為如果&&左邊的表達式的值是 false,右邊的表達式會被直接短路掉,不會進行運算。

注意:邏輯或運算符(|)和短路或運算符(||)的差別也是如此。

22、Java 有沒有 goto

goto 是 Java 中的保留字,在目前版本的 Java 中沒有使用。

23、final 有什么用?

用于修飾類、屬性和方法;

被final修飾的類不可以被繼承

被final修飾的方法不可以被重寫

被final修飾的變量不可以被改變,被final修飾不可變的是變量的引用,而不是引用指向的內(nèi)容,引用指向的內(nèi)容是可以改變的

24、final finally finalize區(qū)別

final可以修飾類、變量、方法,修飾類表示該類不能被繼承、修飾方法表示該方法不能被重寫、修飾變量表示該變量是一個常量不能被重新賦值。

finally一般作用在try-catch代碼塊中,在處理異常的時候,通常我們將一定要執(zhí)行的代碼方法finally代碼塊中,表示不管是否出現(xiàn)異常,該代碼塊都會執(zhí)行,一般用來存放一些關(guān)閉資源的代碼。

finalize是一個方法,屬于Object類的一個方法,而Object類是所有類的父類,該方法一般由垃圾回收器來調(diào)用,當(dāng)我們調(diào)用System.gc() 方法的時候,由垃圾回收器調(diào)用finalize(),回收垃圾,一個對象是否可回收的最后判斷。

25、this關(guān)鍵字的用法

this是自身的一個對象,代表對象本身,可以理解為:指向?qū)ο蟊旧淼囊粋€指針。

this的用法在java中大體可以分為3種:

1.普通的直接引用,this相當(dāng)于是指向當(dāng)前對象本身。

2.形參與成員名字重名,用this來區(qū)分:

publicPerson(String name,int age){this.name = name;this.age = age;}

3.引用本類的構(gòu)造函數(shù)

classPerson{private String name;privateint age;publicPerson(){}publicPerson(String name){this.name =name;}publicPerson(String name,int age){this(name);this.age = age;}}

26、super關(guān)鍵字的用法

super可以理解為是指向自己超(父)類對象的一個指針,而這個超類指的是離自己最近的一個父類。

super也有三種用法:

1.普通的直接引用

與this類似,super相當(dāng)于是指向當(dāng)前對象的父類的引用,這樣就可以用super.xxx來引用父類的成員。

2.子類中的成員變量或方法與父類中的成員變量或方法同名時,用super進行區(qū)分

classPerson{protected String name;publicPerson(String name){this.name = name;}}classStudentextendsPerson{private Stringname;publicStudent(String name, String name1){super(name);this.name = name1;}publicvoidgetInfo(){

System.out.println(this.name);//ChildSystem.out.println(super.name);//Father}}publicclassTest{publicstaticvoidmain(String[] args){ Student s1=newStudent("Father","Child"); s1.getInfo();}}

3、引用父類構(gòu)造函數(shù)

super(參數(shù)):調(diào)用父類中的某一個構(gòu)造函數(shù)(應(yīng)該為構(gòu)造函數(shù)中的第一條語句)。

this(參數(shù)):調(diào)用本類中另一種形式的構(gòu)造函數(shù)(應(yīng)該為構(gòu)造函數(shù)中的第一條語句)。

27、this與super的區(qū)別

super: 它引用當(dāng)前對象的直接父類中的成員(用來訪問直接父類中被隱藏的父類中成員數(shù)據(jù)或函數(shù),基類與派生類中有相同成員定義時如:super.變量名 super.成員函數(shù)據(jù)名(實參)

this:它代表當(dāng)前對象名(在程序中易產(chǎn)生二義性之處,應(yīng)使用this來指明當(dāng)前對象;如果函數(shù)的形參與類中的成員數(shù)據(jù)同名,這時需用this來指明成員變量名)

super()和this()類似,區(qū)別是,super()在子類中調(diào)用父類的構(gòu)造方法,this()在本類內(nèi)調(diào)用本類的其它構(gòu)造方法。

super()和this()均需放在構(gòu)造方法內(nèi)第一行。

盡管可以用this調(diào)用一個構(gòu)造器,但卻不能調(diào)用兩個。

this和super不能同時出現(xiàn)在一個構(gòu)造函數(shù)里面,因為this必然會調(diào)用其它的構(gòu)造函數(shù),其它的構(gòu)造函數(shù)必然也會有super語句的存在,所以在同一個構(gòu)造函數(shù)里面有相同的語句,就失去了語句的意義,編譯器也不會通過。

this()和super()都指的是對象,所以,均不可以在static環(huán)境中使用。包括:static變量,static方法,static語句塊。

從本質(zhì)上講,this是一個指向本對象的指針, 然而super是一個Java關(guān)鍵字。

28、static存在的主要意義

static的主要意義是在于創(chuàng)建獨立于具體對象的域變量或者方法。以致于即使沒有創(chuàng)建對象,也能使用屬性和調(diào)用方法!

static關(guān)鍵字還有一個比較關(guān)鍵的作用就是 用來形成靜態(tài)代碼塊以優(yōu)化程序性能。static塊可以置于類中的任何地方,類中可以有多個static塊。在類初次被加載的時候,會按照static塊的順序來執(zhí)行每個static塊,并且只會執(zhí)行一次。

為什么說static塊可以用來優(yōu)化程序性能,是因為它的特性:只會在類加載的時候執(zhí)行一次。因此,很多時候會將一些只需要進行一次的初始化操作都放在static代碼塊中進行。

29.static的獨特之處

1、被static修飾的變量或者方法是獨立于該類的任何對象,也就是說,這些變量和方法不屬于任何一個實例對象,而是被類的實例對象所共享。

怎么理解 “被類的實例對象所共享” 這句話呢?就是說,一個類的靜態(tài)成員,它是屬于大伙的【大伙指的是這個類的多個對象實例,我們都知道一個類可以創(chuàng)建多個實例!】,所有的類對象共享的,不像成員變量是自個的【自個指的是這個類的單個實例對象】

…我覺得我已經(jīng)講的很通俗了,你明白了咩?

2、在該類被第一次加載的時候,就會去加載被static修飾的部分,而且只在類第一次使用時加載并進行初始化,注意這是第一次用就要初始化,后面根據(jù)需要是可以再次賦值的。

3、static變量值在類加載的時候分配空間,以后創(chuàng)建類對象的時候不會重新分配。賦值的話,是可以任意賦值的!

4、被static修飾的變量或者方法是優(yōu)先于對象存在的,也就是說當(dāng)一個類加載完畢之后,即便沒有創(chuàng)建對象,也可以去訪問。

30、static應(yīng)用場景

因為static是被類的實例對象所共享,因此如果某個成員變量是被所有對象所共享的,那么這個成員變量就應(yīng)該定義為靜態(tài)變量。

因此比較常見的static應(yīng)用場景有:

1、修飾成員變量 2、修飾成員方法 3、靜態(tài)代碼塊 4、修飾類【只能修飾內(nèi)部類也就是靜態(tài)內(nèi)部類】 5、靜態(tài)導(dǎo)包

31、static注意事項

1、靜態(tài)只能訪問靜態(tài)。 2、非靜態(tài)既可以訪問非靜態(tài)的,也可以訪問靜態(tài)的。


需要完整面試資源可三聯(lián)后評論領(lǐng)取


2022最新Java基礎(chǔ)面試題100題的評論 (共 條)

分享到微博請遵守國家法律
长垣县| 通江县| 黄骅市| 宁城县| 科尔| 眉山市| 赣州市| 晋州市| 达拉特旗| 宝应县| 土默特右旗| 江口县| 德清县| 晋宁县| 濉溪县| 任丘市| 古交市| 大荔县| 牡丹江市| 项城市| 湾仔区| 资源县| 土默特右旗| 子长县| 吕梁市| 金阳县| 甘南县| 大埔县| 榆树市| 织金县| 北票市| 南陵县| 西丰县| 襄城县| 昌都县| 榆树市| 无极县| 白山市| 奉新县| 香河县| 定边县|