ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

韩顺平Java(类与对象03——构造器/构造法、对象创建流程分析、this)

2021-12-10 01:32:29  阅读:163  来源: 互联网

标签:03 name Person01 对象 age 构造 public 顺平


构造器/构造方法(constructor)

  •  简介:

 

 

 

 

 

 

 

 不能用对象来调用构造器

 

javap:反编译指令——对.class文件使用,能看到编译前的源文件,常用的有javap-c(反汇编) ,-v

 

 

public static void main(String[] args) {
        Person01 p1 = new Person01(23, "张三");
    }

}

class Person01 {
    int age;
    String name;

    public Person01(int pAge, String pName) {
//构造器 age = pAge; name = pName; }
Person01(){
//无参构造器 设置默认age为18
age = 18;
}
public Person01(int pAge) {
//构造器重载
age = pAge;
}
}

 

对象创建流程分析(重要)

  1. 先在方法区加载类信息(只会加载一次)
  2. new的时候在堆里开辟一块对象的空间,并进行默认初始化
  3. 根据属性是否有值进行显式的初始化
  4. 构造器上场,对对象进行初始化(引用类型指向常量池)
  5. 将对象名指向刚才在堆中分配的地址(对象名的本质就是一个指向堆中开辟的空间地址的名字,是对象的引用,在栈中)

 

 

this关键字

  • 问题引出:之前我们使用构造器的时候,构造器的形参和类属性名是不一样的,我们希望他们变成一样的

 虚拟机会给每一个对象分配一个this,来表示当前对象,哪个对象调用,this就代表那个对象

(可以使用hashCode()方法来查看this的地址——由 Object 类定义的 hashCode 方法确实会针对不同的对象返回不同的整数。这一般是通过将该对象的内部地址转换成一个整数来实现的。

使用细节:

 

 4的意思——只能在构造器中使用this来调用另一个构造器,而且必须放在构造器的第一句

 

 

 

第一个name是通过就近原则来访问的,而this.name明确制定了要访问的name(即类中的属性name)

 小练习:

 

 

public class Constructor {

    public static void main(String[] args) {
        Person01 p1 = new Person01(23,"zhangsan");
        Person01 p2 = new Person01(45,"lisi");
        System.out.println("p1、p2的比较结果:"+p1.compareTo(p2));
    }

}

class Person01 {
    int age;
    String name;

    public Person01(int age, String name) {
        this.age = age;
        this.name = name;
    }

    public boolean compareTo(Person01 p){
        return this.name==p.name && this.age ==p.age;
    }
}

 

标签:03,name,Person01,对象,age,构造,public,顺平
来源: https://www.cnblogs.com/recorderM/p/15669604.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有