java中构造方法的使用
一.前言:
一个新对象初始化的最终步骤是通过new关键字去调用对象的构造方法,构造方法必须满足以下几个条件:
- 方法名必须与类名完全匹配
- 不要声明返回类型
- 不能被static, final, synchronized, abstract,native修饰,且没有return语句返回值
二.构造方法的种类:
根据参数的不同,构造方法又分为以下三类:
- 隐式无参构造方法:在定义类的时候如果类体没有给类定义一个构造方法,Java编译器会在编译的时候默认提供一个隐式无参的构造方法。在main方法中可以通过new关键字来调用此默认的构造方法。
public class Person{
private String name;
private boolean gender;
private int age;
public void speak(String word) {
System.out.println(name+"说:"+word);
}
public void tread() {
System.out.println("走路");
}
public static void main(String[] args) {
Person person=new Person();
person.speak("Hello");
person.tread();
}
}
主方法里面创建了一个person对象,直接调用系统提供的一个隐式无参构造方法,由于没有给name赋值,所以系统默认初始化为null。
2.显示无参构造方法:
public class Person{
private String name;
private boolean gender;
private int age;
public Person(){
System.out.println("我是显示无参构造方法");
}
public void speak(String word) {
System.out.println(name+"说:"+word);
}
public void tread() {
System.out.println("走路");
}
public static void main(String[] args) {
Person person=new Person();
person.tread();
}
}
3.显示有参构造方法:
public class Person {
private String name;
private boolean sex;
private int age;
public Person(String n,boolean b,int a) { //参数化的构造
name=n;
sex=b;
age=a;
}
Person(){ //无参构造
System.out.println("我是显示无参构造方法");
};
public void speak(String word) {
System.out.println(name+"说:"+word);
}
public static void main(String[] args) {
Person A=new Person("Alex",true,18);
A.speak("Hello");
}
}
在主方法里面创建对象的时候,直接将三个参数赋值给了对象的属性,可以说直接起到了一个初始化的作用。
三.注意事项:
- 类中可以定义一个无参构造方法和一个显示有参构造方法,在创建一个对象时可以有选择性地使用。
public class Person {
private String name;
private boolean sex;
private int age;
public Person(String n,boolean b,int a) { //参数化的构造
name=n;
sex=b;
age=a;
}
Person(){ //无参构造
System.out.println("我是显示无参构造方法");
};
public void speak(String word) {
System.out.println(name+"说:"+word);
}
public static void main(String[] args) {
//Person A=new Person("Alex",true,18);
Person A=new Person(); //使用无参构造方法
A.name="Alex";
A.speak("Hello");
}
}
由于选择的是无参构造方法,因此需要给对象的name属性赋值为Alex
2.如果类中有一个自己编写的构造方法,编译器就不会再提供那个默认的构造方法,此时如果还希望用默认的构造方法来创建类的对象时,那么就必须在类中明确添加这个默认构造方法,否则编译会报错。