程序員這十個java題你都會嗎?

前言

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

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

題一

下面的程序有問題嗎?若是有問題說明一下, 若是沒有問題猜想一下運行結果數組

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

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

分析: s = s + 1 計算結果被提高爲int類型,再向short類型賦值時發生錯誤,由於不能將取值範圍 大的類型賦值到取值範圍小的類型,因此這個程序會報錯編譯失敗。字體

題二

下面的程序有問題嗎?若是有問題說明一下, 若是沒有問題猜想一下運行結果.net

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

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

分析: s += 1 邏輯上看做是 s = s + 1 計算結果被提高爲int類型,再向short類型賦值時發生錯誤,由於不能將取值範圍 大的類型賦值到取值範圍小的類型。可是, s=s+1進行兩次運算 , += 是一個運算符,只運算一次,並帶有強制轉換的特色, 也就是說 s += 1 就是 s = (short)(s + 1) ,所以程序沒有問題編譯經過,運行結果是2.code

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

題三

下面的程序有問題嗎?若是有問題說明一下, 若是沒有問題猜想一下運行結果圖片

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基礎之多態】理解多態的向上向下轉型從「媽媽我想吃烤山藥」講起

到這裏有木有所有正確的大哥大捏,若是有,我表明全體鴨蛋分的小白膜拜下大佬~

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

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

最後,如有不足或者不正之處,歡迎指正批評,感激涕零!

歡迎各位關注個人公衆號,一塊兒探討技術,嚮往技術,追求技術

在這裏插入圖片描述

相關文章
相關標籤/搜索