java中的构造方法

时间:2022-07-05 19:31:50

java中的构造方法

java中所有的类都有构造方法,用来对该类的对象进行初始化。

构造方法共有四种访问权限:
- public:任何类都能创建这个类的实例。
- protected:只有该类的子类以及与该类在同一个包中的类可以创建该类的对象。
- private:其他类不可以将该类实例化。
- default或package:只有与该类在同一个包中的类可以实例化该类。

注意:
- 构造方法必须与该类同名。
- 构造方法不能有返回值。
- 用户不能直接调用构造方法,必须通过关键字new自动调用它。
- 在类的定义中可以不定义构造方法,而其他类仍然可以通过new来实例化该类的对象,这就是java中默认的构造方法。此时系统会用默认值来初始化对象的成员变量。数值型默认为0,boolean默认为false,char默认为’\0’,对象默认为null。
- 一旦在类中定义了构造方法,则不执行默认的构造方法。

体会下面两个例子:

public class DefaultDemo {
public int i;
public char c;
public boolean b;
public DefaultDemo() {

}

public static void main(String[] args) {
DefaultDemo d = new DefaultDemo();
System.out.println("默认的数值型为" + d.i);
System.out.println("默认的char为" + d.c);
System.out.println("默认的boolean为" + d.b);
}
}
/*
* 默认的数值型为0
默认的char为
默认的boolean为false
*/
class Dog {
// 定义weight属性的访问控制为private,使得外界不能改变weight值
private int weight;

// 创建构造方法,初始化该类的对象
public Dog() {
weight = 42;
}

public int getWeight() {
return weight;
}

// 这个函数让外界改变weight的值
public void setWeight(int newWeight) {
weight = newWeight;
}
}

public class UseDog {
public static void main(String[] args) {
Dog d1 = new Dog();
System.out.println("the dog1's weight is " + d1.getWeight());

Dog d2 = new Dog();
d2.setWeight(2);
System.out.println("the dog2's weight is " + d2.getWeight());
}
}

构造方法也可以重载,重载构造方法的目的是使该类的对象具有不同的初始值,为类对象的初始化提供方便。
在下面这个例子体会构造方法重载:

class Employee {
private String name;
private int salary;

public Employee(String n, int s) {
this.name = n; // 也可以不用this
this.salary = s;
}

public Employee(String n) {
this(n,0);
}

public Employee() {
this("Unknown");
}

public String getName() {
return name;
}

public int getSalary() {
return salary;
}
}

public class EmployeeTest {

public static void main(String[] args) {
Employee e = new Employee();
System.out.println("Name: " + e.getName() + " Salary: " + e.getSalary());
}
}
/*
* Name: Unknown Salary: 0
*/