构造函数就是在我们定义一个类似时就已经默认存在的.
例如:
class Perso{
private String name; //私有属性 名字 private int age; //私有属性 年龄 //功能 public void speak() {
System.out.println(name+":"+age); } }
讯享网
然后我们new一个对象的时候
讯享网Perso p1 = new Perso();
class Perso{
private String name; //私有属性 名字 private int age; //私有属性 年龄 //功能 Perso(){
} public void speak() {
System.out.println(name+":"+age); } }
讯享网class Perso{
private String name; //私有属性 名字 private int age; //私有属性 年龄 //功能 Perso() //构造函数 {
System.out.printf("hello"); } public void speak() {
System.out.println(name+":"+age); } }
然后我们自己构造了函数,那么虚拟机就不自动帮我们添加了.
这里我们如果new一个对象的时候,就会先输出hello这句话.
如果我们这样的话
class Perso{
private String name; //私有属性 名字 private int age; //私有属性 年龄 //功能 Perso(System n) //构造函数 {
name = n; } public void speak() {
System.out.println(name+":"+age); } }
然后我们new一个对象的时候,就必须加入参数Perso p1 = new Perso("小明");
这也就相当于我们默认初始化对象了,如果输出的话,就会输出小明:0
前面没有构造函数,设置参数时,属性都会自动初始化
内存图解
讯享网class Perso{
private String name; //私有属性 名字 private int age; //私有属性 年龄 //功能 Perso() //构造函数 {
System.out.printf("hello"); } public void speak() {
System.out.println(name+":"+age); } } //这里的类就不写了 public static void main(String[] args){
Perso p = new Perso();

讯享网

如果是这样的话,内存是这样的

class Perso{
private String name; //私有属性 名字 private int age; //私有属性 年龄 //功能 Perso(String n) //构造函数 {
name = n; } public void speak() {
System.out.println(name+":"+age); } } //这里的类就不写了 public static void main(String[] args){
Perso p = new Perso("小明");
前面都是一样的


至于这个"小明"是如何赋值给堆内存的,这就涉及到this这个关键字了.
讯享网Perso(String name) //构造函数 {
name = name; //这样导致name是为null的 }
然后这样就不会了
Perso(String name) //构造函数 {
this.name = name; //这样导致name是为null的 }
其实在构造函数中,有默认this的,一创建this就会指向那个对象的地址
例如上面我们说的,小明赋值给name,
其实就有this的原因


一个类当中,它的所以成员,想要被执行,就必须有对象调用,不过一般都省略了this
thi还可以用在构造函数,调用构造函数
例如:
讯享网Perso(String name){
//构造重载函数,字符串参数. this.name = name; } Perso(String n, int age){
//构造重载函数,字符串与整型参数. this(name); this.age = age; }

然后弹栈

然后也弹栈

Perso(String n, int age){ //构造重载函数,字符串与整型参数. this.age = age; this(name); }
不能这样子!!!会报错
构造函数中用this调用其它构造函数必须放在第一行!!!
因为初始化动作要先执行
讯享网当成员变量和局部变量重名,可以用关键字this来区分. this:代表对象.代表那个对象呢?当前对象 this就是所在函数所属对象的引用. 简单说:哪个对象调用lthis所在的函数,this就代表那个对象.
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/27951.html