1. 程式人生 > >邁進java初中級程式設計師分水嶺是否合格?十個題告訴你!

邁進java初中級程式設計師分水嶺是否合格?十個題告訴你!

前言

不論你是職場新人還是步入職場N年的職場新人大哥大~當然這個N<3~,我能擔保你答不對這十個題~不要問我為什麼這麼自信~,這些個題還是“有水平”的javase的基礎題,傳聞小白指定鴨蛋分,一測一個準,哈哈。

作為將來要成為架構師的男人,對,你沒看錯,就是在說你 ~皮一下很開森~ ,what?你是小白?我頂你個肺,我叫聲槓精,你敢應嗎,那個代號9527的槓精,說你呢快快來答題,看你能答對幾道題。

題一

下面的程式有問題嗎?如果有問題說明一下, 如果沒有問題猜測一下執行結果

public static void main(String[] args){ 
    short s = 1;
     s=s+1; 
    System.out.println(s); 
} 

ps : 各位兄嘚都是大孩子了,各位都把自己的結果記在個小本本上再看下面的分析答案~

分析: s = s + 1 計算結果被提升為int型別,再向short型別賦值時發生錯誤,因為不能將取值範圍 大的型別賦值到取值範圍小的型別,所以這個程式會報錯編譯失敗。

題二

下面的程式有問題嗎?如果有問題說明一下, 如果沒有問題猜測一下執行結果

public static void main(String[] args){ 
    short s = 1;
     s+=1; 
    System.out.println(s); 
} 

ps : 各位兄嘚都是大孩子了,各位都把自己的結果記在個小本本上再看下面的分析答案~

分析: s += 1 邏輯上看作是 s = s + 1 計算結果被提升為int型別,再向short型別賦值時發生錯誤,因為不能將取值範圍 大的型別賦值到取值範圍小的型別。但是, s=s+1進行兩次運算 , += 是一個運算子,只運算一次,並帶有強制轉換的特點, 也就是說 s += 1 就是 s = (short)(s + 1) ,因此程式沒有問題編譯通過,執行結果是2.

到這裡,兩個都錯了的自覺點給樓主文章右上角點個贊,鴨!恭喜獲得第N+1個準確無疑的天真小白榮譽勳章,千萬別嫌棄,就像俠嵐風語咒裡說的:只要心懷正義,俠嵐無處不在!所以我只想表達的是,天真小白榮譽勳章也是勳章。hhhhhh, ~哎哎哎,別打...別打...別打臉.~

題三

下面的程式有問題嗎?如果有問題說明一下, 如果沒有問題猜測一下執行結果

public static void main(String[] args){ 
        byte b1=1; 
        byte b2=2; 
        byte b3=1 + 2; 
        byte b4=b2 + b3; 
        System.out.println(b3); 
        System.out.println(b4); 
}

ps : 各位兄嘚都是大孩子了,各位都把自己的結果記在個小本本上再看下面的分析答案~

分析: b3 = 1 + 2 , 1 和 2 是常量,為固定不變的資料,在編譯的時候(編譯器javac),已經確定了 1+2 的結果並沒 有超過byte型別的取值範圍,可以賦值給變數 b3 ,因此 b3=1 + 2 是正確的。 反之, b4 = b2 + b3 , b2 和 b3 是變數,變數的值是可能變化的,在編譯的時候,編譯器javac不確定b2+b3的結果是什 麼,因此會將結果以int型別進行處理,所以int型別不能賦值給byte型別,因此編譯失敗。

題四

下面的程式有問題嗎?如果有問題說明一下, 如果沒有問題猜測一下執行結果

public static void main(String[] args){ 
      short s = 32767;
      s = (short)(s + 10);

      System.out.println(s); 
}

ps : 各位兄嘚都是大孩子了,各位都把自己的結果記在個小本本上再看下面的分析答案~

分析:定義s為short範圍內最大值 (2^15) - 1 = 32767,運算後,強制轉換(int換為short),砍掉2個位元組後會出現不確定的結果,因為這個值以及超出了short型別資料的範圍,從而變成負數結果-32759

到這裡,四個題都錯了的自覺點給樓主文章右上角點個贊,還有小白同學千萬別灰心,想當年樓主剛學java的時候,在騰訊課堂聽課直播的是時候,那個老師出的就是這些型別題,我一直答錯,那個老師提了樓主我好幾次:這位小白同學又是你,你又答錯了...不提了,往事不堪回首。所以,小白同學千萬別灰心哦~

題五

下面的程式有問題嗎?如果有問題說明一下, 如果沒有問題猜測一下執行結果

 public static void main(String[] args) {
      
     int a=0;
     for (int i = 0; i >= a && i<100 ; i++){
         a+=i;
     }
        System.out.println(a);
    }

ps : 各位兄嘚都是大孩子了,各位都把自己的結果記在個小本本上再看下面的分析答案~

分析:這個稍微沒有任何細節以及“套路”,只是單純的摻雜著些邏輯,所以段個點debug吧,感受一下吧,結果是6

題六

下面的程式有問題嗎?如果有問題說明一下, 如果沒有問題猜測一下執行結果

 public static void main(String[] args) {
      
        int  x=4;
        System.out.println("value  is  " + ((x>4) ? 99.9 : 9));

    }

分析:這個題我估計99%的會錯 ~包括我自己~ ,如果我沒猜錯的話你的結果是9,啥?你的結果是99.9,額這個,如果這位同學你不是槓精那我建議你回家種田吧,我和你一起,你鋤地我耕田...呃呃呃那結果是什麼呢,結果居然是9.0 。。。至於原因我還是不斷定的哈哈沒有仔細去專研過,如果必須要個結果我估計java把9這個整數預設當成浮點型別資料,我當然只是推論,那麼知道的大佬就請評論出來吧。

題七

下面的程式有問題嗎?如果有問題說明一下, 如果沒有問題猜測一下執行結果

 public static void main(String[] args) {
 //對於下面兩句程式碼是否編譯出錯,很基礎的哦
          double d=3.10;
          float f=3.10; 
//對於下面兩句程式碼是否編譯出錯,以及列印結果是多少
        float a = 12345678.90123456789f;
        double b=0.12345678901234567890;
        float c=0.12345678901234567890f;
     
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);

    }

ps : 各位兄嘚都是大孩子了,各位都把自己的結果記在個小本本上再看下面的分析答案~

分析:3.10是浮點型,浮點型字面值預設當做double型別來處理,直接編譯通過;如果是float型別則必須加 F或者f,若沒加,直接編譯不通過,會報錯“損失精度”,至於解決方法也很簡單, 第一種方式:強制型別轉換float f1=(float)3.10; 第二種方式:沒有型別轉換直接加F或者f如 folat f2=3.10f ;對於abc的列印結果a = 1.2345679E7b = 0.12345678901234568c = 0.12345679

如果還不懂java浮點型別float以及double,可以參考這篇文章

什麼是浮點型?什麼是單精度浮點數(float)以及雙精度浮點數(double)?

題八

分析下列程式程式碼,猜想下輸出結果。

 public static void main(String[] args) { 
     int a = 1; int b = 2; 
     System.out.println(a); 
     System.out.println(b); 
     change(a, b); 
     System.out.println(a); 
     System.out.println(b); 
     }
     public static void change(int a, int b) { 
     a = a + b; b = b + a; 
 } 

分析下列程式程式碼,猜想下輸出結果。

public static void main(String[] args) { 
    int[] arr = {1,3,5}; 
    System.out.println(arr[0]); 
    change(arr); 
    System.out.println(arr[0]); 
}
    
    public static void change(int[] arr) {
    arr[0] = 200; 
   }

這個題就不分析了,主要是考察陣列的,答錯的童靴可能對陣列瞭解的不是特別清析,可以參考這篇文章 java陣列定義、使用、以及陣列記憶體分析詳解

題九

執行結果是怎樣的呢?

  public static void main(String[] args) {
       
        int i = 1, j = ++i;
        System.out.println(i);
        System.out.println(j);
    }

分析:估計各位會覺得i=1,j=2,噗哈哈,你還太單純了,啥?你的答案是i=1,j=1?回家種田吧兄嘚我陪你。那麼結果是什麼呢?i=2,j=2,原因也很簡單,i其實是個變數,j也是個變數,之前i值是1,之後j經歷了++i,就這個經歷的同時,i已經自增++了,所以也是2.

到這裡,九個題錯了一半以上的同學自覺點給樓主文章右上角點個贊,千萬別灰心,就像俠嵐風語咒裡說的:只要心懷正義,俠嵐無處不在!所以還要繼續加油哇!向架構師道路衝鴨!!!

題十

這個題主要考察多型知識,涉及到向上轉型和向下轉型的概念,所以是比較偏難的!

package Polymorphic;
//爺爺類
class Ye {
    public String show(Sun obj) {
        return ("Ye and Sun");
    }

    public String show(Ye obj) {
        return ("Ye and Ye");
    }

}
//爸爸類
class Fu extends Ye {
    public String show(Fu obj) {
        return ("Fu and Fu");
    }

    public String show(Ye obj) {
        return ("Fu and Ye");
    }
}
//兒子類
class Zi extends Fu {

}
//孫子類
class Sun extends Fu {

}

public class PolymorphicTest {
    public static void main(String[] args) {
         Ye y = new Ye();
        Ye y2 = new Fu(); //向上
        Fu f = new Fu();
        Zi z = new Zi();
        Sun s = new Sun();


        System.out.println("第一題 " + y.show(f));
        System.out.println("第二題 " + y.show(z));
        System.out.println("第三題 " + y.show(s));
        System.out.println("第四題 " + y2.show(f));  //到這裡掛了???
        System.out.println("第五題 " + y2.show(z));
        System.out.println("第六題 " + y2.show(s));
        System.out.println("第七題 " + f.show(f));
        System.out.println("第八題 " + f.show(z));
        System.out.println("第九題 " + f.show(s));
     
    }
}

執行結果

第一題 Ye and Ye
第二題 Ye and Ye
第三題 Ye and Sun
第四題 Fu and Ye
第五題 Fu and Ye
第六題 Ye and Sun
第七題 Fu and Fu
第八題 Fu and Fu
第九題 Ye and Sun

分析的話就涉及到太多知識點了,比如多型的金典向上向下轉型,這都是必備的重點基礎的基礎,建議參考這篇文章【藍色字型,點選進入】

【java基礎之多型】理解多型的向上向下轉型從“媽媽我想吃烤山藥”講起

到這裡有木有全部正確的大哥大捏,如果有,我代表全體鴨蛋分的小白膜拜下大佬~

最後,已每題一分計算,你得多少分?勇敢說出來,儘管笑死樓主

如果本文對你有一點點幫助,那麼請點個讚唄,謝謝~

最後,若有不足或者不正之處,歡迎指正批評,感激不盡!如果有疑問歡迎留言,絕對第一時間回覆!

歡迎各位關注我的公眾號,一起探討技術,嚮往技術,追求技術,說好了來了就是盆友喔...