JAVA---this关键字

2023-05-16

this关键字

关于java中的this关键字:
this表示当前对象:
this.属性 区别成员变量和局部变量
this.() 调用本类的某个方法
this() 表示调用本类构造方法,只能用在构造方法的第一行语句。
this关键字只能出现在非static修饰的代码中

1、this是一个引用,this是一个变量,this变量中保存了内存地址指向了自身,this存储在JVM堆内存中Java对象的内部。
2、创建100Java对象,每一个对象都有this,也就是说有100个不同的this。
3、this可以出现在“实例方法”当中,(this指向)代表当前正在执行这个动作的对象。(this代表当前的对象“张三”)。

重点:没有static关键字的方法称为“实例方法”。实例方法访问:“引用”。
重点:没有static关键字的变量称为“实例变量”。

注意:当一个行为/动作执行的过程当中是需要对象参与的,那么这个方法一定要定义为“实例方法”,不要带static关键字

在这里插入图片描述

public class Customer {
	//姓名
	//不带有static关键字的变量 称为实例变量
	String name;
	//构造方法
	public Customer() {
		//super(); 可省略 也可传入参数
	}
	//不带有static关键字的方法 称为实例方法
	public void shopping() {
		//由于name是一个实例变量,所以这个name访问的时候一定是访问当前对象的name
		//所以多数情况下“this.”是可以省略的。
		//System.out.println(name + "在购物!");
		
		//完整写法:引用.实例变量(c1.name + " is shopping!")
		System.out.println(this.name + "在购物!");
	}
}

public class CustomerTest {
	public static void main(String[] args) {
		
		//创建对象
		Customer c1 = new Customer();
		c1.name = "张三";
		c1.shopping();//张三在购物!

		Customer c2 = new Customer();
		c2.name = "李四";
		
		c2.shopping();//李四在购物!
		
	}

由于name是一个实例变量,所以这个name访问的时候一定是访问当前对象的name 此时this可以省略

    public class ThisTest {
	int num = 10;//实例变量(引用.的方式访问)
	public static void main(String[] args) {
		//编译错误,没有当前对象this
		//因为此时this指向的是当前类ThisTest 而这个类中没有变量num
		//System.out.println(num);
		//System.out.println(this.num);
    	//正确的访问方式  创建对象
		Customer c1 = new Customer();
		String name=c1.name = "张三";
		System.out.println(name);
	}
}
public class ThisTest {
	//带有static
	public static void main(String[] args) {
		//调用doSome
		//类名调用
		//ThisTest.doSome();
		doSome();
		/*调用doOther 因为主方法是静态方法不能使用this关键字所以
		只能通过创建对象访问*/
		ThisTest tt = new ThisTest();
		tt.doOther();
		tt.run();
	}
	//带有static
	public static void doSome() {
		System.out.println("Do Some!");
	}
	//不带有static,实例方法
	public void doOther() {
		//this表示当前对象
		//该方法是实例方法所以可以使用this
		this.run();
		//使用this关键字调用static修饰的变量 因为当前的方法是实例方法 可以使用this
		this.doSome();
		//同理也可以在实例方法中使用this关键字调用static修饰的变量
		System.out.println("Do Other!");
	}
	public void run() {
    	this.doSome();
		System.out.println("Run!");
	}
}

在带有static的方法当中,不能“直接”访问实例变量和实例方法。(可以通过类名去访问)
实例变量和实例方法都需要对象的存在(new)。
而static方法当中是没有this的,也就是说当前对象是不存在的。自然也是无法直接访问当前对象的实例变量和实例方法。
在不带有static的方法中可以使用this关键字访问实例变量/实例方法

This什么情况下不能省略

public class User {
	//属性 没有用static修饰 所以是实例变量
	private int id;
	private String name;
	public void setId(int id) {
		//this的作用是区分实例变量和局部变量
		//this.id是实例变量 
		//=右边的 id是局部变量
		this.id = id;
	}
}

区分实例变量和局部变量的时候不省略this

//自定义日期类型
public class Date {
	//属性 实例变量
	private int year;  
	private int month; 
	private int day;
	//构造函数
	//有参数
	public Date(int year, int month, int day) {
		this.year = year;
		this.month = month;
		this.day = day;
	}   
	//无参数
	public Date() {
		//使用this关键字直接调用有参数构造器 必须位于首行
		//仅限在本类的构造器中使用
		this(1970,1,1);
	//	this.year = 1970;
	//	this.month = 1;
	//	this.day = 1;
	}

可以在本类的构造器中使用this关键字调用构造器/普通方法
调用构造器的时候 this必须位于首行
当在构造器中调用普通方法 this位置任意
this可以传递参数 例如:this(1970,1,1)
另外 普通方法中不能调用构造方法 但可以在构造方法中使 用this关键字调用普通方法

总结

1.可以使用在实例方法当中,代表当前对象。this.方法名();

2.可以使用在构造方法当中,通过当前的构造方法调用其他的构造方法 this必须位于第一行 this(传入的参数)

3.注意:普通方法中不能调用构造器

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAVA---this关键字 的相关文章

随机推荐

  • python爬取京东商品信息及评论

    准备 chrome浏览器 和 chromeDriver插件 xff08 其他浏览器步骤类似 xff09 python 环境python selenium模块 代码 span class token triple quoted string
  • Error while loading error while loading shared libraries 解决办法

    Error while loading error while loading shared libraries 解决办法 缺失了 xff0c 那就找到放回去 发行版 xff1a Archlinux 如标题所言 xff0c 这里以截至写文章
  • sql-创建复合主键

    一 说明 xff1a 1 数据库的每张表只能有一个主键 xff0c 不可能有多个主键 2 所谓的一张表多个主键 xff0c 我们称之为复合主键 xff08 联合主键 xff09 注 xff1a 联合主键 xff1a 就是用多个字段一起作为一
  • sql_外键

    一 外键的定义 1 外键是一种索引 xff0c 是通过一张表中的一列指向另一张表的主键 xff0c 使得这两张表产生关联 2 是某个表中的一列 xff0c 它包含在另一个表的主键中 3 一张表中可以有一个外键也可以有多个外键 二 外键的作用
  • 数据库事务图解

    一 基本概念 xff08 from baidu xff09 数据库事务 Database Transaction xff0c 是指作为单个逻辑工作单元执行的一系列操作 xff0c 要么完全地执行 xff0c 要么完全地不执行 事务处理可以确
  • MySQL 中判断字符串是否相等

    感谢 xff1a https blog csdn net yangfengjueqi article details 72821603 mysql 中判断两个字符串是否相等可以用 lt 61 gt 或者 61 例 但是需要注意 lt 61
  • mysql order by 多个字段及其多字段排序原则,和 order by 后跟数字

    一 order by 后跟数字 select from table order by n n 表示select里面的第n个字段 xff0c 整段sql的意义是 xff1a 查询出来的结果 xff0c 按照第N个字段排序 二 order by
  • ROS 学习1- 创建工作空间以及功能包

    一 工作空间概念 在ros中工作空间统称为workspace 是用来存放你一个工程开发需要用到的相关文件的 xff0c 在ros中它是一个带有空座空间性质的文件夹 该文件夹中通常会包含4个子文件夹 src 用来存放功能包的 build 编译
  • Linux 中echo及echo > 和echo >>

    一 Linux 中的echo指令 Shell 的 echo 指令用于字符串的输出 详见 xff1a Shell echo命令 菜鸟教程 二 echo gt 和echo gt gt echo gt 和echo gt gt 的区别详见 xff1
  • Yolov5 计算访存量MAC与计算量FLOPS

    说明 xff1a 因为yolov5函数中已经计算了 FLOPS xff0c 因此如果想要计算访存量那么只需按照flops的位置 添加访存量的计算即可 一 先记住计算量和访存量的公式 xff1a 二 找到计算FLOPS的位置 xff0c 并添
  • Yolov5 中添加Network Slimming剪枝--稀疏训练部分

    前言 xff1a Network Slimming剪枝过程让如下 1 稀疏化 2 剪枝 3 反复迭代这个过程 一 稀疏化 xff1a 通过Network Slimming 的核心思想是 添加L1正则来约束BN层系数 xff0c 从而剪掉那些
  • Pytorch children()、modules()、named_children()、named_modules()、parameters()、named_parameters()使用说明

    参考博客 xff1a Pytorch children modules named children named modules named parameters parameters 使用说明 洪流之源的博客 CSDN博客 childre
  • Gazebo执行保存世界选取文件夹时卡住不动的解决办法

    背景 xff1a 在学习ROS Gazebo仿真 xff0c gazebo中加入任意模型 xff0c 然后点击save world as然后卡死的问题一直无法解决 现象 xff1a 点save as world屏幕变暗 xff0c 无窗口弹
  • PLC的自抗扰控制(ADRC)算法

    自抗扰控制算法 网上很多文章有理论推导和讲解 大家也可以关注韩京清教授的论文和书籍 这里就不赘述了 博途PLC ADRC自抗扰控制完整源代码可以参看下面这篇文章 博途PLC 1200 1500PLC自抗扰控制 ADRC 完整SCL源代码 R
  • PLC PID优化系列之非线性参数整定(FC函数)

    nbsp nbsp 根据一般PID的响应曲线 我们可以设计更加符合响应曲线的P I D参数 这里的非线性是指参数整定方法采用非线性 并不是PID本身的算法 非线性的PID算法后面会给大家讲 包括韩京清老师提出的ADRC都属于非线性PID范畴
  • 脖子上的这个包是“夺命包”,再不重视就晚了!化解方法必看!

    生活中你有见过这样的颈椎吗 xff1f 你的亲人 xff1f 朋友 xff1f 或者是 陌生人 xff1f 这叫富贵包 xff01 这是咱老百姓起的一个吉利的名字 但是 xff0c 在中医看来 xff0c 这哪是富贵包 xff1f 这背后潜
  • ADRC自抗扰控制算法(含梯形图完整源代码和算法公式)

    ADRC自抗扰控制算法的详细解读 不是本篇博客讨论的重点 专栏有ADRC的系列学习笔记 感兴趣的同学可以自行查看 链接如下 PLC的自抗扰控制 ADRC 算法 RXXW Dor的博客 CSDN博客 adrc算法 1 自抗扰控制算法 网上很多
  • ADRC/Matlab一步步实现跟踪微分器TD(附完整PLC测试代码链接)

    TD微分器的主要作用 就是安排过渡过程 产生跟踪信号和微分信号 滤除噪声 关于Adrc的理论分析不是本篇博客的重点 主要也是能力所限 相关理论大家可以看韩京清教授的论文 专栏有简单的学习笔记 感兴趣的同学可以看看 链接如下 ADRC自抗扰的
  • SMART PLC嵌套调用级数(ADRC调用问题)

    S7 200PLC子程序和中断程序支持的最大嵌套级数分别为8级和1级 所以老款控制器中断程序调用子程序劝大家不要套娃了 只支持1级 这篇博客我们分析下ADRC算法里的调用结构问题 首先看下调用级数最深的层级 1 嵌套调用 从图中可以看出调用
  • JAVA---this关键字

    this关键字 关于java中的this关键字 this表示当前对象 this 属性 区别成员变量和局部变量 this 调用本类的某个方法 this 表示调用本类构造方法 xff0c 只能用在构造方法的第一行语句 this关键字只能出现在非