构造函数间调用:

描述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. IntelliJ IDEA 中创建maven项目

    IDEA作为最好得开发工具之一集成了maven工具,今天记录一下我创建使用idea创建maven项目 1.双击IDEA图标,进入到如下界面,在该页面中,点击箭头所示的“Create New Proje ...

  2. !!代码:baidu地图

    http://map.baidu.com/mobile/  手机开发时,嵌入地图可以嵌入这个网址!! http://developer.baidu.com/map/lbs-cloud.htm 百度地图 ...

  3. sqlserver float小数存数据库变成多位了 比如说12.23存进去变成 12.229999998 甚至更长

    使用 numeric(12,2)的数据类型,或者decimal(12,2)   追问 不能随意修改表结构 有别人办法么 程序上控制的 追答 那你就不用管他了,所谓 浮点数,必然是这么存储的.

  4. leetcode279

    动态规划 public class Solution { public int NumSquares(int n) { var list = new List<int>(); list.A ...

  5. leetcode322

    public class Solution { public int coinChange(int[] coins, int amount) { ) ; ]; dp[] = ; ;i <= am ...

  6. leetcode1029

    class Solution(object): def twoCitySchedCost(self, costs: 'List[List[int]]') -> int: costs = sort ...

  7. IOS 发布 升级新版本

    ERROR ITMS-90725: "SDK Version Issue. ERROR ITMS-90725: "SDK Version Issue. This app was b ...

  8. input 选择框改变背景小技巧

    最近在项目中遇到一个问题,想要改变input选择框的背景,然而,令我没有想到的是,竟然无法直接改变背景的颜色 通常情况下:我们都可以通过改变元素的 background-color 的值来改变元素的背 ...

  9. mybatis泛型(一)

    mybatis的确很方便,可以随意配置sql语句,并根据参数生成指定的sql,也可以根据查询结果生成指定对象 但是有一点非常恐怖,就是每个数据库表都必须有一个配置,等于在一个系统里做了很多重复的工作, ...

  10. GDI+_Png图片浏览器

    '昨天看见有人问VB6支不支持PNG,刚好我正在研究GDI+,于是做了这个演示程序.'演示下载地址:百度网盘|'下面为设计界面和运行效果截图 ' 千万别喷界面丑. /无奈 .