构造方法定义:
在Java中,任何变量在被使用前都必须先设置初始值。Java提供了为类的成员变量赋初始值的专门方法。
注意:
1 他具有与类名相同的名称
2 他没有返回值
构造方法作用:
1 构造出来一个类的实例。
2 对构造出来的类的实例初始化。
3 构造方法的调用是在创建一个对象时new操作进行的。
4 类中必定有构造方法,若不写,系统自动添加无参数的构造方法。接口不允许被实例化,多以接口中没有构造方法。
5 不能被 static,final,synchronized,abstract 和native修饰。
6 构造方法问为俩种:无参构造方法,有参构造方法
构造方法可以被重载。没有参数的构造方法称为默认构造方法。与一般的方法一样,构造方法可以进行任何活动,
常为使用的是初始化对象的属性。
7 自定义类中,如果不写构造方法,java系统会默认添加一个无参数的构造方法。如果写了一个有参数的构造方法,
可以不用写无参的构造方法。
如果想使用无参的构造方法,就必须手动给出无参的构造方法。
基本构造方法的使用
例:
java_ex06.java
public class java_ex06 {
public static void main(String[] args){
Person06 person06 = new Person06();
}
}
class Person06{
public Person06(){ // Person06类的构造方法
System.out.println("Person06");
}
}
解析:
实例化了Person06 类的对象person06 ,此时会自动调用Person06 中的无参构造方法,打印信息。
在类中声明的构造方法,会在实例化对象时自动调用。
实际上,如果在程序中没有明确声明构造方法的话,系统会自动为类加入一个无参的且什么都不做的构造方法。类似与
public Person06 (){}
所以,之前所使用的程序虽然没有明确声明构造方法,也是可以正常运行的。
构造方法的重载
例:java_ex07.java
public class java_ex07 {
public static void main(String[] args){
Person07 person07 = new Person07("xiaowang",25);
System.out.println(person07.talk());
}
}
class Person07{
private String name;
private int age;
public Person07(String n,int a){
name = n;
age = a;
System.out.println("public Person07(String n,int a)");
}
public String talk(){
return "my name:" + name + "my age: " + age;
}
}
解析:
如果上面的例子中
Person07 person07 = new Person07("xiaowang",25);这个部分变成 Person07 person07 = new Person07();的话就会报错。
这个错误是说找不到Person07类的无参构造方法。记得前面曾经提过,如果程序中没有声明构造方法,程序就会自动声明一个无参的
且什么都不做的构造方法,可是现在却发生了找不到无参构造方法的问题。
这是因为已经声明了构造方法的情况下,(无论有参有否)则默认的构造方法将不会自动生成。而要解决这一问题,只需要简单的修改一下Person07类就可以了。
可以在Person07类中明确的声明一个无参的且什么都不做的构造方法。
public class java_ex07 {
public static void main(String[] args){
Person07 person072 = new Person07();
Person07 person07 = new Person07("xiaowang",25);
System.out.println(person07.talk());
}
}
class Person07{
private String name;
private int age;
public Person07(){};
public Person07(String n,int a){
name = n;
age = a;
System.out.println("public Person07(String n,int a)");
}
public String talk(){
return "my name:" + name + "my age: " + age;
}
}
这样一来就不会报错了。