一 成员变量
成员变量是指类的一些属性定义,标志类的静态特征,它的基本格式如下:
【访问修饰符】【修饰符】【类型】【属性名称】= 【初始值】
访问修饰符: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 一个建议而不是命令。