#下面為大家分享一些java實習生基礎面試題目:
#(更多相關面試題推薦:java面試題目及答案)
1、Java到底是什麼東西?
Java是一款物件導向的程式語言,是SUN(史丹佛大學網路公司)1995年推出的,在2010年被ORACLE收購
2、Java這麼熱門它有什麼特點呢?
Java是跨平台性的語言(一處編譯,到處執行)。
例如:Java在Windows平台中寫hello.java檔—>編譯成hello.class檔;在不同的作業系統中安裝對應的Java虛擬機器(所有的系統平台都必須有JVM才能執行Java編譯的檔案),就可以直接執行
3、Java的三種技術架構
Java三種基本技術架構分別是:JavaSE、JavaEE、JavaME
JavaSE:是JavaEE與JavaME的基礎,是非常平面話的
JavaEE:適合開發者的平台主要針對WEB應用系統的開發
JavaME:開發小型的電子消費品;例如:手機上的APP;機器上的語言(電梯、掃地機器人)
4、在寫Java程式時的注意點
(1)、Java是大小寫敏感的,對應的Hello和hello是不同的
(2)、Java對於所有的類別來說,類別的首字母應該大寫、若類別名稱有多個單字組成,則每個單字首字母都應該大寫。如:MyFirstJava
(3)、Java所有的方法名首字母都應該小寫,如有多個單字組成,則後面的單字首字母要大寫。如:findByName
(4)、來源檔案必須與類別名稱一致
#5、Java有那幾個基本資料型別
Java有八種基本資料型別: byte、short、int、long、float、double、char、boolean(六種數字型別:四個整數型(byte、short、int、long),兩個浮點型(float、double))
byte:資料型態是8位元、有符號的,以二進位補碼表示的整數。用於大型數組中節約空間,用為byte變數佔用的空間只有int型別的四分之一。對應的包裝類別:Byte,取值(27- 27-1)
short:資料型別是16位元、以二進位補碼表示的整數。 short資料型別也可以像byte那樣節約空間。一個short變數是int型變數的二分之一。對應的包裝類別:Short。取值(215- 215-1)
int:資料型別是32位元、有符號的,以二進位補碼表示的整數。一般的整數變數預設為int型別。取值(231- 231-1)
long:資料型別是64位,有符號的,以二進位補碼表示的整數。這種資料型別主要使用在需要比較大整數的系統上。取值(263- 263-1)
float:資料型別是單精確度、32位元的浮點數。 float在儲存大型浮點數組的時候可以節省記憶體空間。預設值是0.0f。浮點數不能用來表示精確的值,如貨幣。
double:資料型態是雙精確度、64位元的浮點數。浮點數的預設類型位double類型。 double類型同樣不能表示精確的值,如貨幣。預設值是0.0d。
char:類型是一個單一的16位元Unicode字元。 char資料類型可以儲存任何字元。但只能儲存一個字元
boolean:資料類型表示一位數字訊息,只有兩個取值:true和false。這種類型只作為一種標誌來記錄true\false情況,預設值是false。
6、存取權限修飾符分別是什麼?
存取權限修飾符有:public、protected、default(預設不寫)、private
public:最大存取權,用於對外的介面
protected:用於保護子類別傳遞給子類別一種繼承的東西
default:是針對與本套件的存取而設計的
private:存取權限僅限於類別的內部,不能被外層的類別存取
7、怎樣才能運行一個程式?
所有的Java程式都是由public static viod main(String []args){}方法開始執行。
8、Java中常提到的物件是什麼?
物件是類別的一個實例,有狀態有行為。
例如:一隻狗是個對象,它的狀態有:顏色、名字、品種;行為有:搖尾巴、叫、吃等。
軟體物件也有狀態和行為。軟體的物件就是屬性,行為透過方法體現
9、類別是什麼?
類別是一個模板,它描述一類別物件的行為和狀態,一個類別可以擁有多個方法
10、類別裡面的方法,要如何去建構?
建立一個物件的時候,至少要呼叫一個建構方法。建構方法的名稱必須與類別同名,一個類別可以有多個建構方法。
11、如何創造一個物件?
物件是根據類別建立的。在Java中,使用關鍵字new來建立一個新的物件。建立對象需要三個步驟:
宣告:宣告一個對象,包括對象的名稱和對象的類型。
實例化:使用關鍵字new來建立一個物件
初始化:使用new來建立物件時會呼叫建構方法初始化物件
12、來源文件的聲明有聲明規則?
(1)、原始檔案只能有一個public類別
(2)、可以有多個非public類別
(3)、原始檔案的名稱必須與類別同名
(4)、如果原始檔定義在某個包內,那麼導包應該在原始檔的首行。
(5)、如果原始檔包含import語句,那麼在套件語句和類別之間定義,如果沒有package語句,那麼import語句應該在原始檔最前面
(6)、import語句和package語句對來源文件中定義的所有類別都有效。在同一來源檔案中,不能為不同的類別定義不同的套件宣告
13、什麼是變數?
變數就是申請記憶體來儲存值。也就是說,當創建變數的時候,需要在記憶體中申請空間。記憶體管理系統根據變數的類型來分配空間,分配的空間只能用來儲存該類型的資料。
14、定義變數有什麼作用?
透過定義不同的類型,可以用來儲存不同類型的數(如:整數,小數、字元)
15、各類型之間能不能轉換?
從低到高:
byte,short,char——>int——>long——>float——>double
可以自動轉換。
(1)、不能對boolean型別進行型別轉換
(2)、不能把物件型別轉換成不相關類別的物件
(3)、把容量大的型別轉換為容量小的型別時必須強制型別轉換(type)value type。轉換過程中可能導致溢出或損失精確度
(4)、自動型別轉換必須滿足轉換前的資料的位數小於轉換以後的資料類型位數。
(5)、浮點型到整數的轉換是直接透過捨棄小數部分得到,而不是四捨五入。
例如:(int)23.7 == 23, (int)-23.7 = = -23
16、java運算子有哪些?
(·1)、算數運算子:與數學中的類似,主要有- * \ % --( a是先在原來基礎加1再運算,a–則先運算再減1 )
(2)、邏輯運算子:主要有&& || !
(3)、賦值運算子:主要起一個賦值的作用,常用的有 = = -=
(4)、條件運算子:也稱為三元運算子。此運算子有3個操作數,並且需要判斷布林運算式的值。這個運算子的主要是決定那個值應該賦值給變數
例如:int a = (20==40)? 30 : 50;
17、java主要的三種循環結構是?
Java主要的三種循環結構:while 循環、do……while循環、for循環
(1)、while是最基本的循環,它的結構為:
while(布爾表達式){
//循環內容
}
只需要布林表達式為true,循環會一直進行。
(2)、do…while循環和while循環相識,不同的是,do…while循環至少會執行一次。
do{
//循環內容
}while(布林運算式)
(3)、for迴圈執行的次數是在執行前就確定的
for(初始化;布林運算式;更新){
//程式碼語句
}
#18、循環結構有什麼關鍵字嗎?
主要有:break和continue;
break:主要用在循環語句或switch語句中,用來跳出整個語句區塊;break跳出目前循環,並且繼續執行該循環下面的語句。
continue:適用於任何循環控制結構中,作用是讓程式立即跳到下一次循環的迭代。在for迴圈中,continue語句使程式立即跳到更新語句。
在while和do…while迴圈中,程式立即跳到布林運算式的判斷語句。
19、Number類別是什麼東西?
當內建資料型別被當作物件使用的時候,編譯器會把內建型別裝箱為包裝類別。 Number類別屬於java.lang套件。所有的包裝類別(Integer、Long、Byte、Double、Float、Short)都是抽象類別Number的子類別。
20、Java中Math類別是怎麼樣的?
包含了用於執行基本的數學運算的屬性與方法,如初等指數、物件、平方根和三角函數。 Math的方法都被定義為static形式。透過Math類別可以在主函數中直接呼叫。
21、Math中的floor,round、ceil有什麼差別?
ceil:傳回大於等於給指導參數的最小整數(例如:Math.ceil(23.2) ==24 而不是四捨五入)
floor:傳回小於等於給指導參數的最大整數(例如: Math.ceil(23.7) ==23 而不是四捨五入)
round:它表示四捨五入,演算法為Math.round(x 0.5),即將原來的數加上0.5後再向下取整。所以,Math.round(11.4) 等於11,Math.round(11.5) 等於12,Math.round(-11.5) 等於-11。
22、Character類別是什麼東西,該類別有哪些方法?
Character:是Java語言為內建基本資料類型char所提供的包裝類別。
Character主要的方法有:isLetter()—是否為字母;toString—傳回字串的長度,字串長度僅為1;isUpperCase()----是否為大寫字母;isLowerCase()—是否是小寫字母。
23、前面有反斜線(\)的字元代表的轉義字元有哪些?
常用的轉義字元有:\t(在文中該處插入一個tab鍵)
\d(在文中該處插入一個後退鍵)
\n(在文中該處插入換行)
\r(文中該處插入回車)
24、Java的String類別有什麼注意事項?
字串在Java中屬於對象,Java提供String類別來建立和操作字串。 String類別是不可以改變的,一旦建立String對象,那麼它的值就無法改變了。如果需要對字串進行修改就應該使用StringBuffer或StringBuilder類別。
25、length()方法,length屬性和size()的方法有什麼不同?
length()方法是針對字串來說的,要求一個字串的長度就要用到它的length()方法;
length()屬性是針對Java中陣列來說的,要求數組的長度可以用其length屬性;
java中的size()是針對泛型集合來說的,如果想看這個泛型有多少元素,就調用這個方法來查看!
26、連接字串的方法有哪些?
有兩種:
(1)、字串1.concat(字串2)
(2)、更常用的是使用' '操作來連接字串,如:“ Hello” “Word” "!";
27、Java中StringBuffer、StringBuilder類別有什麼差別?
StringBuilder類別在Java 5被提出,它和StringBuffer之間最大的不同在於StringBuilder的方法不是線程安全的(不能同步存取)由於StringBuilder相對與StringBuffer有速度的優勢,所以大多數情況下使用StringBuilder。然而在應用程式要求線性安全的情況下,則必須使用StringBuffer類別。
28、StringBuffer是如何實作物件修改的?
String Buffer主要有append()方法完成連接,insert()方法完成增加;reverse()方法完成反轉;replace()方法完成替換。
如:buf.append(“hi”);
buf.insert(0,“Hello”); //在第一個內容之前加上
buf.insert(buf.length,'Hello '); //在最後面插入資料
String str = buf.reverse().toString(); //將內容反轉後轉為字串
buf.replace(6,11,“yes ”); //將word的內容替換
29、陣列可以當作參數傳遞到方法裡嗎?
可以
30、如何取得目前時間,以及自訂時間?
列印目前時間:Data data = new Date(); data就是當前時間!
設定日期時間格式,SimpleDateFormat
SimpleDateFormat sc = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
System.out.printf(sc.format (要轉換的時間))
31、Java是如何進行休眠的?
休眠sleep()讓目前執行緒進入停滯狀態(阻塞目前行程),讓出cpu的使用、目的是不讓目前的執行緒獨自霸佔該執行緒所取得的cpu資源,以留一定時間給其他線程執行的機會。可以讓程式休眠幾毫秒的時間。 Tread.sleep(1000*3) //休眠3秒
32、如何設定取得日期格式的特定部分,例如年,月,日,日分秒?
是使用Calender類別。 Calender類是一個抽象類,在實際的使用時實現特定的子類的對象,創建對象的過程對程式設計師來說是透明的,只需要使用getInstance方法創建。
33、使用的話有什麼類別或方法嗎?
java.util.regex套件主要包含以下三個類別:
Pattern類別:Pattern物件是正規表示式的編譯表示,Pattern類別沒有公共建構方法。要建立一個Pattern對象,必須先呼叫其公共的靜態編譯方法,它會傳回一個Pattern物件。
Matcher類別:Matcher物件是對輸入的字串進行編譯和匹配操作的引擎。
PatternSyntaxExeption:PatternSyntaxExeption是一個非強制異常類,它表示一個正規表示式模式的語法錯誤。
34、建構方法與方法之間有什麼關聯?
建構方法的概念:當建立物件時,系統會自動呼叫建構方法。沒有自訂構造方法時,系統會呼叫預設的建構方法。構造方法可以被重載,不能被重寫,不同的構造方法名字相同,參數列表不同,參數列表是其識別的依據、標準、類似與人的名字有可能相同但是身份證不相同。
當自訂建構方法時,系統依據傳入的參數型別、數量,自動比對建構方法初始化物件。
35、Scanner類別是什麼?如何建立Scanner物件
java.util.Scanner是java5的新特徵。我們可以取得用戶的輸入。
Scanner sc = new Scanner();
36、Scanner類別的next()與nextLine()方法取得輸入的字串有何不同?
next():
(1)、一定要讀取到有效字元後才會結束輸入;
(2)、對輸入有效的字元之間遇到空白,會自動去掉;
(3)、只有輸入有效字元才能將後面輸入的空白作為分隔符號或結束符號;
(4)、next()不能得到帶有空格的字串;
nextLine ():
(1)、以Enter為結束符,即輸入回車前的所有字元;
(2)、可以得到空白;
37、Java三種類型的異常是什麼?
檢查時異常:最具檢查性異常的是使用者錯誤或問題引起的異常,這是程式設計師無法預見的。例如要開啟一個不存在的檔案時,一個異常就發生了,這些異常在編譯時不能被簡單的忽略。
運行時異常:運行異常是可以被程式設計師避免的異常。與檢查時異常相反,運行時異常可以在編譯時被忽略。
錯誤:錯誤不是異常,而是脫離程式設計師控制的問題,錯誤在程式碼中通常被忽略。例如:當堆疊溢位時,一個錯誤就發生了,它們在編譯也檢查不到的。
在 Java 中所有異常類型都是內建類別 java.lang.Throwable 類別的子類,即 Throwable 位於異常類別層次結構的頂層。 Throwable 類別下有兩個異常分支 Exception 和 Error,如圖所示。
38、異常和錯誤的差別?
所有的異常都繼承Throwable類,也就是說所有的異常都是一個物件。
從大體來分異常分為兩塊:
(1)、錯誤error:是指程式無法處理的錯誤,表示應用程式執行時出現的重大錯誤。例如jvm執行時期出現的OutOfMemoryError以及Socket程式設計時出現的連接埠被佔用等程式無法處理的錯誤
(2)、Exception異常:異常可分為執行時期異常和編譯異常,異常類別有兩個主要的子類別:IOException類別和RuntimeException類別
39、什麼是捕捉異常?
使用try和catch關鍵字捕捉異常,try/catch程式碼區塊放在異常可能發生的地方。 try/catch程式碼區塊中的程式碼成為保護程式碼。
40、throws和throw關鍵字的差別?
如果一個方法沒有捕獲一個檢查時異常,那麼該方法必須使用throws關鍵字來聲明。 throws關鍵字放在方法簽署的尾部。也可以使用throw拋出一個異常,無論它是最新實例化的還是剛捕獲到的。
一個方法可以宣告拋出多個異常,多個異常之間用逗號隔開。
41、在Java中如何自訂異常?
可以自己寫異常類別:
(1)、所有的例外都必須是Throwable類別的子類別;
(2)、如果希望寫一個檢查時異常,則需要繼承Exception ;
(3)、如果需要寫一個執行時期異常,那麼就需要繼承RuntimeException()異常
42、什麼是繼承?繼承的特徵有哪些?
繼承是子類別繼承父類別的特徵和行為,使得子類別物件(實例)具有父類別的實例域和方法,或子類別從父類別繼承方法,使得子類別具有父類別相同的行為。
特點:
(1)、子類別擁有父類別非private的屬性,方法;
(2)、子類別可以擁有自己的屬性和方法,即子類別可以對父類別進行擴展;
(3)、子類別可以擁有自己的方式實作父類別的方法;
(4)、Java繼承只能是單繼承,但是可以多重繼承,單一繼承就是一個子類別只能繼承一個父類,多重繼承就是:A繼承B,B繼承C,所以按照關係就行C類是B類的父類,B是A的父類,這就是java繼承區別與c 的一個特徵。
43、繼承的關鍵字是什麼?
繼承可以使用extends和Implements這兩個關鍵字來實現繼承。而且所有的類別都繼承與java.lang.Object,當一個類別沒有繼承的關鍵字,則預設繼承Object(這個類別在java.lang包中所以不需要導包)類別。
super關鍵字:可以super關鍵字來實現對父類別成員的訪問,用來引用目前物件繼承的父類別。
this關鍵字:指向自己的參考。
final關鍵字:宣告類別可以把類別定義為不能繼承的,也就是最終類別;或用於修飾方法,該方法不能被子類別重寫
# 44.父類的構造器有什麼特色?
子類別不能繼承父類別的建構器(建構方法和建構子(有參數)),但是父類別的建構器帶有參數的,則必須在子類別的建構子中明確的透過supper關鍵字呼叫父類別是建構器並適當的參數清單:
如果父類別有無參考構造器,則在子類別的建構器中用supper呼叫父類別不是必須的,如果沒有使用super關鍵字,系統會自動呼叫父類別的無參構造器。
45、什麼是重寫(override),什麼是重載(overLoad),他們兩個的差別?
重寫:是子類別對父類別的允許存取的方法的實作過程進行重寫編寫,返回值和參數不能改變,即外殼不能改變,核心改變。重寫的好處在於子類別可以根據需要,定於特定於自己的行為。也就是說子類別能夠根據需要實作父類別的方法。重寫方法不能拋出檢查時異常或比重寫方法聲明更加寬泛的異常。
重載:重載是在一個類別裡面,方法名稱相同,而參數不同,傳回型別可以相同也可以不相同。每一個重載的方法(或建構函式)都必須有一個獨一無二的參數型別清單。最常見的就是構造器的重載。
區別:方法的重寫與重載是java多態的不同表現,而重寫是父類別與子類別之間多態性的一種表現,重載可以理解為多態的具體表現形式。
(1)、方法重載是一個類別中定義了多個方法名稱相同,且參數不同或數量相同型別不同和次序不同,則成為方法的重載。
(2)、方法重寫是在子類別存在方法與父類別方法的名字相同,而且參數的數量與型別一樣,傳回值也一樣的方法,稱為重寫
(3) 、方法重載是一個類別的多態性表現,二方法的重寫是子類別與父類別的一種多型表現。
46、什麼是抽象類,如何定義抽象類別與方法?
抽象類別:抽象類別除了不能實例化物件之外,類別的其它功能依然存在,成員變量,成員方法和建構方法的存取方式和普通類別不一樣。 由於抽象類別不能實例化對象,所以抽象類別必須被繼承,才能被使用:
#父類別包含了子類別集合的常見方法,但是由於父類別本身是抽象的,所以不能使用這些方法。在Java中抽象化類別表示的是一種繼承關係,一個類別只能繼承一個抽象類別,而一個類別卻可以實作多個介面。
定義抽象類別:在Java語言中使用abstract class來定義抽象類別。
定義抽象方法:如果想設計這樣的類,該類別包含一個特殊的成員方法,該方法的具體實作有它的子類別確定,那麼你可以在父類別中聲明該方法。 Abstract關鍵字同樣用來宣告抽象方法,抽象方法只包含一個方法名,沒有方法體(抽象方法沒有定義,方法名後面直接跟一個分號,而不是花括號)。 如果一個類別有抽象方法那麼一定是抽象類別
47、宣告抽象方法會有什麼結果?
(1)、如果一個類別包含抽象方法,那麼該類別必須是抽象類別
(2)、任何一個子類別必須重寫父類別的抽象方法,或宣告本身為抽象類別。
(推薦教學:java課程)
48、封裝是什麼,有什麼優點? Java是怎麼進行封裝的?
封裝:是指一種將抽象性函數介面的實作細節部分包裝、隱藏起來的方法。封裝可以認為是保護屏障,防止該類別的程式碼和資料被外部類別定義的程式碼隨機存取。
優點:
(1)、良好的封裝能夠減少耦合;
(2)、類別內部的結構可以自由修改;
(3)、可以對成員變數進行更精準的控制;
(4)、隱藏訊息,實現細節;
進行封裝:
(1)、修改屬性的可見性來限制對屬性的存取(一般限制為private);
(2)、對每一個值屬性提供對外的介面的公共方法存取。也就是說,用於對私有屬性的存取。 (通常情況下這些方法稱為getter和setter方法,例如開發中的實體類別)
#49、介面與類別的異同?
相同:
(1)、一個介面可以可以有多個方法;
(2)、介面檔案儲存在.java結尾的檔案
(3)、介面的字節碼檔案保存在.class結尾的檔案中
不同:
(1)、介面不能實例化物件(與抽象類別一樣)
(2)、介面沒有建構方法;
(3)、介面中所有的方法必須是抽象方法;
(4)、介面中不能包含成員變數;
(5)、介面不能被類別繼承(被類別實作);
( 6)、介面支援多重繼承;
50、抽象類別和介面的差別?
(1)、抽象類別中的方法可以有方法體,就是能實作方法具體功能,但是介面中的方法不行。
(2)、抽象類別中的成員變數可以是各種類型的,而介面中的成員變數只能是public static final類型的;
(3)、介面中不能包含靜態程式碼區塊以及靜態方法(用static修飾的方法),而抽象類別可以有靜態程式碼區塊和靜態方法
(4)、一個類別只能繼承一個抽象類別,而一個類別可以實作多個介面。
介面是隱士抽象的,當宣告一個介面時,不必使用abstract關鍵字。介面中每一個方法也是隱性抽象的,宣告時不必加abstract。介面中的方法在介面中有實作介面的類別來實作介面中的方法。
做為一個Java應屆生來說,Java基礎是至關重要的也是絕對會問的問題。如果連這些基礎都掌握你好的話,那我們面試通過的幾率就微乎其微了。下面就讓我們一起來複習Java基礎吧!
1、Java到底是什么东西?
Java是一款面向对象的编程语言,是SUN(斯坦福大学网络公司)1995年推出的,在2010年被ORACLE收购
2、Java这么热门它有什么特点呢?
Java是跨平台性的语言(一处编译,到处执行)。
例如:Java在Windows平台中编写hello.java文件—>编译成hello.class文件;在不同的操作系统中安装对应的Java虚拟机(所有的系统平台必须有JVM才可以运行Java编译的文件),就可以直接运行
3、Java的三种技术架构
Java三种基本技术架构分别是:JavaSE、JavaEE、JavaME
JavaSE:是JavaEE与JavaME的基础,是非常平面话的
JavaEE:适合开发者的平台主要针对WEB应用系统的开发
JavaME:开发小型的电子消费品;比如:手机上的APP;机器上的语言(电梯、扫地机器人)
4、在编写Java程序时的注意点
(1)、Java是大小写敏感的,对应的Hello和hello是不同的
(2)、Java对于所有的类来说,类的首字母应该大写、若类名有多个单词组成,则每个单词首字母都应该大写。如:MyFirstJava
(3)、Java所有的方法名首字母都应该小写,如有多个单词组成,则后面的单词首字母要大写。如:findByName
(4)、源文件必须与类名一致
5、Java有那几个基本数据类型
Java有八种基本数据类型:byte、short、int、long、float、double、char、boolean(六种数字类型:四个整型(byte、short、int、long),两个浮点型(float、double))
byte:数据类型是8位、有符号的,以二进制补码表示的整数。用于大型数组中节约空间,用为byte变量占用的空间只有int类型的四分之一。对应的包装类:Byte,取值(27- 27-1)
short:数据类型是16位、以二进制补码表示的整数。short数据类型也可以像byte那样节约空间。一个short变量是int型变量的二分之一。对应的包装类:Short。取值(215- 215-1)
int:数据类型是32位、有符号的,以二进制补码表示的整数。一般的整型变量默认为int类型。取值(231- 231-1)
long:数据类型是64位,有符号的,以二进制补码表示的整数。这种数据类型主要使用在需要比较大整数的系统上。取值(263- 263-1)
float:数据类型是单精度、32位的浮点数。float在存储大型浮点数组的时候可以节约内存空间。默认值是0.0f。浮点数不能用来表示精确的值,如货币。
double:数据类型是双精度、64位的浮点数。浮点数的默认类型位double类型。double类型同样不能表示精确的值,如货币。默认值是0.0d。
char:类型是一个单一的16位Unicode字符。char数据类型可以存储任何字符。但只能存储一个字符
boolean:数据类型表示一位数字信息,只有两个取值:true和false。这种类型只作为一种标志来记录true\false情况,默认值是false。
6、访问权限修饰符分别是什么?
访问权限修饰符有:public、protected、default(默认不写)、private
public:最大访问权,用于对外的接口
protected:用于保护子类传递给子类一种继承的东西
default:是针对与本包的访问而设计的
private:访问权限仅限于类的内部,不能被外层的类访问
7、怎样才能运行一个程序?
所有的Java程序都是由public static viod main(String []args){}方法开始执行。
8、Java中常提到的物件是什麼?
物件是類別的一個實例,有狀態有行為。
例如:一隻狗是個對象,它的狀態有:顏色、名字、品種;行為有:搖尾巴、叫、吃等。
軟體物件也有狀態和行為。軟體的物件就是屬性,行為透過方法體現
9、類別是什麼?
類別是一個模板,它描述一類別物件的行為和狀態,一個類別可以擁有多個方法
10、類別裡面的方法,要如何去建構?
建立一個物件的時候,至少要呼叫一個建構方法。建構方法的名稱必須與類別同名,一個類別可以有多個建構方法。
11、如何創造一個物件?
物件是根據類別建立的。在Java中,使用關鍵字new來建立一個新的物件。建立對象需要三個步驟:
宣告:宣告一個對象,包括對象的名稱和對象的類型。
實例化:使用關鍵字new來建立一個物件
初始化:使用new來建立物件時會呼叫建構方法初始化物件
12、來源文件的聲明有聲明規則?
(1)、原始檔案只能有一個public類別
(2)、可以有多個非public類別
(3)、原始檔案的名稱必須與類別同名
(4)、如果原始檔定義在某個包內,那麼導包應該在原始檔的首行。
(5)、如果原始檔包含import語句,那麼在套件語句和類別之間定義,如果沒有package語句,那麼import語句應該在原始檔最前面
(6)、import語句和package語句對來源文件中定義的所有類別都有效。在同一來源檔案中,不能為不同的類別定義不同的套件宣告
13、什麼是變數?
變數就是申請記憶體來儲存值。也就是說,當創建變數的時候,需要在記憶體中申請空間。記憶體管理系統根據變數的類型來分配空間,分配的空間只能用來儲存該類型的資料。
14、定義變數有什麼作用?
透過定義不同的類型,可以用來儲存不同類型的數(如:整數,小數、字元)
15、各類型之間能不能轉換?
從低到高:
byte,short,char——>int——>long——>float——>double
可以自動轉換。
(1)、不能對boolean型別進行型別轉換
(2)、不能把物件型別轉換成不相關類別的物件
(3)、把容量大的型別轉換為容量小的型別時必須強制型別轉換(type)value type。轉換過程中可能導致溢出或損失精確度
(4)、自動型別轉換必須滿足轉換前的資料的位數小於轉換以後的資料類型位數。
(5)、浮點型到整數的轉換是直接透過捨棄小數部分得到,而不是四捨五入。
例如:(int)23.7 == 23, (int)-23.7 = = -23
16、java運算子有哪些?
(·1)、算數運算子:與數學中的類似,主要有- * \ % --( a是先在原來基礎加1再運算,a–則先運算再減1 )
(2)、邏輯運算子:主要有&& || !
(3)、賦值運算子:主要起一個賦值的作用,常用的有 = = -=
(4)、條件運算子:也稱為三元運算子。此運算子有3個操作數,並且需要判斷布林運算式的值。這個運算子的主要是決定那個值應該賦值給變數
例如:int a = (20==40)? 30 : 50;
17、java主要的三種循環結構是?
Java主要的三種循環結構:while 循環、do……while循環、for循環
(1)、while是最基本的循環,它的結構為:
while(布爾表達式){
//循環內容
}
只需要布林表達式為true,循環會一直進行。
(2)、do…while循環和while循環相識,不同的是,do…while循環至少會執行一次。
do{
//循環內容
}while(布林運算式)
(3)、for迴圈執行的次數是在執行前就確定的
for(初始化;布林運算式;更新){
//程式碼語句
}
#18、循環結構有什麼關鍵字嗎?
主要有:break和continue;
break:主要用在循環語句或switch語句中,用來跳出整個語句區塊;break跳出目前循環,並且繼續執行該循環下面的語句。
continue:適用於任何循環控制結構中,作用是讓程式立即跳到下一次循環的迭代。在for迴圈中,continue語句使程式立即跳到更新語句。
在while和do…while迴圈中,程式立即跳到布林運算式的判斷語句。
19、Number類別是什麼東西?
當內建資料型別被當作物件使用的時候,編譯器會把內建型別裝箱為包裝類別。 Number類別屬於java.lang套件。所有的包裝類別(Integer、Long、Byte、Double、Float、Short)都是抽象類別Number的子類別。
20、Java中Math類別是怎麼樣的?
包含了用於執行基本的數學運算的屬性與方法,如初等指數、物件、平方根和三角函數。 Math的方法都被定義為static形式。透過Math類別可以在主函數中直接呼叫。
21、Math中的floor,round、ceil有什麼差別?
ceil:傳回大於等於給指導參數的最小整數(例如:Math.ceil(23.2) ==24 而不是四捨五入)
floor:傳回小於等於給指導參數的最大整數(例如: Math.ceil(23.7) ==23 而不是四捨五入)
round:它表示四捨五入,演算法為Math.round(x 0.5),即將原來的數加上0.5後再向下取整。所以,Math.round(11.4) 等於11,Math.round(11.5) 等於12,Math.round(-11.5) 等於-11。
22、Character類別是什麼東西,該類別有哪些方法?
Character:是Java語言為內建基本資料類型char所提供的包裝類別。
Character主要的方法有:isLetter()—是否為字母;toString—傳回字串的長度,字串長度僅為1;isUpperCase()----是否為大寫字母;isLowerCase()—是否是小寫字母。
23、前面有反斜線(\)的字元代表的轉義字元有哪些?
常用的轉義字元有:\t(在文中該處插入一個tab鍵)
\d(在文中該處插入一個後退鍵)
\n(在文中該處插入換行)
\r(文中該處插入回車)
24、Java的String類別有什麼注意事項?
字串在Java中屬於對象,Java提供String類別來建立和操作字串。 String類別是不可以改變的,一旦建立String對象,那麼它的值就無法改變了。如果需要對字串進行修改就應該使用StringBuffer或StringBuilder類別。
25、length()方法,length屬性和size()的方法有什麼不同?
length()方法是針對字串來說的,要求一個字串的長度就要用到它的length()方法;
length()屬性是針對Java中陣列來說的,要求數組的長度可以用其length屬性;
java中的size()是針對泛型集合來說的,如果想看這個泛型有多少元素,就調用這個方法來查看!
26、連接字串的方法有哪些?
有兩種:
(1)、字串1.concat(字串2)
(2)、更常用的是使用' '操作來連接字串,如:“ Hello” “Word” "!";
27、Java中StringBuffer、StringBuilder類別有什麼差別?
StringBuilder類別在Java 5被提出,它和StringBuffer之間最大的不同在於StringBuilder的方法不是線程安全的(不能同步存取)由於StringBuilder相對與StringBuffer有速度的優勢,所以大多數情況下使用StringBuilder。然而在應用程式要求線性安全的情況下,則必須使用StringBuffer類別。
28、StringBuffer是如何實作物件修改的?
String Buffer主要有append()方法完成連接,insert()方法完成增加;reverse()方法完成反轉;replace()方法完成替換。
如:buf.append(“hi”);
buf.insert(0,“Hello”); //在第一個內容之前加上
buf.insert(buf.length,'Hello '); //在最後面插入資料
String str = buf.reverse().toString(); //將內容反轉後轉為字串
buf.replace(6,11,“yes ”); //將word的內容替換
29、陣列可以當作參數傳遞到方法裡嗎?
可以
30、如何取得目前時間,以及自訂時間?
列印目前時間:Data data = new Date(); data就是當前時間!
設定日期時間格式,SimpleDateFormat
SimpleDateFormat sc = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
System.out.printf(sc.format (要轉換的時間))
31、Java是如何進行休眠的?
休眠sleep()讓目前執行緒進入停滯狀態(阻塞目前行程),讓出cpu的使用、目的是不讓目前的執行緒獨自霸佔該執行緒所取得的cpu資源,以留一定時間給其他線程執行的機會。可以讓程式休眠幾毫秒的時間。 Tread.sleep(1000*3) //休眠3秒
32、如何設定取得日期格式的特定部分,例如年,月,日,日分秒?
是使用Calender類別。 Calender類是一個抽象類,在實際的使用時實現特定的子類的對象,創建對象的過程對程式設計師來說是透明的,只需要使用getInstance方法創建。
33、使用的話有什麼類別或方法嗎?
java.util.regex套件主要包含以下三個類別:
Pattern類別:Pattern物件是正規表示式的編譯表示,Pattern類別沒有公共建構方法。要建立一個Pattern對象,必須先呼叫其公共的靜態編譯方法,它會傳回一個Pattern物件。
Matcher類別:Matcher物件是對輸入的字串進行編譯和匹配操作的引擎。
PatternSyntaxExeption:PatternSyntaxExeption是一個非強制異常類,它表示一個正規表示式模式的語法錯誤。
34、建構方法與方法之間有什麼關聯?
建構方法的概念:當建立物件時,系統會自動呼叫建構方法。沒有自訂構造方法時,系統會呼叫預設的建構方法。構造方法可以被重載,不能被重寫,不同的構造方法名字相同,參數列表不同,參數列表是其識別的依據、標準、類似與人的名字有可能相同但是身份證不相同。
當自訂建構方法時,系統依據傳入的參數型別、數量,自動比對建構方法初始化物件。
35、Scanner類別是什麼?如何建立Scanner物件
java.util.Scanner是java5的新特徵。我們可以取得用戶的輸入。
Scanner sc = new Scanner();
36、Scanner類別的next()與nextLine()方法取得輸入的字串有何不同?
next():
(1)、一定要讀取到有效字元後才會結束輸入;
(2)、對輸入有效的字元之間遇到空白,會自動去掉;
(3)、只有輸入有效字元才能將後面輸入的空白作為分隔符號或結束符號;
(4)、next()不能得到帶有空格的字串;
nextLine ():
(1)、以Enter為結束符,即輸入回車前的所有字元;
(2)、可以得到空白;
37、Java三種類型的異常是什麼?
檢查時異常:最具檢查性異常的是使用者錯誤或問題引起的異常,這是程式設計師無法預見的。例如要開啟一個不存在的檔案時,一個異常就發生了,這些異常在編譯時不能被簡單的忽略。
運行時異常:運行異常是可以被程式設計師避免的異常。與檢查時異常相反,運行時異常可以在編譯時被忽略。
錯誤:錯誤不是異常,而是脫離程式設計師控制的問題,錯誤在程式碼中通常被忽略。例如:當堆疊溢位時,一個錯誤就發生了,它們在編譯也檢查不到的。
在 Java 中所有異常類型都是內建類別 java.lang.Throwable 類別的子類,即 Throwable 位於異常類別層次結構的頂層。 Throwable 類別下有兩個異常分支 Exception 和 Error,如圖所示。
38、異常和錯誤的差別?
所有的異常都繼承Throwable類,也就是說所有的異常都是一個物件。
從大體來分異常分為兩塊:
(1)、錯誤error:是指程式無法處理的錯誤,表示應用程式執行時出現的重大錯誤。例如jvm執行時期出現的OutOfMemoryError以及Socket程式設計時出現的連接埠被佔用等程式無法處理的錯誤
(2)、Exception異常:異常可分為執行時期異常和編譯異常,異常類別有兩個主要的子類別:IOException類別和RuntimeException類別
39、什麼是捕捉異常?
使用try和catch關鍵字捕捉異常,try/catch程式碼區塊放在異常可能發生的地方。 try/catch程式碼區塊中的程式碼成為保護程式碼。
40、throws和throw關鍵字的差別?
如果一個方法沒有捕獲一個檢查時異常,那麼該方法必須使用throws關鍵字來聲明。 throws關鍵字放在方法簽署的尾部。也可以使用throw拋出一個異常,無論它是最新實例化的還是剛捕獲到的。
一個方法可以宣告拋出多個異常,多個異常之間用逗號隔開。
41、在Java中如何自訂異常?
可以自己寫異常類別:
(1)、所有的例外都必須是Throwable類別的子類別;
(2)、如果希望寫一個檢查時異常,則需要繼承Exception ;
(3)、如果需要寫一個執行時期異常,那麼就需要繼承RuntimeException()異常
42、什麼是繼承?繼承的特徵有哪些?
繼承是子類別繼承父類別的特徵和行為,使得子類別物件(實例)具有父類別的實例域和方法,或子類別從父類別繼承方法,使得子類別具有父類別相同的行為。
特點:
(1)、子類別擁有父類別非private的屬性,方法;
(2)、子類別可以擁有自己的屬性和方法,即子類別可以對父類別進行擴展;
(3)、子類別可以擁有自己的方式實作父類別的方法;
(4)、Java繼承只能是單繼承,但是可以多重繼承,單一繼承就是一個子類別只能繼承一個父類,多重繼承就是:A繼承B,B繼承C,所以按照關係就行C類是B類的父類,B是A的父類,這就是java繼承區別與c 的一個特徵。
43、繼承的關鍵字是什麼?
繼承可以使用extends和Implements這兩個關鍵字來實現繼承。而且所有的類別都繼承與java.lang.Object,當一個類別沒有繼承的關鍵字,則預設繼承Object(這個類別在java.lang包中所以不需要導包)類別。
super關鍵字:可以super關鍵字來實現對父類別成員的訪問,用來引用目前物件繼承的父類別。
this關鍵字:指向自己的參考。
final關鍵字:宣告類別可以把類別定義為不能繼承的,也就是最終類別;或用於修飾方法,該方法不能被子類別重寫
# 44.父類的構造器有什麼特色?
子類別不能繼承父類別的建構器(建構方法和建構子(有參數)),但是父類別的建構器帶有參數的,則必須在子類別的建構子中明確的透過supper關鍵字呼叫父類別是建構器並適當的參數清單:
如果父類別有無參考構造器,則在子類別的建構器中用supper呼叫父類別不是必須的,如果沒有使用super關鍵字,系統會自動呼叫父類別的無參構造器。
45、什麼是重寫(override),什麼是重載(overLoad),他們兩個的差別?
重寫:是子類別對父類別的允許存取的方法的實作過程進行重寫編寫,返回值和參數不能改變,即外殼不能改變,核心改變。重寫的好處在於子類別可以根據需要,定於特定於自己的行為。也就是說子類別能夠根據需要實作父類別的方法。重寫方法不能拋出檢查時異常或比重寫方法聲明更加寬泛的異常。
重載:重載是在一個類別裡面,方法名稱相同,而參數不同,傳回型別可以相同也可以不相同。每一個重載的方法(或建構函式)都必須有一個獨一無二的參數型別清單。最常見的就是構造器的重載。
區別:方法的重寫與重載是java多態的不同表現,而重寫是父類別與子類別之間多態性的一種表現,重載可以理解為多態的具體表現形式。
(1)、方法重載是一個類別中定義了多個方法名稱相同,且參數不同或數量相同型別不同和次序不同,則成為方法的重載。
(2)、方法重寫是在子類別存在方法與父類別方法的名字相同,而且參數的數量與型別一樣,傳回值也一樣的方法,稱為重寫
(3) 、方法重載是一個類別的多態性表現,二方法的重寫是子類別與父類別的一種多型表現。
46、什么是抽象类,如何定义抽象类与方法?
抽象类:抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量,成员方法和构造方法的访问方式和普通类不一样。由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用:
父類別包含了子類別集合的常見方法,但是由於父類別本身是抽象的,所以不能使用這些方法。在Java中抽象化類別表示的是一種繼承關係,一個類別只能繼承一個抽象類別,而一個類別卻可以實作多個介面。
定義抽象類別:在Java語言中使用abstract class來定義抽象類別。
定義抽象方法:如果想設計這樣的類,該類別包含一個特殊的成員方法,該方法的具體實作有它的子類別確定,那麼你可以在父類別中聲明該方法。 Abstract關鍵字同樣用來宣告抽象方法,抽象方法只包含一個方法名,沒有方法體(抽象方法沒有定義,方法名後面直接跟一個分號,而不是花括號)。 如果一個類別有抽象方法那麼一定是抽象類別
47、宣告抽象方法會有什麼結果?
(1)、如果一個類別包含抽象方法,那麼該類別必須是抽象類別
(2)、任何一個子類別必須重寫父類別的抽象方法,或宣告本身為抽象類別。
48、封裝是什麼,有什麼優點? Java是怎麼進行封裝的?
封裝:是指一種將抽象性函數介面的實作細節部分包裝、隱藏起來的方法。封裝可以認為是保護屏障,防止該類別的程式碼和資料被外部類別定義的程式碼隨機存取。
優點:
(1)、良好的封裝能夠減少耦合;
(2)、類別內部的結構可以自由修改;
(3)、可以對成員變數進行更精準的控制;
(4)、隱藏訊息,實現細節;
進行封裝:
(1)、修改屬性的可見性來限制對屬性的存取(一般限制為private);
(2)、對每一個值屬性提供對外的介面的公共方法存取。也就是說,用於對私有屬性的存取。 (通常情況下這些方法稱為getter和setter方法,例如開發中的實體類別)
#49、介面與類別的異同?
相同:
(1)、一個介面可以可以有多個方法;
(2)、介面檔案儲存在.java結尾的檔案
(3)、介面的字節碼檔案保存在.class結尾的檔案中
不同:
(1)、介面不能實例化物件(與抽象類別一樣)
(2)、介面沒有建構方法;
(3)、介面中所有的方法必須是抽象方法;
(4)、介面中不能包含成員變數;
(5)、介面不能被類別繼承(被類別實作);
( 6)、介面支援多重繼承;
50、抽象類別和介面的差別?
(1)、抽象類別中的方法可以有方法體,就是能實作方法具體功能,但是介面中的方法不行。
(2)、抽象類別中的成員變數可以是各種類型的,而介面中的成員變數只能是public static final類型的;
(3)、介面中不能包含靜態程式碼區塊以及靜態方法(用static修飾的方法),而抽象類別可以有靜態程式碼區塊和靜態方法
(4)、一個類別只能繼承一個抽象類別,而一個類別可以實作多個介面。
介面是隱士抽象的,當宣告一個介面時,不必使用abstract關鍵字。介面中每一個方法也是隱性抽象的,宣告時不必加abstract。介面中的方法在介面中有實作介面的類別來實作介面中的方法。
相關推薦:java入門
以上是java實習生面試題的詳細內容。更多資訊請關注PHP中文網其他相關文章!