构造方法作为初始化成员变量的方法,完全掌握非常重要。
虽然Java虚拟机会自动匹配构造方法,但作为自己写程序的程序猿们,还是要非常熟悉地知道调用的到底是哪一个构造方法 。
1、调用默认构造方法
当类中没有构造方法时,将调用默认的构造方法,例题如下:
public class Student {
private String name ;
private int st_no ;
public void display(){
System. out .println( " ??? " + name );
System. out .println( " ??? " + st_no );
}
public static void main(String args[]){
Student s= new Student();
s.display();
}
}
本例没有构造方法,在创建对象时会调用默认的构造方法:public
Student();由main方法中 new Student()
行代码调用。按默认值为成员变量赋初值。本例有两个成员变量:name为String字符串类型,此为引用数据类型,因此初始化为null。
st_no为int类型,被初始化为0。
因此,本列的运行结果为:
· 姓名:null
学号:0
2、调用自已写的构造方法。
当类中定义了构造方法,Java就不提供默认构造方法了,如下例: 本例仅在上例的基础上加了一个构造方法:java接口有没有构造方法
public Student(String name,int st_no){
this.name=name;
this.st_no=st_no;
}
其完整代码及运行如下图:
出错了!!!
原因是我们定义了一个构造方法后,在创建实例时就要按照你定义的构造方法来创建实例,而本例我们定义了带有参数的构造方法,但在创建实例时并没有带参数,所示提示错误。
要按下来改正main中创建对象的语句,才能顺利执行。
自定义的构造方法有三种,如上篇所介绍。
(1)不带参
(2)带参
(3)拷贝构造方法
三种的意思并不是说只能有三个构造方法,比如第二种带参,可以是带一个参数,可以是带两个参数,根据类来自定义。
以下例统一说明。
例:学生类、人类及其使用。
本例由三个类组成,关键代码后均有注释。
class people{ // ??
private String name ; // ??
public people(){ // ????
name = " ?? " ;
}
public people(String name){ // ??????
this . name =name;
}
public people(people p){ // ??????
this . name =p. name ;
}
public void set(String name){ // ?????????????
this . name =name;
}
public void show(){ // ?????????
System. out .println( " ??? " + name );
}
}
class Student { // ???
private people p ; // ???? p ?????????
private int st_no ; // ??
public Student(){ // ???? , ? p ? st_no ???
p = new people(); // ?? people ?????????
st_no =123;
}
public Student(String name, int st_no){ // ????
p = new people(name); // ?? people ????????
this . st_no =st_no;
}
public Student(people p, int st_no){
this . p = new people(p); // ?? people ????????
this . st_no =st_no;
}
public Student(Student s){ // ??????
this . p = new people(s. p ); // ???????? people ????????
st_no =s. st_no ;
}
public void display(){
p .show(); // ?? people ??????????
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论