JAVA中构造函数以及this的使用(内存的图解)

JAVA中构造函数以及this的使用(内存的图解)构造函数就是在我们定义一个类似时就已经默认存在的 例如 class Perso private String name 私有属性 名字 private int age 私有属性 年龄 功能 public void speak System out println name

大家好,我是讯享网,很高兴认识大家。

构造函数就是在我们定义一个类似时就已经默认存在的.
例如:

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就代表那个对象. 
小讯
上一篇 2025-01-11 12:36
下一篇 2025-01-28 13:15

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/27951.html