1. 程式人生 > >Java面試題集錦 (一)

Java面試題集錦 (一)

四. 如果類a繼承類b,實現介面c,而類b和介面c中定義了同名變數,請問會出現什麼問題?

interface      A

{
       int x = 0;
}
class B

{
       int x =1;
}
class C extends B implements A

{
       public void pX()

{
       System.out.println(x);
    }
       public static void main(String[] args) {
          new C().pX();
       }
}
答案:錯誤。在編譯時會發生錯誤

(錯誤描述不同的JVM有不同的資訊,意思就是未明確的x呼叫,兩個x都匹配(就象在同時import java.utiljava.sql兩個包時直接宣告Date一樣)。對於父類的變數,可以用super.x來明確(輸出的是1),而介面的屬性預設隱含為 public static final.所以可以通過A.x來明確(輸出的是0)

五. 下面的程式碼執行時會不會報錯

interface Playable

{
        void play();
}
interface Bounceable

{
        void play();
}
interface Rollable extends Playable, Bounceable

{
        Ball ball = new Ball("PingPang");
}
class Ball implements Rollable

{
        private String name;
        public String getName()

{
            return name;
        }
        public Ball(String name)

{
            this.name = name;        
        }
       public void play()

{
            ball = new Ball("Football");
            System.out.println(ball.getName());
        }
}

答案: 錯。"interface Rollable extends Playable, Bounceable"沒有問題。interface可繼承多個interfaces,所以這裡沒錯。問題出在interface Rollable裡的"Ball ball = new Ball("PingPang");"。任何在interface裡宣告的interface variable (介面變數,也可稱成員變數),預設為public static final。也就是說"Ball ball = new Ball("PingPang");"實際上是"public static final Ball ball = new Ball("PingPang");"。在Ball類的Play()方法中,"ball = new Ball("Football");"改變了ballreference,而這裡的ball來自Rollable interfaceRollable interface裡的ballpublic static final的,finalobject是不能被改變reference的。因此編譯器將在"ball = new Ball("Football");"這裡顯示有錯。

六. 請說一下finalfinallyfinalize的區別?(瞬聯)

final 用於宣告屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。

finally是異常處理語句結構的一部分,表示總是執行。

finalizeObject類的一個方法,在垃圾收集器執行的時候會呼叫被回收物件的此方法,可以覆蓋此方法提供垃圾收集時的其他資源回收,例如關閉檔案等。

七.String 和StringBuffer的區別

JAVA平臺提供了兩個類:String和StringBuffer,它們可以儲存和操作字串,即包含多個字元的字元資料這個String類提供了數值不可改變字串而這個StringBuffer類提供的字串進行修改當你知道字元資料要改變的時候你就可以使用StringBuffer典型地,你可以使用StringBuffers來動態構造字元資料

八.  說出ArrayList,Vector, LinkedList的儲存效能和特性

 ArrayList和Vector都是使用陣列方式儲存資料,此陣列元素數大於實際儲存資料以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及陣列元素移動等記憶體操作,所以索引資料快而插入資料慢,Vector由於使用了synchronized思路方法(執行緒安全) ,通常效能上較ArrayList差,而LinkedList使用雙向連結串列實現儲存,按序號索引資料需要進行前向或後向遍歷,但是插入資料時只需要記錄本項前後項即可,所以插入速度較快


九.  HashMap和Hashtable的區別

HashMap是Hashtable的輕量級實現(非執行緒安全的實現),他們都完成了Map介面,主要區別在於HashMap允許空(null)鍵值(key),由於非執行緒安全,效率上可能高於Hashtable,HashMap允許將Null作為一個entryde key 或者value,而Hashtable不允許 HashMap把Hashtable的contains思路方法去掉了,改成containsvalue和containsKey因為contains思路方法容易讓人引起誤解Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map interface的一個實現。

    最大的區別是,Hashtable的思路方法是Synchronize的,而HashMap不是,在多個執行緒訪問Hashtable時,不需要自己為它的思路方法實現同步,而HashMap 就必須為的提供外同步。

    Hashtable和HashMap採用的hash/rehash演算法都大概一樣,所以效能不會有很大的差異。


十.  Overload和Override的區別。Overloaded的方法是否可以改變返回值的型別?

過載(Overload):

(1)方法過載是讓類以統一的方式處理不同型別資料的一種手段。多個同名函式同時存在,具有不同的引數個數/型別。過載Overloading是一個類中多型性的一種表現。
        (2)Java的方法過載,就是在類中可以建立多個方法,它們具有相同的名字,但具有不同的引數和不同的定義。呼叫方法時通過傳遞給它們的不同引數個數和引數型別來決定具體使用哪個方法, 這就是多型性。
        (3)過載的時候,方法名要一樣,但是引數型別和個數不一樣,返回值型別可以相同也可以不相同。無法以返回型別作為過載函式的區分標準。

重寫(Override):

      (1)  父類與子類之間的多型性,對父類的函式進行重新定義。如果在子類中定義某方法與其父類有相同的名稱和引數,我們說該方法被重寫 (Overriding)。在Java中,子類可繼承父類中的方法,而不需要重新編寫相同的方法。但有時子類並不想原封不動地繼承父類的方法,而是想作一定的修改,這就需要採用方法的重寫。方法重寫又稱方法覆蓋。
    (2) 若子類中的方法與父類中的某一方法具有相同的方法名、返回型別和引數表,則新方法將覆蓋原有的方法。如需父類中原有的方法,可使用super關鍵字,該關鍵字引用了當前類的父類。
   (3)子類函式的訪問修飾許可權不能少於父類的

重寫方法的規則:
1.引數列表必須完全與被重寫的方法的相同,否則不能稱其為重寫而是過載.
2.返回的型別必須一直與被重寫的方法的返回型別相同,否則不能稱其為重寫而是過載.
3.訪問修飾符的限制一定要大於被重寫方法的訪問修飾符(public>protected>default>private)
4.重寫方法一定不能丟擲新的檢查異常或者比被重寫方法申明更加寬泛的檢查型異常.例如,
父類的一個方法申明瞭一個檢查異常IOException,在重寫這個方法是就不能丟擲Exception,只能丟擲IOException的子類異常,可以丟擲非檢查異常.


而過載的規則:
1.必須具有不同的引數列表;
2.可以有不同的返回型別,只要引數列表不同就可以了;
3.可以有不同的訪問修飾符;
4.可以丟擲不同的異常;


重寫和過載的區別在於:

重寫多型性起作用,對呼叫被過載過的方法可以大大減少程式碼的輸入量,同一個方法名只要往裡面傳遞不同的引數就可以擁有不同的功能或返回值.

用好重寫和過載可以設計一個結構清晰而簡潔的類,可以說重寫和過載在編寫程式碼過程中的作用非同一般.

Overloaded的方法是可以改變返回值的型別。


相關推薦

java試題集錦

  第一,談談final, finally, finalize的區別。 最常被問到。 final:可以修飾非抽象類和非抽象類成員方法和變數     final類不能被繼承,沒有子類,final類中的方法預設是final     被宣告為final的變數必須在申明

Java試題集錦

四. 如果類a繼承類b,實現介面c,而類b和介面c中定義了同名變數,請問會出現什麼問題? interface      A {        int x = 0; } class B {        int x =1; } class C extends B implements A {        p

Java公司試題集錦

如有錯誤,望各位指正 本人會做更新 我看到了網上流傳的多個《Java面試題大全》,認真的閱讀了以後發現裡面的很多題目是重複且無用的,而且還有很多的參考答案是錯誤的,於是我花了一個月時間對這個所謂的《Java面試大全》進行了整理修改,在整理過程中,參照了當時J

PHP試題集錦

day clu 數據庫緩存 優勢 腳本 源代碼 任務 頁面 文件 1、用PHP打印出前一天的時間格式是2017-5-10 22:21:21(2分) Answer: $a = date("Y-m-d H:i:s", strtotime("-1 day")); pr

超詳細的Java試題總結Java基礎知識篇

福利:看本文之前,推薦給大家一個阿里雲雙11活動,真的非常非常非常推薦,對於新人福利,阿里雲這次真的是下血本了,建議阿里雲新人一定一定一定不要錯過。如果覺得這單純是廣告的話(阿里雲肯找我做廣告就好了,嘿嘿),你可以直接跳過看正文。 阿里雲雙11最新活動(僅限阿

html+css試題集錦

1、對WEB標準以及W3C的理解與認識? web標準簡單來說可以分為結構、表現和行為,其中結構主要是有HTML標籤組成,或者通俗點來講,在頁面Body中我們寫入的標籤都是為了頁面的結構,表現指css樣式表,通過css可使頁面的結構標籤更具美感,行為是指頁面和使用者具有一定的

java試題集錦

面向物件部分(二) 上一篇 1、什麼是多型.  多型是面向物件的重要特性,簡單點說:“一個介面,多種實現”,就是同一種事物表現出的多種形態。 程式設計其實就是一個將具體世界進行抽象化的過程,多型就是抽象化的一種體現,把一系列具體事物的共同點抽象出來, 再

Java面試技巧:Java試題集錦

2.1 HashMap和Hashtable的區別。   HashMap是Hashtable的輕量級實現(非執行緒安全的實現),他們都完成了Map介面,主要區別在於HashMap允許空(null)鍵值(key),由於非執行緒安全,效率上可能高於Hashtable.   

Java試題解析

第一篇 tput java開發 java基礎 director 路徑 run 字面值 記錄 本文是面試題目系列的第一篇,題目主要來自 GitChat 上一個課程,在此特別記錄自身想的答案和在網上查詢的結果,分享出來,大家共同學習。如果有不對的地方,歡迎大家指出。 Jav

Java試題集錦持續更新

1、面向物件的特徵有哪些方面? 答:面向物件的特徵主要有以下幾個方面: -抽象:抽象是將一類物件的共同特徵總結出來構造類的過程,包括資料抽象和行為抽象兩方面。抽象只關注物件有哪些屬性和行為,並不關注這些行為的細節是什麼。 -繼承:繼承是從己有類得到繼承資訊建立新類的過程。提供繼承資

java經典試題總結

Java經典面試題總結繼續更新,有需要的小夥伴可以路過不要錯過了!看上一篇面試題總結的反響還是很不錯的,就繼續更新了,也非常感謝各位小夥伴的持續關注…… 這次更偏基礎一些! 1、String 和StringBuffer 的區別? 答:JAVA 平臺提供了兩個類:String 和StringBuffer,

java試題整理1

pmap 復制 java對象 試題 取出 樹形 年輕代和老年代 com 足夠 1、Equals與==的區別?   ==是判斷兩個變量或者實例是不是指向同一個內存地址   equals是判斷兩個變量或者實例所指向的內存地址中的值是不是相同 2、Object有哪些公用方法?  

Java試題

足夠 advice 面試題 有一個 了解 framework ons switch 多個 三、開源框架 什麽是mybaties? Mybaties是支持普通sql查詢,存儲過程和高級映射的優秀持久層框架。Mybaties消除了幾乎所有的jdbc代碼和參數的手

Java試題

ssi location 寫法 lac boa net struts2的 語言 rtu 以下為框架補充部分: Struts 2中,Action通過什麽方式獲得用戶從頁面輸入的數據,又是通過什麽方式把其自身的數據傳給視圖的? Action從頁面獲取數據有三種方式:

Java試題

clu error col edi servlet對象 動態 解決方法 原來 highlight 二. Java Web基礎部分 在js中如何創建一個對象? var p1={name:”tom”,”age”

Java試題——中級

完成 通過 false 有名管道 我們 服務 子元素 服務器 運行時 內部類和靜態內部類的區別 內部類: 1、內部類中的變量和方法不能聲明為靜態的。 2、內部類實例化:B是A的內部類,實例化B:A.B b = new A().new B()。 3、內部類可以引用外部類的

Java試題—初級1

1.7 自動 多少 equals -a 創建 以及 cep 字節碼 1、一個".java"源文件中是否可以包括多個類(不是內部類)?有什麽限制? 可以有多個類,但只能有一個public的類,並且public的類名必須與文件名相一致。 2、Java有沒有g

Java試題—初級4

應用 運行 不可變 虛擬機 方法 一段 運算 等於 處理機制 31、String s = new String("xyz");創建了幾個StringObject?是否可以繼承String類? 兩個或一個都有可能,”xyz”對應一個對象,這個對象放在字符串常量

Java試題—初級3

相似性 boolean 記錄 所有 通用 原來 目的 tor 區別 21、ArrayList和Vector的區別 這兩個類都實現了List接口(List接口繼承了Collection接口),他們都是有序集合,即存儲在這兩個集合中的元素的位置都是有順序的,相當