1. 程式人生 > 其它 >Java面試題(七)

Java面試題(七)

1. 在switch和if-else語句之間進行選取,當控制選擇的條件不僅僅依賴於一個x時,應該使用switch結構;正確麼?

不正確。 

通常情況下,進行比較判斷的處理,switch 和if-else可以互相轉換來寫;if-else作用的範圍比switch-case作用範圍要大,但是當switch-case和if-else都可以用的情況下,通常推薦使用switch-case。

比如:

public static void main(String[] args) {
    char ch = 'a';
    switch (ch) {
        case 'a':
            System.out.println("A");
            break;
        case 'b':
            System.out.println("B");
            break;
        case 'c':
            System.out.println("C");
            break;
        case 'd':
            System.out.println("D");
            break;
        case 'e':
            System.out.println("E");
            break;
        default:
            System.out.println("other");
            break;
}

換為if-else

public static void main(String[] args) {
    char ch = 'a';
    if (ch == 'a') {
        System.out.println("A");
    } else if (ch == 'b') {
        System.out.println('B');
    } else if (ch == 'c') {
        System.out.println("C");
    } else if (ch == 'd') {
        System.out.println("D");
    } else if (ch == 'e') {
        System.out.println("E");
    } else {
        System.out.println("Other");
}

2.使用final關鍵字修飾符一個變數時,是引用不能變,還是引用的物件不能變? 

final修飾基本型別變數,其值不能改變
但是final修飾引用型別變數,棧記憶體中的引用不能改變,但是所指向的堆記憶體中的物件的屬性值仍舊可以改變。

public class Test {
    public static void main(String[] args) {
        final Dog dog = new Dog("狗子");
        dog.name = "泰迪";//正確
        dog = new Dog("田園犬");//錯誤
    }
}

3.請解釋以下常用正則含義:\d,\D,\s,.,*,?,|,[0-9]{6},\d+

\d 匹配一個數字字元。等價於[0-9]
\D  匹配一個非數字字元。等價於^ [0-9]
\s 匹配任何空白字元,包括空格、製表符、換頁符等等。等價於 [ \f\n\r\t\v] 
. 匹配除換行符 \n 之外的任何單字元。要匹配 . ,請使用 . 
* 匹配前面的子表示式零次或多次。要匹配 * 字元,請使用 *
+ 匹配前面的子表示式一次或多次。要匹配 + 字元,請使用 +
| 將兩個匹配條件進行邏輯“或”(Or)運算
[0-9]{6} 匹配連續6個0-9之間的數字
\d+ 匹配至少一個0-9之間的數字

4.給定某java程式片段,該程式執行後,j的輸出結果為() 

public class Test {
    public static void main(String[] args) {
        int i=1;
        int j=i++; //2
    // 2>3 ,不執行if
    if ((j>++j)&&(i++==j)){
        j+=i;
    }
    //輸出j=2
    System.out.println(j);
    }
}

5.指出下列程式的執行結果

public class Test {
    public static void main(String[] args) {
        int i=9;
        switch (i) {
            default:
                System.out.println("default");
            case 0:
                System.out.println("zero");
                break;
            case 1:
                System.out.println("one");
                break;
            case 2:
                System.out.println("two");
                break;
            }
        }
}

輸出結果 :
default zero

解析:因為選擇了default執行,但是它居然沒有break也就意味著它停不下來,它必須找到一個最近的一個break讓它停下來

6.解釋繼承、過載、覆蓋。

繼承(英語:inheritance)是面向物件軟體技術當中的一個概念。
如果一個類別A“繼承自”另一個類別B,就把這個A稱為“B的子類別”,而把B稱為“A的父類別”也可以稱“B是A的超類”。
繼承可以使得子類別具有父類別的各種屬性和方法,而不需要再次編寫相同的程式碼。
在令子類別繼承父類別的同時,可以重新定義某些屬性,並重寫某些方法,即覆蓋父類別的原有屬性和方法,使其獲得與父類別不同的功能。
另外,為子類別追加新的屬性和方法也是常見的做法。
一般靜態的面向物件程式語言,繼承屬於靜態的,意即在子類別的行為在編譯期就已經決定,無法在執行期擴充。
那麼如何使用繼承呢?用extends關鍵字來繼承父類。
如上面A類與B類,當寫繼承語句時, class A類 extends B類{ } 其中A類是子類,B類是父類。

  英文 位置不同 作用不同
過載 overload 同一個類 為方法提供多種實現方式
重寫 override 子類與父類 父類的方法無法提供子類的要求,子類通過方法重寫滿足要求
  修飾符 返回值 方法名 引數 丟擲異常
過載 無關 無關 相同 不同 無關
重寫 大於等於 大於等於 相同 相同 小於等於

7. 什麼是編譯型語言,什麼是解釋型語言?java可以歸類到那種?

計算機不能直接理解高階語言,只能理解和執行機器語言,所以必須要把高階語言翻譯成機器語言,計算機才能執行 高階語言所編寫的程式。翻譯的方式有兩種,一個是編譯,一個是解釋。 用編譯型語言寫的程式執行之前,需要一個專門的編譯過程,通過編譯系統把高階語言翻譯成機器語言,把源高階程 序編譯成為機器語言檔案,比如windows下的exe檔案。以後就可以直接執行而不需要編譯了,因為翻譯只做了一 次,執行時不需要翻譯,所以一般而言,編譯型語言的程式執行效率高。 解釋型語言在執行的時候才翻譯,比如VB語言,在執行的時候,專門有一個直譯器能夠將VB語言翻譯成機器語言, 每個語句都是執行時才翻譯。這樣解釋型語言每執行一次就要翻譯一次,效率比較低。 編譯型與解釋型,兩者各有利弊。前者由於程式執行速度快,同等條件下對系統要求較低,因此像開發作業系統、大 型應用程式、資料庫系統等時都採用它,像C/C++、Pascal/Object Pascal(Delphi)等都是編譯語言,而一些網頁 指令碼、伺服器指令碼及輔助開發介面這樣的對速度要求不高、對不同系統平臺間的相容性有一定要求的程式則通常使用 解釋性語言,如JavaScript、VBScript、Perl、Python、Ruby、MATLAB 等等。

JAVA語言是一種編譯型-解釋型語言,同時具備編譯特性和解釋特性(其實,確切的說java就是解釋型語言,其所謂的編譯過程只是將.java檔案程式設計成平臺無關的位元組碼.class檔案,並不是向C一樣編譯成可執行的機器語言,在此請 讀者注意Java中所謂的“編譯”和傳統的“編譯”的區別)。作為編譯型語言,JAVA程式要被統一編譯成位元組碼檔案—— 檔案字尾是class。此種檔案在java中又稱為類檔案。java類檔案不能再計算機上直接執行,它需要被java虛擬機器翻譯 成本地的機器碼後才能執行,而java虛擬機器的翻譯過程則是解釋性的。java位元組碼檔案首先被載入到計算機記憶體中, 然後讀出一條指令,翻譯一條指令,執行一條指令,該過程被稱為java語言的解釋執行,是由java虛擬機器完成的。

8.try{}裡面有一個return語句,那麼緊跟在這個try後的finally, 裡面的語句在異常出現後,都會執行麼?為什麼?

在異常處理時提供 finally 塊來執行任何清除操作

如果有finally的話,則不管是否發生異常,finally語句都會被執行,包括遇到return語句。

finally中語句不執行的唯一情況中執行了System.exit(0)語句

9.建構函式的描述

建構函式是類的一種特殊函式,它的方法名必須與類名相同

建構函式的主要作用是完成對類的物件的初始化工作

一般在建立新物件時,系統會自動呼叫建構函式

 10.一個類的構造方法是否可以被過載(overloading),是否可以被子類重寫 (overrding)?

構造方法可以被過載,但是構造方法不能被重寫,子類也不能繼承到父類的構造方法


若存在侵權,請聯絡,謝謝!