天天看點

java常見例題一

  1. 2乘以8等於幾的最效率的方法?

    将一個數左移n位,就相當于乘以了2的n次方。

    那麼,一個數乘以8隻要将其左移3位即可,而位運算是cpu直接支援的,效率最高。

    是以,2乘以8等於幾的最效率的方法是2<<3

  2. Break、continue和return的使用方法?
  3. break :

    (1).結束目前整個循環,執行目前循環下邊的語句。忽略循環體中任何其它語句和循環條件測試。

    (2).隻能跳出一層循環,如果你的循環是嵌套循環,那麼你需要按照你嵌套的層次,逐漸使用break來跳出。[逐層判斷,逐漸跳出]

    (3).break在循環體内,強行結束循環的執行,也就是結束整個循環過程,不在判斷執行循環的條件是否成立,直接轉向循環語句下面的語句。

    (4).當break出現在循環體中的switch語句體内時,其作用隻是跳出該switch語句體。 總的來說:就近原則,結束目前的整個循環。

  4. return:

    (1).return 從目前的方法中退出,傳回到該調用的方法的語句處,繼續執行。

    (2).return 傳回一個值給調用該方法的語句,傳回值的資料類型必須與方法的聲明中的傳回值的類型一緻。

    (3). return後面也可以不帶參數,不帶參數就是傳回空,其實主要目的就是用于想中斷函數執行,傳回調用函數處。

  5. continue:

    (1).終止本次循環的執行,即跳過目前這次循環中continue語句後尚未執行的語句,接着進行下一次循環條件的判斷。

    (2).結束目前循環,進行下一次的循環判斷。

    (3).終止目前的循環過程,但他并不跳出循環,而是繼續往下判斷循環條件執行語句.他隻能結束循環中的一次過程,但不能終止循環繼續進行.。

  6. 簡述交換兩個數的方法及優劣性

    int a;

    int b;

    方式一:通過存放變量temp

    int temp=a;

    a=b;

    b=temp;

    方式二:通過加減法

    a+=b;

    b=a-b;

    a=a-a;

    方式三:通過位運算符

    a=a^a ^b;

    b=a^b ^b;

    總結:

    方式一是最常見的,可讀性高,但是需要在記憶體中存放臨時變量,但是對于現在來說,需要的記憶體空間很小,而且存放臨時變量的記憶體很快就會釋放,不存在問題。

    方式二有缺陷,當兩個數相加之後,可能其結果超出了變量類型能表達的最大範圍,這個時候結果就會出問題,不推薦使用。

    方式三效率是最高的,但是可讀性不是很好。

    在程式中我們應該盡可能的使用方式一,提高程式的可讀性。但是需要了解方式三,以及方式三的原理。

  7. Java 構造方法和成員變量初始化順序

    執行順序:

    執行父類靜态代碼 執行子類靜态代碼

    初始化父類成員變量

    初始化父類構造函數

    初始化子類成員變量

    初始化子類構造函數

  8. 為什麼byte b=5;b+=5;不會報錯,而b=b+5;就會報錯?

    因為前者類似于++運算,對于常量來說jvm不會編譯器進行優化;而後者在進行預算的時候會自動進行資料類型的自動轉化,提升為int類型,而byte類型是不能直接被int類型的數機娘指派的。

  9. 對于代碼:

    public class T11 {

    public static void main(String[] args) {

    try {

    System.out.println(“main1”);

    ma();

    System.out.println(“main2”);

    } catch(Exception e) {

    System.out.println(“Catch Exception in main”);

    System.out.println(e.getMessage());

    }

    }

    public static void ma() throws IOException {

    try {

    System.out.println(“ma1”);

    mb();

    System.out.println(“ma2”);

    } catch (SQLException e) {

    System.out.println(“Catch SQLException in ma”);

    throw new IOException(e.getMessage());

    }

    }

    public static void mb() throws SQLException {

    throw new SQLException(“SQLException in mb”);

    }

    }

    輸出結果是:

    main1, ma1, Catch SQLException in ma, ,Catch Exception in main, SQLException in mb,

(多選題)給出以下代碼,請問該程式的運作結果是

class A{

private int x=0;

static int y=1;

protected int z=2;

}

class B extends A{

void method(){

System.out.println(x);

System.out.println(y);

System.out.println(z);

}

}

下列說法正确的是( )

A.程式編譯錯誤,因為類B不能通路變量x

B.程式編譯成功,列印輸出012

C.程式編譯錯誤,如果移走System.out.println(x)這條語句,可使編譯程式通過

D.程式編譯錯誤,因為變量x未在類B中定義

//答案為acd

  1. 如下代碼:

    public class AA {

    public static void main(String[] args) {

    int[] a = {1,2,3,4,5};

    expand(a);

    changeArray(a);

    printArray(a);

    }

    public static void expand(int[] a){

    int[] newArray = new int[a.length * 2];

    System.arraycopy(a, 0, newArray, 0, a.length);

    a = newArray;

    }

    public static void changeArray(int[] a){

    a[0] = 10;

    }

    public static void printArray(int[] a){

    for(int i = 0; i<a.length; i++){

    System.out.print(a[i] + “\t”);

    }

    System.out.println();

    }

    }

    則結果為()

//10,2,3, 4,5