构造函数间调用:

描述Person对象:

package android.java.oop08;

// 描述Person对象
public class Person { public String name;
public int age; public Person() {
/**
* 注意:所有构造方法中的第一行(隐式的) 是执行super();
* 如果一旦写了 this() this(值) super() super(值) 隐式的 第一行 将不再执行了
*/
this("张三");
} public Person(String name) {
/**
* 注意:所有构造方法中的第一行(隐式的) 是执行super();
* 如果一旦写了 this() this(值) super() super(值) 隐式的 第一行 将不再执行了
*/
this(99); this.name = name; // 注意:不能写在 构造方法操作的 下面,否则报错
// this(99);
} public Person(int age) {
/**
* 注意:所有构造方法中的第一行(隐式的) 是执行super();
* 如果一旦写了 this() this(值) super() super(值) 隐式的 第一行 将不再执行了
*/
this("赵六", age); this.age = age; // 注意:不能写在 构造方法操作的 下面,否则报错
// this("赵六", 98);
} public Person(String name, int age) {
/**
* 现在没有写 his() this(值) super() super(值)
* 所以隐式的 super(); 会执行
*/ this.name = name;
this.age = age;
}
}

main测试方法:

package android.java.oop08;

public class Demo01 {

    public static void main(String[] args) {
// 实例化 Person 对象
Person person = new Person(); // 打印值
System.out.println("name:" + person.name + " age:" + person.age) ;
} }

执行结果:




描述Cat对象:

package android.java.oop08;

// 描述Cat对象
public class Cat { /**
* 不定义构造方法,默认有一个隐式的构造函数 例如:
* public Cat() {
* ...
* ...
* ...
* }
*/ private double money; private int age; public void setMoney(double money) {
this.money = money;
} public void setAge(int age) {
this.age = age;
} @Override
public String toString() {
return "Cat{" +
"money=" + money +
", age=" + age +
'}';
}
}

main测试方法:

package android.java.oop08;

public class Demo02 {

    public static void main(String[] args) {

        // 实例化Cat对象
Cat cat = new Cat(); cat.setMoney(9080938.98); cat.setAge(99); /**
* 通过实例化的Cat对象引用地址 去 调用Cat的toString()方法
*/
System.out.println(cat.toString());
} }

执行结果:

对应以上Cat 案例的内存图:

this内存图:

从以上图进行分析:

  this 就是 当前 实例化 对象的  对象引用地址

经过以上图分析:来验证一下就明白了:

Cat:

package android.java.oop08;

// 描述Cat对象
public class Cat { /**
* 不定义构造方法,默认有一个隐式的构造函数 例如:
* public Cat() {
* ...
* ...
* ...
* }
*/ /**
* 得到当前对象实例化的this
*/
public Cat getThis() {
return this;
}
}

main测试方法:

package android.java.oop08;

public class Demo02 {

    public static void main(String[] args) {

        // 实例化Cat对象
Cat cat = new Cat(); boolean isItEqual = cat.getThis() == cat;
System.out.println("this 是否等于 Cat cat :" + isItEqual);
} }

执行结果:

Android-Java-构造函数间调用&this内存图的更多相关文章

  1. Java构造函数中调用构造函数

    在Java中,当为一个类创建了多个构造函数时,有时想在一个构造函数中调用另一个构造函数以减少代码量.这时可以使用this关键字来实现. 通常,当使用this关键字时,它意味着"这个对象&qu ...

  2. java中方法调用在内存中的体现

    在java中,方法以及局部变量(即在方法中声明的变量)是放在栈内存上的.当你调用一个方法时,该方法会放在调用栈的栈顶.栈顶的方法是目前正在执行的方法,直到执行完毕才会从栈顶释放.我们知道,栈是一种执行 ...

  3. 【起航计划 037】2015 起航计划 Android APIDemo的魔鬼步伐 36 App->Service->Remote Service Binding AIDL实现不同进程间调用服务接口 kill 进程

    本例和下个例子Remote Service Controller 涉及到的文件有RemoteService.java ,IRemoteService.aidl, IRemoteServiceCallb ...

  4. 06-03 Java 面向对象思想概述、开发设计特征,类和对象的定义使用,对象内存图

    面向对象思想概述.开发设计特征 1:面向对象思想 面向对象是基于面向过程的编程思想. 面向过程:强调的是每一个功能的步骤 面向对象:强调的是对象,然后由对象去调用功能 2:面向对象的思想特点 A:是一 ...

  5. 各个JAVA场景下的内存图

    首先,内存模型图,如下: 其次,一句话概括各个区域的作用: 1:程序计数器(Program Counter Register),让虚拟机中的字节码解释器通过改变计数器的值来获取下一条代码指令,比如分支 ...

  6. Android高效加载大图、多图解决方案,有效避免程序内存溢出现象

    好久没有写博客了,今天就先写一个小的关于在Android中加载大图如何避免内存溢出的问题. 后面会写如何使用缓存技术的核心类,android.support.v4.util.LruCache来加载图片 ...

  7. 牛客网Java刷题知识点之构造函数可以调用一般函数,但是一般函数不可以直接调用构造函数

    不多说,直接上干货! 通过 牛客网Java刷题知识点之构造函数是什么.一般函数和构造函数什么区别呢.构造函数的重载.构造函数的内存图解 我们对构造函数有了一个比较清楚的认识,当我们在创建对象时,我们会 ...

  8. android 不同进程间的调用 AIDL 实现通讯服务

    android 不同进程间的调用  AIDL 实现通讯服务       近期对aidl android 不同进程间的调用,不同运用间的调用做了一些尝试: 过程例如以下: 1:首先在要被调用的程序里写好 ...

  9. 【JAVA】笔记(1)---JVM内存图;方法重载条件;输入方法;转义字符;强制类型转换;变量分类及区别;Java命名规范;

    Java命名规范: 1.包:全部字母小写: 2.类+接口:所有单词的首字母大写: 3.变量+方法:第一个单词的首字母小写,其余单词首字母大写: 3.常量名:所有字母均大写,且用下划线" _ ...

随机推荐

  1. npm下载安装文件太慢..修改这个就好了..治好多年的便秘..真香预警

    修改 npm 的安装目录下的 npmrc文件 增加一条 registry=http://registry.cnpmjs.org 将原来的https改成下面的http $ npm config set ...

  2. 3Linux常用命令

    文件目录管理命令 1.touch touch 文件名   #创建空白文件 -a  修改读取(访问)时间atime -m  修改修改时间mtime -d  同时修改atime 和 mtime touch ...

  3. eclipse的Git忽略某些不需要提交的文件

    Eclipse切换到Navigator视图,找到.gitignore文件(如果是maven项目,一般找作为modules的项目的.gitignore文件),添加内容: .settings .proje ...

  4. wdk驱动开发的特点

    本文介绍WDK开发的一些特点.与应用层开发的差异性,不能混为一谈. 一.函数的调用点 在内核编程中,一个函数往往有多个调用点,而应用层中一个函数一般只在main里面有调用点.内核函数调用点一般在: 1 ...

  5. Linux权限赋予远程连接MySQL

    1.mysql -u root -p   (root)用户名 2.mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'r ...

  6. RFID数据清洗与数据清洗的区别

    RFID数据清洗和一般数据清洗的不同: RFID数据清洗已经跨越到硬件范畴!造成脏数据的原因是硬件原理和硬件所处环境本身!要提高RFID数据清洗能力,就必须同时研究技术原理和环境本身之间的互动关系,而 ...

  7. 微软Office Online服务安装部署(一)

    1.要使用office online功能,首先需要的是2台主机,并且主机的系统要求是windwos Server 我把他命名为Server和Client(两台服务器 用户必须为administrato ...

  8. 微擎开发------day01

    微擎的数据常量 $_GPC   -- 全局请求变量 类型: array 说明: 合并请求参数, 包括 $_GET, $_POST, $_COOKIE的内容. 相同键名覆盖规则为 $_COOKIE 覆盖 ...

  9. zabbix邮件自动预警

    Zabbix报警 自定义脚本报警 报警大致过程 item数据采集--->触发器由阈值触发带级别的信息-->触发动作发送邮件预警 1. 发送邮件脚本 1)安装sendEmail(参考Linu ...

  10. MySQL表与表之间的关系详解

    外键 说到表与表之间的关系就不得不说到一个关键词:外键 MySQ中的外键是什么,和表与表之间有什么关联? 外键(foreign key)又叫外连接, 在数据库中发挥着重要的作用 尤其是对于表和表之间的 ...