Java基礎知識問答

1.問:被final修飾的引用變量指向的對象內容可變嗎?java

答:引用變量被final修飾以後,雖然不能再指向其餘對象,可是它指向安全

的對象的內容是可變的。app

2.java方法的參數 爲何有時會加上final關鍵字?dom

答:雖然不少java文檔說java是值傳遞的,其實java中對象的傳輸能夠認爲是引用傳遞。在方法中若是對參數中的內容進行修改的話,調用發起方的數據也會同步發生變化。而設置了final就確保,不會也不能對於參數進行修改,保證了調用發起方數據的安全。

這裏的引用傳遞通常只正對引用對象好比User 等實體。spa

public class Test {
    public static void main(String[] args)  {
        MyClass3 myClass = new MyClass3();
        StringBuffer buffer = new StringBuffer("hello");
        myClass.changeValue(buffer);
        System.out.println(buffer.toString());
    }
}
class MyClass3 {
    void changeValue(final StringBuffer buffer) {
        buffer.append("world");
    }
}
//結果輸出helloworld

3.final和staticcode

  不少時候會容易把static和final關鍵字混淆,static做用於成員變量用來表示只保存一份副本,而final的做用是用來保證變量不可變。看下面這個例子:對象

public static void main(String[] args)  {
        MyClass myClass1 = new MyClass();
        MyClass myClass2 = new MyClass();
        System.out.println(myClass1.i);
        System.out.println(myClass1.j);
        System.out.println(myClass2.i);
        System.out.println(myClass2.j);

    }
    static class MyClass {
        public final double i = Math.random();
        public static double j = Math.random();
    }

       運行這段代碼就會發現,每次打印的兩個j值都是同樣的,而i的值倒是不一樣的。從這裏就能夠知道final和static變量的區別了。--statiic的成員變量是屬於類的,不能夠被修改的。文檔

相關文章
相關標籤/搜索