-
2乘以8等於幾的最效率的方法?
将一個數左移n位,就相當于乘以了2的n次方。
那麼,一個數乘以8隻要将其左移3位即可,而位運算是cpu直接支援的,效率最高。
是以,2乘以8等於幾的最效率的方法是2<<3
- Break、continue和return的使用方法?
-
break :
(1).結束目前整個循環,執行目前循環下邊的語句。忽略循環體中任何其它語句和循環條件測試。
(2).隻能跳出一層循環,如果你的循環是嵌套循環,那麼你需要按照你嵌套的層次,逐漸使用break來跳出。[逐層判斷,逐漸跳出]
(3).break在循環體内,強行結束循環的執行,也就是結束整個循環過程,不在判斷執行循環的條件是否成立,直接轉向循環語句下面的語句。
(4).當break出現在循環體中的switch語句體内時,其作用隻是跳出該switch語句體。 總的來說:就近原則,結束目前的整個循環。
-
return:
(1).return 從目前的方法中退出,傳回到該調用的方法的語句處,繼續執行。
(2).return 傳回一個值給調用該方法的語句,傳回值的資料類型必須與方法的聲明中的傳回值的類型一緻。
(3). return後面也可以不帶參數,不帶參數就是傳回空,其實主要目的就是用于想中斷函數執行,傳回調用函數處。
-
continue:
(1).終止本次循環的執行,即跳過目前這次循環中continue語句後尚未執行的語句,接着進行下一次循環條件的判斷。
(2).結束目前循環,進行下一次的循環判斷。
(3).終止目前的循環過程,但他并不跳出循環,而是繼續往下判斷循環條件執行語句.他隻能結束循環中的一次過程,但不能終止循環繼續進行.。
-
簡述交換兩個數的方法及優劣性
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;
總結:
方式一是最常見的,可讀性高,但是需要在記憶體中存放臨時變量,但是對于現在來說,需要的記憶體空間很小,而且存放臨時變量的記憶體很快就會釋放,不存在問題。
方式二有缺陷,當兩個數相加之後,可能其結果超出了變量類型能表達的最大範圍,這個時候結果就會出問題,不推薦使用。
方式三效率是最高的,但是可讀性不是很好。
在程式中我們應該盡可能的使用方式一,提高程式的可讀性。但是需要了解方式三,以及方式三的原理。
-
Java 構造方法和成員變量初始化順序
執行順序:
執行父類靜态代碼 執行子類靜态代碼
初始化父類成員變量
初始化父類構造函數
初始化子類成員變量
初始化子類構造函數
-
為什麼byte b=5;b+=5;不會報錯,而b=b+5;就會報錯?
因為前者類似于++運算,對于常量來說jvm不會編譯器進行優化;而後者在進行預算的時候會自動進行資料類型的自動轉化,提升為int類型,而byte類型是不能直接被int類型的數機娘指派的。
-
對于代碼:
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
-
如下代碼:
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