一 成員變量
成員變量是指類的一些屬性定義,標志類的靜態特征,它的基本格式如下:
【訪問修飾符】【修飾符】【類型】【屬性名稱】= 【初始值】
訪問修飾符:public(公共的);protected(受保護的);無修飾符和private(私有的)。
修飾符:對屬性特征的描述:如static,final 等等。
類型:屬性的數據類型,可以是任意類型。
屬性名稱:任何合法標識符。
初始值:賦值給屬性的初始值。
舉例:public static int index = 0;
二 成員方法
成員方法就是對象所具有的動態功能。基本格式如下:
【訪問修飾符】【修飾符】【返回值類型】【方法名稱】【參數】【異常】【方法體】
訪問修飾符:public(公共的);protected(受保護的);無修飾符和private(私有的)。
修飾符:對屬性特征的描述:如static,final,abstract 等等。
返回值類型:方法返回數據的類型。
方法名稱:任何合法標識符。
參數:可以有多個,使用逗號分隔。
異常:關鍵字:throws 【具體異常】
方法體:該方法具體實現功能的地方。
案例:創建一個Book類
1 public class Book { 2 3 private int id; //成員變量 4 private String name; //成員變量 5 6 /** 7 * 成員方法 8 * @return 9 */ 10 public int getId() { 11 return id; 12 } 13 14 /** 15 * 成員方法 16 * @return 17 */ 18 public void setId(int id) { 19 this.id = id; 20 } 21 22 /** 23 * 成員方法 24 * @return 25 */ 26 public String getName() { 27 return name; 28 } 29 30 /** 31 * 成員方法 32 * @return 33 */ 34 public void setName(String name) { 35 this.name = name; 36 } 37 }
三 構造函數
構造函數:是特殊的成員方法,他的作用是創建對象並初始化成員變量。
構造函數定義規則:構造方法的方法名,必須和類名一致。
每個類都有一個隱藏的無參構造函數。
1 public class Dog{ 2 3 /** 4 * 帶參構造函數 5 * @param name 6 * @param age 7 */ 8 public Dog(String name,int age){ 9 this.age = age; 10 this.name = name; 11 } 12 13 /** 14 * 無慘構造函數 15 */ 16 public Dog(){} 17 18 String name; 19 int age; 20 21 public void ptint(){ 22 System.out.println("name = "+this.name+";age = "+age); 23 } 24 25 public static void main(String[] args) { 26 new Dog().ptint(); 27 new Dog("花花",9).ptint(); 28 } 29 }
運行結果:
四 析構函數
析構函數:finalize();
垃圾回收器准備釋放內存的時候,會先調用finalize()。
在 Java 中,當你創建一個對象時,Java 虛擬機(JVM)為該對象分配內存、調用構造函數並開始跟蹤你使用的對象。當你停止使用一個對象(就是說,當沒有對該對象有效的引用時),JVM 通過垃圾回收器將該對象標記為釋放狀態。
當垃圾回收器將要釋放一個對象的內存時,它調用該對象的finalize() 方法(如果該對象定義了此方法)。垃圾回收器以獨立的低優先級的方式運行,只有當其他線程掛起等待該內存釋放的情況出現時,它才開始運行釋放對象的內存。(事實上,你可以調用System.gc() 方法強制垃圾回收器來釋放這些對象的內存。)
在以上的描述中,有一些重要的事情需要注意。首先,只有當垃圾回收器釋放該對象的內存時,才會執行finalize()。如果在 Applet 或應用程序退出之前垃圾回收器沒有釋放內存,垃圾回收器將不會調用finalize()。
其次,除非垃圾回收器認為你的 Applet 或應用程序需要額外的內存,否則它不會試圖釋放不再使用的對象的內存。換句話說,這是完全可能的:一個 Applet 給少量的對象分配內存,沒有造成嚴重的內存需求,於是垃圾回收器沒有釋放這些對象的內存就退出了。
顯然,如果你為某個對象定義了finalize() 方法,JVM 可能不會調用它,因為垃圾回收器不曾釋放過那些對象的內存。調用System.gc() 也不會起作用,因為它僅僅是給 JVM 一個建議而不是命令。