构造函数间调用:

描述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. 【学习】基础知识:数组和矢量计量【Numpy】

    Numpy是高性能科学计算和数据分析的基础包.功能如下: ndarray 一个具有矢量算法运算和复杂广播能力的快速且节省空间的多维数组 用于对整组数据进行快速运算的标准数学函数(无需编写循环) 用于读 ...

  2. 6. 添加messager.alert()确定按钮的回调函数,即点完确定按钮后触发的事件

    添加messager.alert()确定按钮的回调函数,即点完确定按钮后触发的事件: $.messager.alert('提示信息', "请联系管理员处理!", 'info', f ...

  3. model.form使用,配合form的钩子

    一次model.form的使用记录,配合form钩子的过程 在写信息采集功能的时候,需要添加资产信息,使用modelform组件减少工作量 官网介绍:版本1.9.https://docs.django ...

  4. python 列表 list的基本操作

    一,Python 的列表数据类型包含更多的方法. 这里是所有的列表对象方法: list.append(x) 把一个元素添加到链表的结尾,相当于 a[len(a):] = [x] . list.exte ...

  5. MYSQL性能优化(3)

    优化数据库对象 1.优化表的数据类型 select * from tbl1 procedure analyse(16,256) ,会输出优化建议,结合情况优化 2.拆分表(仅Myisam) 2.1 纵 ...

  6. jquery之过滤filter,not

    <body> <h1>欢迎来到我的主页</h1> <p>我是唐老鸭</p> <p class="intro"> ...

  7. 记账本,C,Github,entity

    package entity; public class Category { private int id; private String name; private int recordNumbe ...

  8. ajax----tomact服务器运行

    一.菜鸟教程的代码本地运行 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  9. psdTohtml

    https://github.com/anjorweb/fastHtml fastHtml 一个简单的psd直接导出html的工具 自己工作常用整理 适合单页面且采用DOM结构布局的H5页面,基于Ca ...

  10. 记一次线上bug排查-quartz线程调度相关

    记一次线上bug排查,与各位共同探讨. 概述:使用quartz做的定时任务,正式生产环境有个任务延迟了1小时之久才触发.在这一小时里各种排查找不出问题,直到延迟时间结束了,该任务才珊珊触发.原因主要就 ...