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打开继承关系图