一、构造器
1、构造器本质就是一个方法,用来给类属性(类实例域)进行初始化赋值的
2、构造器根据是否有参数分为有参构造和无参构造
3、若类中没有构造器、那么程序会在编译时自动添加一个无参构造器,使实例域获得对应类型的默认值
4、若类中有构造器,不管是有参还是无参,程序都不会自动添加构造器了
5、所谓构造器也就是实例化对象时,new后面的类的方法 其本质就是构造器方法
二、无参构造器
1、定义方式:public +类名+{}
2、无参构造器出来的对象实例域都是一致的
当类没有设置构造器时,程序编译时自动添加一个无参的(不可见),使得实例域都是类型对应默认值
public class People
{
/**
* 类属性也称为类实例域
*/
public int age;
public String name;
public boolean old;
/**
* 程序自动添加的无参构造器---注意是不可见的,只是为了实例才写出来
*/
public People()
{
age=0;
name=null;
old=false;
}
}
当类主动设置无参构造器时,所有实例化出来的对象,其实例域都是一致的
public class People
{
/**
* 类属性也称为类实例域
*/
public int age;
public String name;
public boolean old;
/**
* 主动设置无参构造
*/
public People()
{
age = 10; // 初始化赋值为10
name = "你好"; // 初始化赋值为你好
old = true; // 初始化赋值为真
}
/**
* 实例化对象对比其实例域是否一致
*/
public static void main(String[] args)
{
People a = new People();
People b = new People();
System.out.println(a.age);
System.out.println(a.name);
System.out.println(a.old);
System.out.println("分割线");
System.out.println(b.age);
System.out.println(b.name);
System.out.println(b.old);
}
}
控制台输出:
三、有参构造器
1、定义方式:public + 类名+(参数列表)+{}
2、有参构造器,根据参数不同,构造的对象实例域不一致
3、有参构造器和无参构造器可以共存
public class People
{
/**
* 类属性也称为类实例域
*/
public int age;
public String name;
public boolean old;
/**
* 主动设置无参构造器
*/
public People()
{
age = 10; // 初始化赋值为10
name = "你好"; // 初始化赋值为你好
old = true; // 初始化赋值为真
}
/**
* 主动设置有参构造器
*/
public People(int ages, String names, boolean olds)
{
age = ages; // 初始化赋值为参数
name = names;
old = olds;
}
/**
* 实例化对象
*/
public static void main(String[] args)
{
People a = new People(); // 使用无参构造
People b = new People(20, "你好", false); // 使用有参构造
People c = new People(30, "我好", true); // 使用有参构造
System.out.println(a.age);
System.out.println(a.name);
System.out.println(a.old);
System.out.println("分割线");
System.out.println(b.age);
System.out.println(b.name);
System.out.println(b.old);
System.out.println("分割线");
System.out.println(c.age);
System.out.println(c.name);
System.out.println(c.old);
}
}
控制台输出:
四、特别注意点:
1、当构建一个类时,务必创建构造器(不管有参还是无参),避免程序自动添加导致实例域(如String类型)得到的是null,然后引用报错
2、构建一个类时,可以考虑有参和无参构造器都设置,以应对多种情况
3、若某个实例域会是固定值,那么可以使用显示初始化,如下这样实例化的对象的age都会是100
public class People
{
/**
* 类属性也称为类实例域
*/
public int age=100;
public String name;
public boolean old;
/**
* 主动设置无参构造器
*/
public People()
{
name = "你好"; // 初始化赋值为你好
old = true; // 初始化赋值为真
}
}