1.引出构造器
创建一个学生对象的时候,代码如下:
Student s1 = new Student();
这个代码特别像:在调用一个方法名称为Student的无参数方法.
我们把这种特殊的方法,称之为构造方法,构造器(构造函数/构造子:Constructor).但是我们发现在Student类中,却找不到该构造方法,找不到,却又没有报错.编译器在编译源文件的时候,会创建一个缺省的构造器.
2.构造器的作用
1):创建对象,必须和 new 一起使用.
2):完成对象的初始化操作.
2):完成对象的初始化操作.
3.构造器的特点
1):构造器的名称和当前所在类的名称相同.
如果构造器名称叫XXX, new XXX();你看出来创建的是什么类型的对象吗?
2):禁止定义返回类型,千万不要使用void作为返回类型. void Student(){}这是普通方法.
假设需要写返回类型,也应该这样写:Student Student(); 既然所有的返回类型都和所在类名相同,何必再写.
3):在构造器中,不需要使用return语句.
其实构造器是有返回值的,返回的是当前创建对象的引用.
如果构造器名称叫XXX, new XXX();你看出来创建的是什么类型的对象吗?
2):禁止定义返回类型,千万不要使用void作为返回类型. void Student(){}这是普通方法.
假设需要写返回类型,也应该这样写:Student Student(); 既然所有的返回类型都和所在类名相同,何必再写.
3):在构造器中,不需要使用return语句.
其实构造器是有返回值的,返回的是当前创建对象的引用.
4.编译器创建构造器的特点
1):符合构造器特点.
2):无参数的.
3):无方法体.
4):如果类A没有使用public修饰,则编译器创建的构造器也没有public修饰.
使用了public修饰,则编译器创建的构造器也使用public修饰.
2):无参数的.
3):无方法体.
4):如果类A没有使用public修饰,则编译器创建的构造器也没有public修饰.
使用了public修饰,则编译器创建的构造器也使用public修饰.
构造器:如果我们没有显示提供构造器,则编译器在编译时创建一个缺省的构造器.
但是,如果我们显示定义了一个构造器,则编译器不再创建默认构造器.
------------------------------->推论:某一个类,至少存在一个构造器.
但是,如果我们显示定义了一个构造器,则编译器不再创建默认构造器.
------------------------------->推论:某一个类,至少存在一个构造器.
例1:对象创建调用构造器.创建一个PersonDemo.java文件
class Person //Person类
{
Person(){ //person类的构造器
System.out.println("构造器执行");
}
}
class PersonDemo
{
public static void main(String[] args){
Person p = new Person(); //创建Person类对象其实就是在调用Person类的构造器方法
}
}
运行结果
例2:在构造器中进行初始化操作.同样创建一个PersonDemo.java文件
class Person //Person类
{
String name;
Person(String n){ //person类带参数的构造器
System.out.println("构造器执行");
name=n; //对Person进行初始化操作
}
}
class PersonDemo
{
public static void main(String[] args){
Person p = new Person("张三"); //创建Person类对象其实就是在调用Person类的构造器方法
System.out.println(p.name); //现在打印Person对象的name已经被初始化
}
}
运行结果
5.构造器的重载(Overload):
避免了在同一个类中,相同功能的方法名字不同的问题.判断依据:两同一不同.
-------------------------------------------------------
构造器是一种特殊的方法,也可以存在重载.
例3:构造器的重载.同样创建一个PersonDemo.java文件
class Person //Person类
{
String name;
Person(){ //person类无参数的构造器
System.out.println("无参数的构造器执行");
}
Person(String n){ //person类带参数的构造器
System.out.println("有参数的构造器执行");
}
}
class PersonDemo
{
public static void main(String[] args){
Person p1 = new Person(); //创建Person类对象调用Person类的有参数构造器方法
Person p2 = new Person("张三"); //创建Person类对象调用Person类的有参数构造器方法
}
}
运行结果