1、构造方法定义

一个类中定义的方法如果同时满足以下三个条件,该方法称为构造方法

1、方法名与类名相同

2、在方法名的前面没有返回值类型的声明

3、在方法中不能使用return语句返回一个值,但是可以单独写return语句来作为方法的结束

package test;

public class test1 {
public test1() {
System.out.println("无参数构造方法被调用");
}
}
package test;

public class test2 {
public static void main(String[] args) {
test1 t1=new test1();
}
}

有参的构造方法实现对属性的赋值

package test;

public class test1 {
String breakfast;

public test1(String a) {
breakfast = a;
}

public void eat() {
System.out.println("今天早上吃" + breakfast);
}
}
package test;

public class test2 {
public static void main(String[] args) {
test1 t1 = new test1("面包和牛奶");
t1.eat();
}

}

2、构造方法重载

package test;

public class test1 {
String breakfast;
int milk;

public test1(String a, int b) {
breakfast = a;
milk = b;
}

public test1(String a) {
breakfast = a;
}

public void eat() {
System.out.println("今天早上吃" + breakfast + ",牛奶喝了" + milk + "ml");
}
}
package test;

public class test2 {
public static void main(String[] args) {
test1 t1 = new test1("面包和牛奶");
test1 t2 = new test1("面包和牛奶", 200);
t1.eat();
t2.eat();
}

}

在Java中的每个类都至少有一个构造方法,如果在一个类中没有 定义构造方法,系统会自动为这个类创建一个默认的构造方法,这个默认 的构造方法没有参数,在其方法体中没有任何代码,即什么也不做

package test;

public class test1 {
String breakfast;
int milk;

public test1(int milk) {//访问类的成员变量
this.milk = milk;
}

public test1() {
System.out.println("eat");
}

public test1(String breakfast) { //构造方法(注意 不能在普通成员方法使用 必须在第一行 不能相互调用)
this();
this.breakfast = breakfast;
}

public void eating() {
System.out.println("Have breakfast every day");
}

public void eat() { //访问类的成员方法
this.eating();
int milk=200;
System.out.println("今天早上吃" + breakfast + ",牛奶喝了" + this.milk + "ml");
}
}

垃圾回收

1、一个对象在成为垃圾后会暂时地保留在内存中,当这样的垃圾堆积到一定程度时, Java虚拟机就会启动垃圾回收器将这些垃圾对象从内存中释放,从而使程序获得更 多可用的内存空间。

2、除了等待Java虚拟机进行自动垃圾回收外,还可以通过调用System.gc()方法来通知 Java虚拟机立即进行垃圾回收。

3、当一个对象在内存中被释放时,它的finalize()方法会被自动调用,因此可以在类中通 过定义finalize()方法来观察对象何时被释放

package test;

public class test1 {
@Override
protected void finalize() throws Throwable{
System.out.println("垃圾回收");
}

public static void main(String[] args) {
test1 t1 = new test1();
test1 t2 = new test1();
t1=null;
t2=null;
System.gc();
int i;
for (i=1;i<100;i++){

}
}
}