什么是构造函数
构造函数是java函数中一种特殊的函数,定义方法为函数名与类名完全相同 eg:
class Person {
String name;
int age;
String address;
//有参构造
public Person(String name, int age, String address) {
this.name = name;
this.age = age;
this.address = address;
}
//无参构造
public Person() {
}
- 构造函数名与类名完全相同
- 构造函数无返回值类型
- 构造函数可以有参数也可以没有参数,可以有一个参数或者多个参数
- 可以对构造函数进行函数重载(在同一个类中定义多个函数名相同,参数不同的函数叫函数重载)
构造函数的作用:
若没有使用构造函数,则创建的对象没有被初始化被赋值
public class Constructor {
public static void main(String args[]) {
Person person = new Person("张三", 19, "深圳");
System.out.println(person.name + person.age + person.address);//name=null,age=null
}
//name=null,age=null,对象属性为空null
}
class Person {
String name;
int age;
String address;
}
当使用了构造函数:[可以对对象初始化]
package Study;
public class Constructor {
public static void main(String args[]) {
Person person = new Person("张三", 19, "深圳");
System.out.println(person.name + person.age + person.address);
//name=张三,age=19,address=深圳
}
}
class Person {
String name;
int age;
String address;
public Person(String name, int age, String address) {
this.name = name;
this.age = age;
this.address = address;
}
}
构造函数与普通函数的区别:
- 一般函数是用于定义对象应该具备的功能。而构造函数定义的是,对象在调用功能之前,在建立时,应该具备的一些内容。也就是对象的初始化内容。
- 构造函数是在对象建立时由 jvm 调用, 给对象初始化。一般函数是对象建立后,当对象调用该功能时才会执行。
- 普通函数可以使用对象多次调用,构造函数就在创建对象时调用。
- 构造函数的函数名要与类名一样,而普通的函数只要符合标识符的命名规则即可
- 构造函数没有返回值类型
重载
package Study;
public class Constructor {
public static void main(String args[]) {
Person person = new Person("张三", 19, "深圳");
System.out.println(person.name + person.age + person.address);
Person person1=new Person(12,"深圳");
System.out.println(person1.age+person1.address);
}
}
class Person {
String name;
int age;
String address;
public Person(String name, int age, String address) {
this.name = name;
this.age = age;
this.address = address;
}
//在一个类中可以定义多个构造函数,以进行不同的初始化。多个构造函数存在于类中,是以重载的形式体现的。因为构造函数的名称都相同
//这是重载的体现(参数列表不同)
public Person(int age, String address) {
this.name = name;
this.age = age;
this.address = address;
}
}
关于无参构造函数
每一个类中都会有一个构造函数
这个构造函数可以不写,系统会自动的默认构造一个
当函数需要参数时,可以自行编写一个有参构造函数
但是如果此时你不再写一个无参的构造函数,当需要用new()来初始化对象时,编译器就会报错,因为找不到这个无参构造函数
因为此时程序中已经有一个你早就编写好的有参构造函数,系统便不会再给你的程序中添加默认的无参构造函数所以当初始化时找不到可以使用的无参构造函数
所以要自行写上一个无参构造函数。