打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
java学习——30.构造方法举例

构造方法作为初始化成员变量的方法,完全掌握非常重要。

虽然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就不提供默认构造方法了,如下例:
本例仅在上例的基础上加了一个构造方法:

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(){//构造方法,pst_no赋初值

       p=new people();//调用people类的不带参构造方法

       st_no=123;

    }

    public Student(String name,int st_no){//构造方法

       p=newpeople(name);//调用people类的带参构造方法

       this.st_no=st_no;

    }

    public Student(people p,int st_no){

       this.p=newpeople(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类的实例方法输出姓名

       System.out.println("学号:"+st_no);

    }

}

public class Student_ex {

    public static void main(String args[]){

       Student s1=new Student();//调用学生类不带参的构造方法

       s1.display();

       Student s2=new Student("张熹熹",201800125);//调用学生类带参的构造方法

       s2.display();

       Student s3=new Student(s2);//调用学生类的拷贝构造方法

       s3.display();

       people p=new people("lay");

       Student s4=new Student(p,2019666);//调用学生类带参的构造方法

       s4.display();

    }

}

其运行结果如下:

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
子类对象的实例化过程
对象实例化错误
从零开始学Java(十一)Java对象的创建及使用
《Java语言编程基础立体化实用教程》1-5 学生成绩删除功能
C#构造函数(超详解,建议收藏!!!)
78条高质量编码建议《Effective Java》(1~2)阅读笔记
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服