(一)
构造器也是方法,叫构造方法,与方法不同的是,构造器是用来初始化对象的,而方法不能,但是,这样不意味着对象是由构造器创建的,在A a = new A();创建对象时,在调用构造方法之前,系统就为对象分配内存空间,并且执行初始化,所以对象在执行构造方法函数体之前就已经创建,只是这个对象不能被外界访问,所以需要构造器对其初始化。
(二)
构造器如果没有对其重载,系统会有默认构造器,但是一旦重载了,那么默认构造器就会失效,如果需要不带参数的构造器,则需要自己重新写
(三)
构造器的形式一般为:public 类名(){}
构造器主要是为了让其他方法调用,生成该类的实例,设置为public是为了让系统的其他位置的类都能调用该类的构造器,在某些特殊情况下,例如单例模式,其他的类不能实例化该类时,则需要设置为private ,可以让该类的子类调用构造器时,可以将其设置为protected
package test;
public class Single {
public static void main(String[] args) {
Dog dog = new Dog("xiaoli");
System.out.println(dog.getName());
Dog eat = new Eat(dog.getName());
System.out.println(eat.getName());
}
}
class Dog{
private String name;
protected Dog(String name){
this.name=name;
}
public String getName(){
return name;
}
}
class Eat extends Dog{
protected Eat(String name) {
super(name);
// TODO Auto-generated constructor stub
}
//
//
//
}
(四)
构造器重载时,如果一个构造器包含在另一个构造器中,
public Dog(String name)
public Dog(String name,String color)
那么可以使用this.调用被包含的构造器,且必须在执行体中语句的第一条位置。系统将依据this括号中的形参来找到对应的构造器
package test;
public class Single {
public static void main(String[] args) {
Dog dog1 = new Dog("小黄");
Dog dog2 = new Dog("小黄","黄色");
}
}
class Dog{
private String name;
private String color;
public Dog(String name){
this.name=name;
}
public Dog(String name,String color){
this(name);
this.color=color;
}
}