调用构造方法创建对象
在 Java 中,通过 new
关键字创建一个对象。例如:
// 创建 User 类
public class User {
private String name;
private int age;
// getter setter 方法省略
public static void main(String[] args) {
// 创建 User 对象
User user = new User();
...
}
}
上面代码中,通过 new User()
创建了一个 User 对象。User()
是一个构造方法,你可能会有疑问:“User 类中并没有定义这个构造方法啊,为什么可以调用?”。那是因为,当一个类中没有定义任何构造方法时,默认会有一个无参构造方法。但如果类中至少有一个构造方法,但没提供无参构造方法,在创建对象时就不能调用无参构造方法。
重载
构造方法允许重载。那么什么是重载呢?
重载指的是:如果有多个方法,有相同的名字,不同的参数,便产生了重载。
要完整地描述一个方法,需要指出方法名以及参数类型。这叫做方法的签名。返回值不是方法签名的一部分,也就是说,不能有两个名字相同、参数类型也相同却返回不同类型值的方法。
下面是重载的代码示例:
public class User {
private String name;
private int age;
public User(){};
public User(String name){
this.name = name;
}
public User(String name,int age){
this.name = name;
this.age = age;
}
public User(int age,String name){
this.age = age;
this.name = name;
}
}
上面代码中,共有四个构造方法:一个无参构造方法和三个有参构造方法。这些构造方法都有相同的名字,但是参数不同,这就是重载。
当存在多个重载时,编译器必须挑选出具体执行哪个方法,它用各个方法给出的参数类型与特定方法调用所使用的值类型进行匹配来挑选相应的方法。如果编译器找不到匹配的参数,就会产生编译时错误。因为根本不存在匹配,或者没有一个比其他的更好。这个过程叫做重载解析。
大家可能发现了,上面代码中还有个 this
,这个 this
指的是什么呢?
上面的有参构造方法中,由于参数变量和成员变量的名称相同,为了区分它们,可以采用 this
。this
引用方法的隐式参数,代表被构造的对象。'this' 还可以调用同一个类的另一个构造方法:
public User(){
this("default");// 调用 public User(String name){...} 构造方法
}
总结
- 构造方法名称必须和类名相同
- 构造方法没有返回值
- 构造方法总是伴随着 new 操作一起调用
- Java 允许重载任何方法
- 参数顺序不同也会造成重载
- 不能有两个名字相同、参数类型也相同却返回不同类型值的方法
(全文完)