------- android培训、java培训、期待与您交流! ----------
构造函数的特点是与类的名字相同,不用写返回类型,也不用写return语句。
每个类中都一个默认不带参数的构造函数,如果程序员自己定义了构造函数,那么系统就不再给建立空参数的构造函数了。
构造函数是用来给对象初始化的,对象一建立就运行与之对应的构造函数。
通过不同参数的构造函数,可以选择类不同的初始化方式
构造代码块写在类{}之中,他优先于构造函数运行,不管类的初始化方式是怎样的,他都会运行,所以他是对类所有的对象进行初始化
public class Person {
private int name;
private int age;
public int getName() {
return name;
}
public void setName(int name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
Person(){
System.out.println("name=" + name + ",age=" + age);
}
Person(String name){
System.out.println("name=" + name + ",age=" + age);
}
Person(String name,int age){
System.out.println("name=" + name + ",age=" + age);
}
{
System.out.println("Person Run");
}
}
主函数调用
Person p1 = new Person();
Person p2 = new Person("zhangsan");
Person p3 = new Person("lisi",23);
运行结果
Person Run
name=0,age=0
Person Run
name=zhangsan,age=0
Person Run
name=lisi,age=23
注意:
1、如果删除了Person(){}这个构造函数,就会报错,由于已经自定义了带参数的构造函数所以,系统不会自动添加无参构造函数
2、{}构造代码块中的内容优先于构造函数运行,并且每个对象初始化都会运行
3、如果构造函数Person(){}前加了private修饰,那么Person类无法通过无参方式建立对象
4、构造函数间调用构造函数不能用Person(name),而是用this(name)
提升部分练习:
class Person{
Person(){
System.out.println("a");
}
static{
System.out.println("b");
}
{
System.out.println("c");
}
}
class PersonDemo{
static{
System.out.println("d");
}
public static void main(String[] args){
Person p = new Person();
System.out.println("e");
}
}
运行结果是:
d
b
c
a
e
注意:
1、static{}表示静态代码块,随着类的加载而执行,优先于构造代码块。