一 this调用构造方法

  构造方法之间的调用,可以通过this关键字来完成。

格式:

  this(参数列表);

构造方法的调用举例:

class Person {
// Person的成员属性
private int age;
private String name; // 无参数的构造方法
Person() {
} // 给姓名初始化的构造方法
Person(String nm) {
name = nm;
}
// 给姓名和年龄初始化的构造方法
Person(String nm, int a) {
// 由于已经存在给姓名进行初始化的构造方法 name = nm;因此只需要调用即可
// 调用其他构造方法,需要通过this关键字来调用
this(nm);
// 给年龄初始化
age = a;
}
}

二 this的原理图解

例如:

class Person {
private int age;
private String name; Person() {
}
Person(String nm) {
name = nm;
}
Person(String nm, int a) {
this(nm);
age = a;
}
} class PersonDemo {
public static void main(String[] args) {
Person p = new Person("张三", 23);
}
}

内存图解:

  1、先执行main方法,main方法压栈,执行其中的new Person(“张三”,23);

  2、堆内存中开辟空间,并为其分配内存地址0x33,,紧接着成员变量默认初始化(name=null age = 0);

  3、拥有两个参数的构造方法(Person(String nm , int a))压栈,在这个构造方法中有一个隐式的this,

因为构造方法是给对象初始化的,那个对象调用到这个构造方法,this就指向堆中的那个对象。

  4、由于Person(String nm , int a)构造方法中使用了this(nm);构造方法Person(String nm)就会压栈,

并将“张三”传递给nm。在Person(String nm , int a)构造方法中同样也有隐式的this,this的值同样也为

0x33,这时会执行其中name = nm,即把“张三”赋值给成员的name。当赋值结束后Person(String nm , int a)

构造方法弹栈。

  5、程序继续执行构造方法(Person(String nm , int a)中的age = a;这时会将23赋值给成员属性age。

赋值结束构造方法(Person(String nm , int a)弹栈。

  6、当构造方法(Person(String nm , int a)弹栈结束后,Person对象在内存中创建完成,并将0x33赋值

给main方法中的p引用变量。

注意事项:

  this所在的方法,this就代表哪个对象。

  调用其他构造方法的语句必须定义在构造方法的第一行,原因是初始化动作要最先执行。

三 成员变量和局部变量同名问题

  以在成员变量名前面加上this.来区别成员变量和局部变量

例如:

class Person {
private int age;
private String name; // 给姓名和年龄初始化的构造方法
Person(String name, int age) {
// 当需要访问成员变量是,只需要在成员变量前面加上this.即可
this.name = name;
this.age = age;
} public void speak() {
System.out.println("name=" + this.name + ",age=" + this.age);
}
} class PersonDemo {
public static void main(String[] args) {
Person p = new Person("张三", 23);
p.speak();
}
}

四 this的应用

例如:在Person类中定义功能,判断两个人是否是同龄人

class Person {
private int age;
private String name; // 给姓名和年龄初始化的构造方法
Person(String name, int age) {
// 当需要访问成员变量是,只需要在成员变量前面加上this.即可
this.name = name;
this.age = age;
} public void speak() {
System.out.println("name=" + this.name + ",age=" + this.age);
} // 判断是否为同龄人
public boolean equalsAge(Person p) {
// 使用当前调用该equalsAge方法对象的age和传递进来p的age进行比较
// 由于无法确定具体是哪一个对象调用equalsAge方法,这里就可以使用this来代替
/*
* if(this.age == p.age) { return true; } return false;
*/
return this.age = p.age;
}
}

java this关键字调用构造方法的更多相关文章

  1. java super关键字和调用父类构造方法

    表示父类对象的默认引用 如果子类要调用父类被覆盖的实例方法,可用super作为调用者调用父类被覆盖的实例方法. 使用super调用父类方法 使用super调用父类的构造方法 调用构造方法 本类中调用另 ...

  2. JAVA_SE基础——32.this关键字调用本类的构造方法

    黑马程序员入学blog... 也算是学习笔记. 下面我们来看段代码: package day07; class Student{ int id; //身份证 String name; //名字 pub ...

  3. Java 基础 面向对象之构造方法和关键字

    构造方法 构造方法简介 在开发中经常需要在创建对象的同时明确对象的属性值,比如员工入职公司就要明确他的姓名.年龄等属性信息. 那么,创建对象就要明确属性值,那怎么解决呢?也就是在创建对象的时候就要做的 ...

  4. [转]Java中子类调用父类构造方法的问题分析

    在Java中,子类的构造过程中,必须调用其父类的构造函数,是因为有继承关系存在时,子类要把父类的内容继承下来,通过什么手段做到的? 答案如下:    当你new一个子类对象的时候,必须首先要new一个 ...

  5. 084 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 03 构造方法-this关键字

    084 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 03 构造方法-this关键字 本文知识点:构造方法-this关键字 说明:因为时间紧 ...

  6. Java中this关键字在构造方法中的使用

    1. Java中this关键字代表对象本身.用this关键字可以在类的内部调用属性和方法,这样代码的可读性比较高,因为它明确的指出了这个属性或方法的来源. 2. 同时在构造函数中也可以使用this关键 ...

  7. Java基础-this关键字和构造方法(10)

    this关键字 方法被哪个对象调用,this就代表那个对象当局部变量隐藏成员变量时,使用this关键字(例如构造方法和访问器). 构造方法 构造方法作用概述 给对象的数据进行初始化 构造方法格式 方法 ...

  8. 085 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 04 构造方法调用

    085 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 04 构造方法调用 本文知识点:构造方法调用 说明:因为时间紧张,本人写博客过程中只是 ...

  9. 【Java基础】构造方法调用构造方法

    从一个程序开始: class dog { private String name; private String color; private int age; dog(String name) // ...

随机推荐

  1. Static关键字的使用

    Static关键字的使用 static关键字的作用: 用来修饰成员变量和方法,被修饰的成员是属于类的,而不单单是属于某个对象的,也就是说,可以不靠对象来调用. 首先我们来介绍类变量 当static修饰 ...

  2. OSCP Learning Notes - Scanning(2)

    Scanning with Metasploite: 1. Start the Metasploite using msfconsole 2. search modules 3.Choose one ...

  3. 记一次webpack打包的问题

    记一次webpack打包的问题 在webpack打包中开启了webpack-bundle-analyzer,发现了一个chunk:tinymce  在整个项目中查找,只有一个未被使用的组件中有如下代 ...

  4. 谷歌浏览器又隐藏的HTTPS和WWW前缀

    谷歌工程师 Emily Schechter 曾在 Chromium 反馈页面中提到:Chrome 团队一直将简易性.可用性.安全性作为衡量 UI 的标准.为了让 URL 能更好地被用户理解.移除那些容 ...

  5. 将一个Linux系统中的文件或文件夹复制到另一台Linux服务器上(scp的使用)

    一.复制文件: (1)将本地文件拷贝到远程scp 文件名 用户名@计算机IP或者计算机名称:远程路径(2)从远程将文件拷回本地scp 用户名@计算机IP或者计算机名称:文件名 本地路径 二.复制文件夹 ...

  6. Oracle11.2安装和完全卸载及卸载后重装等问题

    官网:https://www.oracle.com/index.html 安装: 1.官网下载2.解压到同一个目录(database)3.运行安装4.如果提示系统版本低可在(database\stag ...

  7. 深入剖析.NETCORE中CORS(跨站资源共享)

    前言 由于现代互联网的飞速发展,我们在开发现代 Web 应用程序中,经常需要考虑多种类型的客户端访问服务的情况:而这种情况放在15年前几乎是不可想象的,在那个时代,我们更多的是考虑怎么把网页快速友好的 ...

  8. jQuery中常用网页效果应用

    一.常用网页效果应用 1.表单应用 表单由表单标签.表单域和表单按钮组成. 1.1单行文本框应用 例:获取和失去焦点改变样式 首先,在网页中创建一个表单,HTML代码如下 <form actio ...

  9. methodology of english learning

    classify the vocabulary into different catigories syllabus about person

  10. 【扩展推荐】Intervention/image 图片处理

    Intervention/image 是为 Laravel 定制的图片处理工具, 它提供了一套易于表达的方式来创建.编辑图片. 一.环境要求 二.安装及配置 下载地址:https://packagis ...