更新時間:2020-11-11 17:46:36 來源:動力節點 瀏覽2215次
面向對象一直是Java里面的重點學習內容,也是Java語言的重要特性之一。面向對象是相對于面向過程來講的,面向對象方法,把相關的數據和方法組織為一個整體來看待,從更高的層次來進行系統建模,更貼近事物的自然運行模式。本文為大家送出小編精心準備的福利——10道經典Java面向對象面試題。
1、super()與 this()的區別?
This():當前類的對象,super 父類對象。
Super():在子類訪問父類的成員和行為,必須受類繼承規則的約束
而 this 他代表當前對象,當然所有的資源都可以訪問.
在構造函數中,如果第一行沒有寫 super(),編譯器會自動插入.但是如果父類沒有不帶參數的構
造函數,或這個函數被私有化了(用 private 修飾).此時你必須加入對父類的實例化構造.而 this 就
沒有這個要求,因為它本身就進行實例化的構造.
而在方法中 super 和 this 使用的方法就差不多了.只不過 super 要考慮是否能訪問其父類的資源。
2、如何聲名一個靜態塊?靜態塊有什么好處
在類中方法外聲明 static關鍵字+代碼塊,對于一些必須要初始化的代碼,必須是寫在靜態塊里面,如果寫在構造器里面,有多個構造器的時候不一定執行初始化.
3、作用域 public,protected,private,以及不寫時的區別?
Public:不同包、同一包、類內都可用
Private:類內
Protected: 不同包的子類、同一包、類內都可用
不寫時:同一包
4、什么是 java 序列化,如何實現 java 序列化?(寫一個實例)
序列化:
可以將一個對象保存到一個文件,所以可以通過流的方式在網絡上傳輸,可以將文件的內
容讀取,轉化為一個對象。
處理對象流的機制,所謂對象流也就是將對象的內容進行流化。可以對流化后的對象進行
讀寫操作,也可將流化后的對象傳輸于網絡之間。序列化是為了解決在對對象流進行讀寫操作
時所引發的問題。
序列化的實現:
將需要被序列化的類實現 Serializable 接口,該接口沒有需要實現的方法,implements
Serializable 只是為了標注該對象是可被序列化的,然后使用一個輸出流(如:
FileOutputStream) 來構造一個 ObjectOutputStream( 對象流 ) 對 象 , 接 著 , 使 用
ObjectOutputStream 對象的 writeObject(Object obj)方法就可以將參數為 obj 的對象寫出
(即保存其狀態),要恢復的話則用輸入流。
5、String與StringBuffer、StringBuilder的區別?
String 是不可變的,可以直接使用它的方法 用來創建字符串,而 StringBuffer、StringBuilder無論怎么修改都是一個對象,如果在字符串改變或者迭代改變的情況下Stringbuffer比String運行快,StringBuilder比StringBuffer更加快捷,但是StringBuilder線程不安全
6、寫出String類常見的5個方法,并解釋
indexOf():返回指定字符串在該字符串出現的序列
startsWith():判斷該字符串是否以指定字符開始
concat() :將指定字符串連接在該字符串的結尾
length():返回字符串的長度
subString:返回該字符串從索引開始 結束于字符串末尾 或者指定索引的一個子字符串
7、重載與重寫的區別?
重載發生在同一個類,不同的方法里面。 重寫發生在父子類中,參數完全相同的方法里面。
重載參數不同,而重寫參數相同且返回類型相同。
方法名相同,重寫override是父類與子類之間多態性的一種表現,重載是一個類中多態性的一種表現。
8、抽象類和接口的區別?
(1)接口可以被多重 implements,抽象類只能被單一 extends
(2)接口只有定義,抽象類可以有定義和實現
(3)接口的字段定義默認為:public static final, 抽象類字段默認是"friendly"(本包可見)
當功能需要累積時用抽象類,不需要累積時用接口。
9、什么是類的反射機制?
通過類(Class 對象),可以得出當前類的 fields、method、construtor、interface、superClass、
modified 等,同是可以通過類實例化一個實例、設置屬性、喚醒方法。Spring 中一切都是
反射、struts、hibernate 都是通過類的返射進行開發的。
10、如何獲取某個日期是當月的最后一天?
當前日期加一天,若當前日期與結果的月份不相同,就是最后一天。
取下一個月的第一天,下一個月的第一天-1
public static void main(String[] args)
{
Calendar c=Calendar.getInstance();
c.set(Calendar.YEAR,2004);
c.set(Calendar.MONTH,0);
c.set(Calendar.DAY_OF_MONTH,30);
Calendar c1=(Calendar)c.clone();
System.out.println(c.get(Calendar.YEAR)+" "+(c.get(Calendar.MONTH)+1)+"
"+c.get(Calendar.DAY_OF_MONTH));
c.add(Calendar.DAY_OF_MONTH,1);
if(c.get(Calendar.MONTH)!=c1.get(Calendar.MONTH))
{
System.out.println("是最后一天");
}
else
{
System.out.println("不是取后一天");
}
}
以上就是小編為大家精心挑選的10道經典Java面向對象面試題,雖然不能概括整個面向對象的知識點,但籠統地兼顧了面向對象的大部分重點內容。想要更加系統地練習Java面向對象面試題還是得看本站的海量高質量Java面試題和答案分析,幫你提升Java面試題實戰能力。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習