一.什么是构造方法
构造方法其实就是一种特殊的方法,有多特殊呢?它没有返回值,连void都没有!它的方法名就是类名,下面就是一个构造方法:
public class Father {
public Father() {//构造方法
}
public static void main(String[] args) {
Father father=new Father();
}
}
二.构造方法的作用
构造方法长得这么奇怪,究竟有什么作用呢?当我们想对一个类中的多个属性赋值时,可能你会这么一个一个的赋值:
public class Father {
String id;
String name;
String compony;
String punchline;
public static void main(String[] args) {
Father father=new Father();
father.id="贝贝";
father.name="李京泽";
father.compony="红花会";
father.punchline="万里挑一";
}
}
你不觉得这样太麻烦了么?而构造方法就是用来解决这个问题,它使赋值过程变得简化,就像下面这样赋值,是不是简单多了?
public class Father {
String id;
String name;
String compony;
String punchline;
public Father(String id, String name, String compony, String punchline) {
this.id = id;
this.name = name;
this.compony = compony;
this.punchline = punchline;
}//自定义一个新的构造方法
public static void main(String[] args) {
Father father=new Father("贝贝","李京泽","红花会","万里挑一");
}//只需将要赋的值当做参数输入即可
}
三.如何使用构造方法
上述的例子可以看出来,创建对象时的new Father()就是在调用一个无参构造方法,但是类中并没有这么个构造方法的定义,所以就可以推断出,类中都是有一个默认的无参构造方法的,当类中没有自定义的构造方法时,默认的构造方法就起作用了,但是下面这段代码,当自定义了一个构造方法之后,再调用无参构造方法时,便会报错,是因为自定义无参构造方法之后默认的构造方法便会失效:
public class Father {
String id;
String name;
String compony;
String punchline;
public Father(String id, String name, String compony, String punchline) {
this.id = id;
this.name = name;
this.compony = compony;
this.punchline = punchline;
}
public static void main(String[] args) {
Father father=new Father("贝贝","李京泽","红花会","万里挑一");
Father son = new Father ();//报错
}
}
但这时要是还想使用无参构造方法怎么办?很简单,像文章开头那段代码一样再定义一个无参构造方法就好了:
public class Father {
String id;
String name;
String compony;
String punchline;
public Father() {
}
public Father(String id, String name, String compony, String punchline) {
this.id = id;
this.name = name;
this.compony = compony;
this.punchline = punchline;
}
public static void main(String[] args) {
Father father=new Father("贝贝","李京泽","红花会","万里挑一");
Father son = new Father ();
}
}
这时会发现,一个类中有两个名为Father的构造方法了,但是不要担心,不要忘记java中有方法的重载,这两个方法只要参数列表不相同,重载就有效。
虽然上面那一大段一点一点输入其实也不轻松,但是编译器中可以自动创建构造方法的,操作如下:
在类中的空白行右键单击,选择Source,选择Generate Constructor using Fields:
然后选择select all,点击OK,一个构造方法就自定义完成了
四.构造方法的特殊用法
构造方法还有个小用法就是可以在构造方法中使用this()来调用其他构造方法,就像下面这段代码这样:
public class Father {
String id;
String name;
String compony;
String punchline;
public Father() {
System.out.println("构造方法");
}
public Father(String id, String name, String compony, String punchline) {
this();//调用无参构造方法
this.id = id;
this.name = name;
this.compony = compony;
this.punchline = punchline;
}
public static void main(String[] args) {
Father father=new Father("贝贝","李京泽","红花会","万里挑一");
}
}
但是要注意一点就是,构造方法中this()之前不能有代码,否则编译器会报错