首页 > 编程语言 >Java之this关键字详解

Java之this关键字详解

时间:2024-07-23 23:28:08浏览次数:14  
标签:Java String Teacher 成员 public 关键字 详解 id 变量

this关键字

在类中的普通成员方法中,可以使用this关键字,其表示调用当前方法的对象引用,即哪个对象调用该方法,this就代表哪一个对象。

this关键字用法:

  • 对成员变量和局部变量进行区分

    固定格式:this.数据成员;

  • 调用类中的成员方法

    固定格式:this.成员方法(实际参数列表);

  • 调用类中的其他构造器(后面章节补充)

成员变量与局部变量的区分:

方法的形参如果与成员变量同名

  • 不带this修饰的变量指的是形参
  • 如果要表示成员变量,则必须加this修饰

方法的形参与成员变量不同名

  • 则不带this修饰的变量指的就是成员变量

案例展示:

​ 重新实现Account类,要求使用this关键字,要求成员方法中形式参数名跟类数据成员名相同。

基础类Account:
在这里插入图片描述

package com.briup.chap05.bean;

public class Account {
	private String id;		//卡号
	private double balance;	//金额
	
	public void setId(String id) {
		//方法的形参如果与成员变量同名,不带this修饰的变量指的是形参,而不是成员变量
		//如果要表示成员变量,则必须加this修饰
		System.out.println("参数id: " + id);
		System.out.println("this.id: " + this.id);
		
		this.id = id;
	}
	
	public String getId() {
        //如果形参没有与成员变量同名,不带this修饰的变量指的是成员变量
        return id;
        //return this.id;
	}
	
	public void setBalance(double balance) {
		this.balance = balance;
	}
	
	public double getBalance() {
		return balance;
	}
	
	public void show() {
		System.out.println("id: " + this.id);
        
        //使用this去调用普通成员方法
		System.out.println("balance: " + this.getBalance());
	}
}

测试类:

package com.briup.chap05.test;

import com.briup.chap05.bean.Account;

public class Test08_This {
	public static void main(String[] args) {
		//1.实例化对象
		Account acc = new Account();
		
		//2.借助set方法赋值
		acc.setId("001");
		acc.setBalance(2300.5);

		System.out.println("---------------------");
		
		acc.show();
	}
}

运行效果:
在这里插入图片描述

测试代码较为简单,注意观察注释描述。

this内存构成理解:

public static void main(String[] args) {
	Student stu1 = new Student("zs",21);
    stu1.sayHello();
    
    Student stu2 = new Student("tom",19);
    stu2.sayHello();
}
  • 单个对象内存图
    在这里插入图片描述

  • 多个对象内存图
    在这里插入图片描述

观察上图可知:每一个对象中,都有自己的this,和其他对象中的互不影响。

当前执行stu1.sayHello()代码的时候,this代表的就是stu1

当前执行stu2.sayHello()代码的时候,this代表的就是stu2

结论:成员方法被哪个对象调用,方法中的this就代表那个对象,即谁调用,this就代表谁。

思考:在生活中, 我们每一个人心中的this,指的是哪一个汉字?

this补充

this特殊用法:

​ 在构造方法中,可以借助this关键字调用其他构造方法。

​ 具体格式为:this(实际参数列表);

案例展示:

基础类补充:

package com.briup.chap05.bean;

public class Teacher {
	//省略...
	
	//该类已经成功定义2参构造器,定义过程省略...
	//public Teacher(String name, double salary);
 
    //this特殊用法:在构造方法中,调用其他构造方法
    public Teacher(String name) {
        //必须是构造方法的第一行有效代码
        this(name,0);
    }
}   

测试类代码:

package com.briup.chap05.test;

import com.briup.chap05.bean.Teacher;

public class Test10_This {
	public static void main(String[] args) {
		//调用Teacher(String)构造方法实例化对象
        //底层借助Teacher(String, double)实现
		Teacher t = new Teacher("larry");
		t.show();
	}
}

运行效果:
在这里插入图片描述

观察上图可知,构造方法Teacher(String)底层借助Teacher(String, double)实现了功能。

注意:this(实际参数列表)必须是构造方法中的第一行有效代码。

标签:Java,String,Teacher,成员,public,关键字,详解,id,变量
From: https://blog.csdn.net/u012135697/article/details/140596439

相关文章

  • 自学Java第15Day
    学习目标:面向对象进阶学习内容:常用API学习时间:3点-下午6点学习产出:1.Math方法名说明publicstaticintabs(inta)获取参数绝对值publicstaticdoubleceil(doublea)向上取整publicstaticdoublefloor(doublea)向下取整publicstaticint  round(floata)四......
  • 一文详解Type C-CC引脚的作用
    一文详解TypeC-CC引脚的作用关于USBCC引脚的功能,想必很多人都很好奇。USB经常接触,其内部的VBUSD+与D-大家肯定都知道了解,但对于CC引脚的存在却很少有人知道其作用。所以呢,今日,小白就来简单的介绍一下其功能。首先还是要先介绍几个关键名词:DFP(DownstreamFacingPort)下行端口......
  • 从源码角度详解Golang调度GMP
    文章目录从源码角度详解Golang调度GMP1.1调度器的三个抽象概念:G、M、P1.2调度的大致轮廓2.进程启动时都做了什么2.1runtime.osinit(SB)方法针对系统环境的初始化2.2runtime.schedinit(SB)调度相关的一些初始化2.3runtime·mainPC(SB)启动监控任务2.4......
  • Java设计模式-单例模式
    Java常用设计模式-单例模式JavaDesignPatterns:创建型模式:工厂方法、抽象方法、建造者、原型、单例结构型模式有:适配器、桥接、组合、装饰器、外观、享元、代理行为型模式有:责任链、命令、解释器、迭代器、中介、备忘录、观察者、状态、策略、模板方法、访问者常用设计模式:......
  • 深入理解Java虚拟机:JVM高级特性与最佳实践-第三章-垃圾收集器与内存分配策略
    在java内存运行时区域中的各个部分中,程序计数器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭,因此这几个区域的内存分配和回收都具备确定性,在这几个区域内就不需要过多考虑如何回收的问题,当方法结束或者线程结束时,内存自然就跟随着回收了。但是Java堆和方法区这两个区域具有......
  • 面试题-Java 容器
    List和Set的区别是什么?Vector,ArrayList,LinkedList区别?ArrayList和LinkedList底层是怎么实现的?各自的特点是什么?HashSet和HashMap和的区别?TreeMap和TreeSet区别和实现原理HashMap,Hashtable的区别?HashMap,LinkedHashMap,TreeMap的区别?HashMap,和ConncurrentHashMap......
  • 41-50题矩阵和字符串 在Java中,将大写字符转换为小写字符的方法主要有以下几种:
    20240723一、数组最后几个和字符串的两个448.找到所有数组中消失的数字(和645.错误的集合差不多)283.移动零118.杨辉三角119.杨辉三角II661.图片平滑器(没看懂)598.区间加法II566.重塑矩阵303.区域和检索-数组不可变520.检测大写字母125.验证回文串二、在Jav......
  • JavaSE异常、今日面试题,解决git合并失败的终极篇!!!若以框架报错Invalid bound statement
    20240723一、JavaSE异常二、今日面试题三、解决git无法合并推送问题(终极篇!!!)1.直接把你写的复制出来,然后输入git命令1.1.解决办法一:保留本地的更改,中止合并->重新合并->重新拉取1.2解决办法二:舍弃本地代码,远端版本覆盖本地版本(慎重)2.然后复制回来,然后再合并推......
  • 《Java初阶数据结构》----3.<线性表---LinkedList与链表>
    目录前言一、链表的简介1.1链表的概念1.2链表的八种结构 重点掌握两种1.3单链表的常见方法三、单链表的模拟实现四、LinkedList的模拟实现(双链表)4.1 什么是LinkedList4.2LinkedList的使用五、ArrayList和LinkedList的区别 前言   大家好,我目前在学习......
  • 黑马pink JavaScript学习笔记_Web APIs Day2
    事件监听(绑定)什么是事件?事件是系统内发生的动作或者发生的事情。比如:用户点击页面上的一个按钮。什么是事件监听?就是让程序检测是否有事件产生,一旦有事件触发,就立即调用一个函数做出响应,也称为注册事件比如:鼠标经过的时候,弹出一个alert“鼠标经过了~”语法元素对象.addEven......