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(){//构造方法,对p和st_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();

}

}

其运行结果如下:

(0)

相关推荐

  • java中的反射机制

    前言: ​相信很多人都知道反射可以说是Java中最强大的技术了,它可以做的事情太多太多,很多优秀的开源框架都是通过反射完成的,比如最初的很多注解框架,后来因为java反射影响性能,所以被运行时注解AP ...

  • 面向对象02:方法的重载

    一.重载(overload) 发生在一个类中 方法的签名:方法名 参数列表.一个类中有且只有一个签名 Java语言中,允许多个方法的名称相同,但参数列表不同,称之为方法的重载(overload)编译器 ...

  • 继承,重写,多态

    继承 继承的本质是对某一类的抽象,从而实现对现实世界更好的建模. extends的意思是"扩展",子类是父类的扩展 java中类只有单继承,没有多继承 继承是类和类之间的一种关系. ...

  • java 面向对象编程

    什么是面向对象 回顾方法的定义与调用 方法的定义 import java.io.IOException; //Demo01 类 public class Demo01 { //main方法 publi ...

  • Java基础之三个修饰符

    三个关键字 抽象的(abstract) 静态(static) 最终的(final) 一.抽象 1.1 什么是抽象 似是而非的,像却又不是:具备某种对象的特征,但不完整. 二. 抽象的(abstract ...

  • java学习——29.构造方法

    封装是面向对象的核心特性,是信息隐藏思想的具体实现技术. Java提供构造方法.析构方法.方法重载.设置访问控制权限等措施对类进行封装. 今天介绍构造方法. 1.构造方法 类的构造方法用于创建类的一个 ...

  • Java学习——35、子类的构造方法

    本文接上篇--34.类的继承. 子类可以继承父类的除了构造方法以外的所有成员,在子类创建对象时,必须对父类的变量进行初始化.但构造方法是不被继承的,故要在子类当中调用父类的构造方法. 如果子类中没有显 ...

  • 掌握《周易》30个成语,学习30种为人处世之道

    在中国文化史上,<周易>被尊为"群经之首""六艺之源".几千年来,大到治国安邦,小到家务琐事,人们都习惯于到<周易>中去寻找答案. 今日 ...

  • [德语文学]视频推荐收录我几篇文章的《<德语学习>30周年精选-文学卷》

    --声明人:吕律(北外网络与继续教育学院多语种部德语培训教师,兼翻译编辑和写作者,笃信终身学习.我的联系方式:电话:0086-18101072751,电子邮件:lillylu0321@sina.com ...

  • Java学习-注解和反射

    注解 java.Annotation Annotation的作用:可以呗其他程序读取 Annotation的格式 注解是:@注释名 在代码中存在,还可以添加一些参数 ​@SuppressWarning ...

  • Java学习-多线程

    多线程 任务(Task).进程(Process).线程(Thread) 进程的创建 1.继承Thread类 自定义线程类继承Thread类 重写run()方法,编写线程执行体 创建线程对象,调用sta ...

  • Java学习-Mybatis

    Mybatis Maven依赖: <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependenc ...

  • Java 学习笔记

    您对计算机(电脑)有了解吗? 计算机组成 系统软件 直接和硬件交互的软件叫系统软件,例如 win7.win8.Linux.mac等操作系统 应用软件 通常在运行在系统软件上,也就是在系统软件上开发的软 ...

  • 六爻学习30问

    第一问:学易者为何多学少成? 答:学易者多学少成的原因虽是多方面的,但主要原因有以下几种:      一.贪多.有的学者见什么就学什么,什么奇门遁甲呀.紫微斗数.大六壬.铁板神数.四柱.六爻.各派风水 ...