Java筆記:類與方法
阿新 • • 發佈:2018-02-11
方法 子類 隱式 也不能 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筆記:類與方法