参考文章:

https://blog.csdn.net/qq_33322074/article/details/86030836

https://blog.csdn.net/HD243608836/article/details/81567101

https://blog.csdn.net/zhaozhirongfree1111/article/details/77962184

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

每个类都有构造方法,即使不写也有,编译时javac会自动检查类是否有构造方法,如果有,就执行,没有就自动添加一个

如果父类有含参构造方法,则子类也必须添加含参构造方法

如果父类没有含参构造方法,子类无需添加构造方法

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

          会报错:

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

子类的构造函数 必须要 super() 吗?

不是必须,是自动

必须的情况:————指明调用哪个  含参构造函数

public class Father {
public String name; public Father(String name) {
this.name = name;
}
} public class Son extends Father{ public Son(String name) {
super(name);//必须调用,否则他会默认调用父类的无参构造函数,而父类的无参构造函数已经被有参的覆盖,所以找不到
}

 this()只能用在构造函数中,且它必须是第一行语句?

1.在构造函数中,如果你不指定构造器之间的调用关系,那么编译器会给你加上super();目的是在初始化当前对象时,先保证了父类对象先初始化。所以,你指定了构造函数间的调用,那么this()必须在第一行,以保证在执行任何动作前,对象已经完成了初始化。
构造函数只能被构造函数调用,因为对象只会初始化一次。
2.解答这个问题,首先要明确一下构造方法和普通成员方法的区别。

类似this()和super()这样的方法被称为构造方法,顾名思义,他的作用就是在JVM堆中构建出一个指定类型的对象,如果你调用了两个这种形式的方法,岂不是代表着构建出了两个对象。

同理,为了避免构建出两个对象这种问题的出现,Java在编译时对这种情况做了强校验,用户不能再同一个方法内调用多次this()或super(),同时为了避免对对象本身进行操作时,对象本身还未构建成功(也就找不到对应对象),所以对this()或super()的调用只能在构造方法中的第一行实现,防止异常。

在普通的成员方法中,如果调用super()或者this(),你是想要重新创建一个对象吗?抱歉Java为了保证自身对象的合理性,不允许你做这样的操作。

 this()和super()为构造方法:

作用是在JVM堆中构建出一个对象

  • 因此避免多次创建对象,同一个方法内只能调用一次this()或super()。
  • 同时为了避免操作对象时对象还未构建成功,需要this()和super()的调用在第一行实现【以此来创建对象】,防止异常。

Java ——补充:构造方法 super()与构造方法 无参 有参构造方法 this()与构造方法的更多相关文章

  1. Java第7次作业:造人类(用private封装,用static关键字自己造重载输出方法)什么是面向对象程序设计?什么是类和对象?什么是无参有参构造方法 ?什么是封装?

    什么是面向对象程序设计? 我们称为OOP(Object  Oriented  Programming) 就是非结构化的程序设计 要使用类和对象的方法来进行编程 什么是类,什么是对象 类就是封装了属性和 ...

  2. Java关键字(六)——super

    在 Java关键字(五)——this 中我们说 this 关键字是表示当前对象的引用.而 Java 中的 super 关键字则是表示 父类对象的引用. 我们分析这句话“父类对象的引用”,那说明我们使用 ...

  3. 总结java中的super和this关键字

    知识点: 在java类中使用super引用父类的成分,用this引用当前对象 this可以修饰属性.构造器.方法 super可以修饰属性.构造器.方法 关于子类实例化过程中的内存分配,在下一篇博客中说 ...

  4. Java中的 super和this

    super关键字 在子类中用于表示父类对象的引用,可以在子类中调用父类中的方法的属性. super语句 --- 子类在继承父类之后,子类的构造方法中会含有一个super语句. 如果没有手动指定supe ...

  5. java中关键字super

    super关键字的作用 java中的super关键字是一个引用变量,用于引用父类对象.关键字“super”以继承的概念出现在类中. 主要用于以下情况:1.调用父类的方法   2.调用父类的变量  3. ...

  6. Java中的super关键字和this关键字作用介绍

    一.super关键字的作用 1.子类在构造方法中显示调用父类构造方法 super可以在子类的构造方法中显示调用父类的构造方法:并且这行代码必须出现在子类构造方法的第一行.原因:因为父类构造方法没有执行 ...

  7. java关键字之super

    1.在子类的构造方法的第一条语句处调用其父类的构造方法: 如果父类提供了构造方法,并且父类不拥有无参构造方法,则要求子类拥有相同结构的构造方法.即,子类构造方法的参数个数和类型必须和父类的构造方法一致 ...

  8. JAVA之关于super的用法

    JAVA之关于super的用法   路漫漫其修远兮,吾将上下而求索.——屈原<离骚> 昨天写this用法总结的时候,突然产生了一个问题,请教别人之后,有了自己的一点认识.还是把它写下来,为 ...

  9. java this,super简单理解

    *****this****** 表示对当前对象的引用. 作用:1.区分实例变量和局部变量(this.name----->实例变量name) 2.将当前对象当做参数传递给其它对象和方法.利用thi ...

随机推荐

  1. Linux20期学习笔记 Day3

    管道符.通配符.转义符及部分常用命令.考点

  2. TensorRT 介绍

    引用:https://arleyzhang.github.io/articles/7f4b25ce/ 1 简介 TensorRT是一个高性能的深度学习推理(Inference)优化器,可以为深度学习应 ...

  3. linux下利用tcpdump抓包工具排查nginx获取客户端真实IP实例

    一.nginx后端负载服务器的API在获取客户端IP时始终只能获取nginx的代理服务器IP,排查nginx配置如下 upstream sms-resp { server ; server ; } s ...

  4. PAT Basic 1039 到底买不买 (20 分)

    小红想买些珠子做一串自己喜欢的珠串.卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖.于是小红要你帮忙判断一下,某串珠子里是否包含了全部自己想要的珠子?如果是,那么告诉她有多少多余的珠子 ...

  5. flex布局总结回顾

    1.背景 传统css盒式模型,依赖 display属性 + position属性 + float属性实现页面的布局,而随着互联网的迅猛发展,带动了无数的互联网创业者和互联网产品,因而样式布局的美化成为 ...

  6. openssl x.509证书

    openssl x.509证书 openssl x.509证书 ngnix 支持

  7. Mysql定时器定时删除表数据

    由于测试环境有张日志表没定时2分钟程序就狂插数据,导致不到1一个月时间,这张日志表就占用了6.7G的空间,但是日志刷新较快,有些日志就没什么作用,就写了个定时器,定期删除这张表的数据 首先先查看mys ...

  8. puppet 源码安装

    puppet 源码安装 作者: admin 分类: 自动化管理 发布时间: 2013-04-23 10:25 ė 1932次浏览 6 暂无评论 puppet最新源码详细安装: 在网上找了很多相关pup ...

  9. SQL中INEXISTS和IN 的区别和联系

    SET NOCOUNT ON , SET NOCOUNT OFF当 SET NOCOUNT 为 ON 时,不返回计数(表示受 Transact-SQL 语句影响的行数).当 SET NOCOUNT 为 ...

  10. HttpClient——ESP8266HTTPClient库

    针对Http请求操作的库,ESP8266HTTPClient库不属于ESP8266WiFi库的一部分,所以需要引入  #include <ESP8266HTTPClient.h> HTTP ...