java面試| 精選基礎題(3)

天天進步一點點,距離大腿又近一步!
閱讀本文大概須要6分鐘

系列文章
java面試| 精選基礎題(1)
java面試|精選基礎題(2)java

1.float f=3.4;是否正確?

答:不正確,編譯沒法經過。3.4是雙精度數,將雙精度型(double)賦值給浮點型(float)屬於下轉型(down-casting,也稱爲窄化)會形成精度損失,所以須要強制類型轉換float f =(float)3.4; 或者寫成float f =3.4F;。(推薦閱讀:java"當心機"(1)【資源彩蛋!】第4點類型轉換)面試

2.+=的隱式轉換

例1:short s1 = 1; s1 = s1 + 1;有錯嗎?例2:short s1 = 1; s1 += 1;有錯嗎?
  • 對於例1,編譯不經過。因爲1是int類型,所以s1+1運算結果也是int 型,須要強制轉換類型才能賦值給short型。(相關閱讀:java"當心機"(1)【資源彩蛋!】第5點類型提高)
  • 對於例2,能夠正確編譯.由於s1 += 1;至關於s1 = (short)(s1 + 1);編譯器會自動隱式直接將+=運算符後面的操做數強制裝換爲前面變量的類型。

3.try{}裏有一個return語句,代碼執行順序如何?

public class ReturnInTry {    public static void main(String[] args){       System.out.println(test());    }   static public String test(){       String str = "return1";        try{            return str;        }finally {            str = "return2";            System.out.println("finally");        }    }}

輸出:數組

finallyreturn1

因而可知,finally代碼塊中的代碼會在return語句前執行,但爲何finally代碼塊中的str = "return2";未生效呢?
其實它這樣執行的:當try中含有return語句且存在finally代碼塊,return語句不會馬上返回而是記錄下該返回值(存在某個地方),待finally代碼塊執行完畢後再返回該值,因此在finally代碼塊中沒法改變return的返回值。安全

4.for與foreach的區別

  • for 效率更高,能夠在遍歷的過程當中對源數組或者集合進行修改
  • foreach 便捷簡單;更安全
    foreach實際上使用迭代器實現遍歷的,其中會產生中間變量,致使性能的下降;foreach雖然能遍歷數組或者集合,可是隻能用來遍歷,沒法在遍歷的過程當中對數組或者集合進行修改

5.java的this關鍵字

  • 概念
    this是自身的一個對象,表明對象自己,能夠理解爲:指向對象自己的一個指針。
  • 用法
    1.普通的直接引用
public class ThisTest {    public ThisTest retutrnThis(){        //this至關因而指向當前對象自己        //返回對象自己        return this;    }}

2.形參與成員名字重名時,用this來區分微信

public class ThisTest {    private String name;    public void ThisTest (String test){        this.test = test;    }}

3.引用構造函數函數

public class ThisTest {    private String name;    private int count;    public void ThisTest (String test){        this.test = test;    }    public void ThisTest (String test,int count){         //調用另外一個構造函數        //只能在第一行調用,且只能調用一次        this.ThisTest(test);        this.count = count;    }}

6.java的super關鍵字

  • 概念
    this和super很像,this指向的是當前對象自己,super指向的是當前調用對象的父類。子類建立對象時調用構造函數,會隱式調用父類的無參構造方法,建立一個子類對象的同時,該子類對象還包含了一個父類對象。該父類對象在子類對象內部(super指向該對象)。
  • 做用
    1.主要存在於子類方法中,用於指向子類對象中父類對象。
    2.訪問父類的屬性
    3.訪問父類的函數
    4.訪問父類的構造函數
  • 必須使用super的時刻
    1.父類覆蓋了無參構造函數時
public class Father { public String name; public Father(String name) {  this.name = name; }}public class Son extends Father{ public Son(String name) {  //必須調用,不然他會默認調用父類的無參構造函數,  //而父類的無參構造函數已經被有參的覆蓋,因此找不到  super(name); }}

2.子類重寫了父類的方法,又想用父類該方法時性能

class Parents{    Public Parents(){}    public void write(){        System.out.println("Parents");   }}class Children extends Parents{    Public Children(){}    public void write(){        System.out.println("Children");        super.write();//調用父類的write方法   }}

熱門閱讀:this

**實用代碼|javaMail發送郵件(文末重磅資源!)
【推薦兩款神器】不限速下載、追劇神器
java"當心機"(1)【資源彩蛋!】**spa


**一個立志成大腿而天天努力奮鬥的年輕人
期待你的到來!**指針

微信公衆號,java從心

若是以爲文章不錯,請點個贊、分享給你的朋友唄!

相關文章
相關標籤/搜索