目录
构造器(constructor):
定义完类后创建对象时已经用到了构造器:Person person = new Person();
这里的Person()就是一个构造器。
构造器的特点:1.和类名相同 2.没有返回值
构造器是类的成员之一,但是为什么前面定义类的时候并没有写过构造器呢?因为如果在类中没有显式地构造构造器的话,系统会默认提供一个空参的构造器:Person()
创建的Person类与主程序启动类:
运行后生成的Java源文件:(默认加了一个构造方法Person(),且该方法没有返回值)
在一个类中,可以同时定义多个构造器(同载:构造器名字都是类名,但是参数列表不同)
在类中定义构造器的格式:权限修饰符 类名 (形参列表){}。注意和方法定义的格式不同,方法是:权限修饰符 返回值类型 类名 (形参列表){}
例如:public class Person (String name){}
无参构造和有参构造
public Person(){ //无参构造
}
//有参构造:一旦定义了有参构造,无参构造就必须显示定义
public Person(String name) {
this.name = name;
}
我们一旦定义了有参构造,还想用无参构造去new对象的话,必须得显式地定义一个无参构造。不然就会报以下错误。
构造器作用:
1.使用new关键字,本质是在调用构造器(方法) 2.用来初始化值
正常如果主启动类的对象是
Person person = new Person();
那么调用的就是无参构造器,输出值则为null ;如果创建的对象是
Person person = Person(name:tfs),有参数,则会调用有参构造器(方法),输出值则为tfs
因为方法是可以重载的,它会根据参数来判断调用哪一个构造器
this.name = name;
this 关键字,第一个name代表的是对象本身的name,第二个name是有参构造参数传下来的参数name
生成构造器快捷键:Alt + Insert
选择OK生成的是有参构造,选择SelectNone生成的是无参构造
项目
Application主程序类:
package com.demo1.demo.Demo02;
public class Application {
public static void main(String[] args) {
//new 实例化了一个对象
Person person = new Person("tfs");
System.out.println(person.name);//null
}
}
创建的Person类:
package com.demo1.demo.Demo02;
//java ---->class
public class Person {
//一个类即使什么都不写,它也会存在一个方法
//显示的定义构造器
String name;
//实例化初始值
//1.使用new关键字,本质是在调用构造器
//2.用来初始化值
public Person(){ //无参构造
this.name = "初始";
} //alt +insert-->SelectNone默认生成无参构造
//有参构造:一旦定义了有参构造,无参构造就必须显示定义
public Person(String name) {
this.name = name;
}
//alt + insert --> ok 自动生成有参构造
}
/*
构造器:1.和类名相同
2.没有返回值
作用:1.new本质在调用构造器
2.初始化对象的值
注意点:
定义了有参构造后,如果想使用无参构造,需要显示的定义一个无参构造
Alt + insert
*/