一、为什么要引入构造方法。

当创建对象的时候需要对属性值初始化,构造方法,即对象创建时要执行的方法。

要求在实例化的同时,就指定好name,和age的值。这就要用到构造方法。又叫做构造器Constructor.

二、构造方法的定义格式

构造方法在new的时候自动执行。且只执行一次。new一次执行一次。

注意:每个类都有构造方法,即使不写也有,编译时javac会自动检查类是否有构造方法,如果有,就执行,没有就自动添加一个。但是,如果你写了一个带有参数的构造方法,而没有写无参构造方法,就会报错。

如上图:如果不写无参构造方法,就会报错。同时也证明了,构造方法是可以重载的。

三、构造方法的重载

如果构造方法发生了重载,就要创建无参构造方法,否则会报错。

那么在创建对象时,需要通过构造方法来创建对象的,上图说了,只有构造方法结束了,整个对象才算建立完成。因此可以通过不同的构造方法来创建对象。如图:分别用两种构造方法来创建对象。

分析:无参构造方法和实例化之间的关系。

无参构造方法,可以不写,但是最终都会有的,跟是否实例化无关。但是如果权限是private,那么其他类就无法通过无参构造方法实例化,就会报错。如图所示:

四、构造方法和其他方法的区别

1、构造方法只能执行一次,其他方法执行次数没有限制。

2、定义格式不同。构造方法没有返回值,必须与类名相同。

五、this在构造方法之间的调用

首先说一下this的用处。

1、this.区分局部变量和成员变量同名情况。

2、this用在构造方法中,用于调用了有参构造方法。

格式:this(参数列表); 此语句必须写在第一行,才有效。

此语句的意义:减少了代码的书写量。

六、super关键字在构造方法中的应用。

首先要明白super关键字的作用:

1、super是调用父类的成员方法或成员变量。

但是还有一个问题:

也就是说子类对象中,父类的构造方法会先执行。那么为什么要执行父类构造方法呢?

假设,创建了一个父类,含有一个成员属性a=1;含有一个构造方法,将a=5;。因为如果子类创建的对象调用父类的成员变量a时,在不添加super()时,会得到a=1;如果添加super()就会得到a=5;我们都知道,构造方法在创建对象时执行,a应该等于5,故如果不调用super()就会得到错误的值。

2、super()在构造方法中是调用父类构造方法的意思。

当创建子类对象时,父类对象先进内存。这样子类才能自动拥有父类的成员。

3、子类的构造器,无论重载多少个,第一行必须是super();当你不写时表示空参super();是否写参数,要根据父类决定,父类有参数,那么子类的super()必须有参数。

4、构造方法无法继承,自然也没有重写这个概念。

5、super()语句必须是构造方法的第一行代码。

总结一下:其实这些内容说白了,就是在说一句话。

即:如果父类中没有无参构造方法,那么子类必须用super(带参)显示的调用父类的构造方法。

super是父类对象引用,this是本类对象引用。super(),this()都必须放在构造方法的第一行,super()和this()绝不能一块用,super(),this()无参时可以省略不写。

上图很重要。终于明白了为什么有的类没有在有参数构造函数的情况下,没有写无参也可以。问题的关键是对象是有参还是无参来构建的。若用无参对象构建,那么类中必须有无参构造函数,(在类中含有有参构造函数的情况下。)

快捷键:ctrl+T   用于打开继承关系图。

注意:若不确定该类是否是抽象类,可以这样想,该类的方法在做什么?如果方法内容不明确,就是抽象类。

java中构造方法的理解,super()与构造方法,无参,有参构造方法,this()与构造方法相关推荐

  1. 【转载】谈谈我对Java中CallBack的理解

    谈谈我对Java中CallBack的理解 转载自: http://www.cnblogs.com/codingmyworld/archive/2011/07/22/2113514.html CallB ...

  2. Java中 多态的理解

    ** Java中 多态的理解 ** 多态官方定义为: 所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指 ...

  3. 谈谈对java中分层的理解_让我们谈谈网页设计中的卡片设计

    谈谈对java中分层的理解 "I want a card", this is the first demand point that the customer said in th ...

  4. 沉淀再出发:关于java中的AQS理解

    沉淀再出发:关于java中的AQS理解 一.前言 在java中有很多锁结构都继承自AQS(AbstractQueuedSynchronizer)这个抽象类如果我们仔细了解可以发现AQS的作用是非常大的 ...

  5. JAVA中多态的理解

    Java中多态的理解 JAVA中的多态可以简单的理解为一种事物的多种形态,当然多态是在继承的基础上有重写才存在. 标题如何理解一种事物的多种形态? 举个例子,拿人类.男人.女人来说.男人.女人.都分别 ...

  6. java中this.getclass()_详解java中this.getClass()和super.getClass()的实例

    详解java中this.getClass()和super.getClass()的实例 前言: 遇到this.getClass()和super.getClass()的返回值感到疑惑,经过探索豁然开朗. ...

  7. java中getclass_详解java中this.getClass()和super.getClass()的实例

    详解java中this.getClass()和super.getClass()的实例 前言: 遇到this.getClass()和super.getClass()的返回值感到疑惑,经过探索豁然开朗. ...

  8. Java中? extends T和? super T的理解

    ? 通配符类型 - <? extends T> 表示类型的上界,表示参数化类型的可能是T 或是 T的子类; <? super T> 表示类型下界(Java Core中叫超类型限 ...

  9. Java中this关键字和super关键字用法

    构造方法中的this关键字 构造方法是一个类的对象在通过new关键字创建时自动调用的,在程序中不能向调用其他方法一样通过方法名(也就是类名)来调用.但如果一个类有多个构造方法,可以在一个构造方法中通过 ...

  10. 谈谈我对Java中CallBack的理解

    CallBack是回调的意思,熟悉Windows编程的人对"回调函数"这四个字一定不会陌生,但是Java程序员对它可能就不太了解了."回调函数"或者" ...

最新文章

  1. JVM专题(2)-类加载器子系统
  2. 多线程访问全局变量和局部变量
  3. PGPool使用限制 1
  4. bzoj 1659: [Usaco2006 Mar]Lights Out 关灯(IDA*)
  5. DICOM worklist入门一
  6. 把“友商”装进芯里威联通运行黑群晖最新DSM系统
  7. 【Yolov5】训练自己的yolov5模型并集成到安卓应用中【上】——模型训练
  8. 禁用搜狗输入法Linux版的Ctrl+Shift+F的简繁切换快捷键
  9. 至强服务器性能视频,至强CPU性能表现测试
  10. android 7.0 调试日志,Android软件调试记录
  11. 背包问题之0-1背包算法详解
  12. javaWeb学习--------邮件发送
  13. 白话 P-value 这个再通俗不过了~
  14. 识别 零极点 matlab,matlab计算零极点分布图
  15. PHP两种调用接口方式
  16. [云计算]OpenStack - Neutron
  17. 三大框架整合步骤(详细)
  18. 新技术又又又又叒叒来了?
  19. 基于PHP在线点餐外卖系统设计与实现 开题报告
  20. 使用AppNode搭建第一个网站

热门文章

  1. 刘强东:死掉的创业公司,几乎都违背这 4 点最基本的经济常识
  2. 百万调音师—Audition EQ均衡器
  3. CRNN文本识别模型
  4. 判断工作日还是休息日
  5. Apache shiro 官方API (中文版)(承蒙大佬们看重 小弟整理了下 无需积分 编辑的不好 希望帮到你们)
  6. jquery slideToggle() 效果
  7. Rancher2.6 Monitoring Grafana 对接 LDAP
  8. 大数定理和中心极限定理的通俗理解。
  9. Tower of Hanoi (汉诺塔问题)
  10. 【计算机网络】虚拟IP原理