1. 程式人生 > >Java筆記:類與方法

Java筆記:類與方法

方法 子類 隱式 也不能 final 操作 nali def nbsp

一、對象引用

Java不允許使用指針,取而代之的是對象引用。對象引用可理解為指向對象的指針,但無法像真實的指針一樣指向內存的任意位置,也不能像操作地址那樣操作對象引用。除基本類型外的所有類型均為對象,所有的對象又均為引用類型,對象引用是Java安全性的關鍵。

class Solution {
    public static void main(String[] args) {
        Object obj;//聲明對象引用
        obj = new Object();//實例化對象
    }
}

二、垃圾回收

Java的垃圾回收機制可以自動釋放內存。當一個對象不再存在引用時,便認為該對象不再被需要,Java虛擬機會自動回收該對象占用的內存。不需要像C/C++那樣顯式釋放內存。類似C++的析構函數,Java可通過重寫對象的finalize方法來顯示指明當對象被釋放時進行何種操作。

class Solution {
    protected void finalize() {
        //finalization code
    }
}

三、訪問權限

訪問權限 同類 同包 子類 不同包
public
protected ×
default × ×
private × × ×

四、參數傳遞

class Solution {
    public static void change(String s) {
        s += " Java";
    }

    
public static void main(String[] args) { String s = "Hello"; change(s); System.out.println(s);//輸出Hello而非Hello Java } }

String類型在發生變化時不會對原本的對象做出變化,而是再次實例化一個新的對象並改變引用。理論上修改引用類型會改變原本對象的值,但這樣的結論對於String類型不適用。修改後的String引用會指向新的對象,而原本的對象並未發生改變。需要實現修改字符串的方法應當使用StringBuilder或StringBuffer。

五、可變長度參數

class Solution {
    public static int sum(int... nums) {
        int res = 0;
        for (int i : nums)
            res += i;
        return res;
    }

    public static void main(String[] args) {
        int a = sum(1, 2, 3, 4, 5);
        System.out.println(a);
    }
}

當需要傳遞不確定數量的參數時,我們會選擇將參數存入數組後以數組作為參數進行傳遞。但是將數組存入數組的步驟是繁瑣的,我們希望直接將不確定數量的變量作為參數進行傳遞。可變長度參數事實上是一個隱式聲明的數組。可變長度參數必須是最後一個參數並且只能存在一個可變長度參數,聲明第二個可變長度參數是非法的。重載方法的參數也不允許出現歧義。

Java筆記:類與方法