day12 构造方法 this() super()

1.构造方法

  • 想要在创建对象时候后就有成员变量值,setget方法属于延后行为
  • 构造器constructor,给对象初始化赋值使用
类名Person
构造方法:public Person(参数){}
注意没有返回值(没有void),名字必须与类名完全一样
  • 构造方法是默认方法,不写会默认加上,如果写则只执行写的方法,第一行始终是super()(默认)
public Person()
{
super();
}

  • 构造方法在对象new时候自动执行,其余的方法则是打点调用,构造方法只会在对象创建执行一次,方法执行不限次
  • 构造方法若需传入参数
public Person(int age)//此时无参的默认方法就不会执行
{
super();
}
在创建时后需要加参数
Person man=new Person(14);
  • 在堆内存中默认成员变量赋值完成会调用本类构造方法压栈运行压栈运行完成会将堆内存地址给新建对象
  • 构造器方法可以重载,但不可以私有(私有则不能创建新对象因为仅在本类用)

此种构造方法new对象时候传参不传参都可以用

2.this()

  • 在本类构造方法之间调用
public Person()
this(15);
}

public Person(int age)
super();
}
this()和super()都必须方法方法体之首,所以不能共存仅能存一
但是super()在每个构造方法必须调用
因此利用这种构造方法调用达到间接调用目的
new对象时候不传参则是默认15
  • 内存原理
    new Person();无参
    在堆内存默认赋值完成调用构造方法public Person()压栈
    this(15);调用有参构造方法压栈
    完成有参先弹栈,无参再弹栈,堆地址传给对象

3.super()

  • 子类调用父类构造方法
  • 子类需要知道父类如何做初始化,因为继承的父类成员变量可能在父类的构造方法中改值
父类Person
int a=1;
public Person()
{
a=5;
}
子类Man
public Man()
{
}
text测试类
Man man=new Man();
syso(man.a);
内存原理:每个子内存空间都分两部分,一部分父类用,一部分自己用
父类默认值a=1,子类默认值完成后子类构造方法压栈(因为是创建子类对象)
public Man()中super()压栈开始调用父类构造方法
在父类构造方法中a=5重新赋值以上堆中子类空间中的父类a默认值(super记录父类地址)
父构造弹栈,子构造弹栈
子堆内存地址传给对象

  • private也是会进入堆内存仅是不让使用
  • 构造器无继承,无重写概念
  • 父构造器有参数,子类构造器必须重写并且注明super(参数)
父类Person
public Person(int a)
{

}
子类Man
public Man(int a)
{
super(a)
}
因为默认是super();父类构造器有参数时就会找不到super()无参构造方法
  • ctrl +t打开继承关系图
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 7,606评论 0 11
  • 第四章 面向对象 面向对象思想 面向对象思想的引入前面我们讲过数组,当有多个数组都需要遍历时,我们可以将遍历的代码...
    chongsheng阅读 3,848评论 0 0
  • 1、.java源文件: 一个以”.java“为后缀的源文件:只能有一个与文件名相同的类,可以包含其他类。 2、类方...
    Hughman阅读 5,566评论 1 9
  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 11,943评论 0 62
  • 看见家里各个角落都散着好多~~被遗弃的喜糖。让我想起小时候,我是有多么喜欢吃糖啊。 大约七、八岁左右,有...
    顾霏阅读 2,325评论 0 0

友情链接更多精彩内容