【从零开始学习JAVA | 第五篇】This关键字详解

news2024/9/24 1:20:19

目录

前言:

This关键字: 

作用:

本质:

总结:


 

前言:

        相信大家在进入JAVA面向对象编程篇章以后,多多少少都见过This关键字,而他的指向很多人总是傻傻搞不清楚,今天我们将从This指针的本质出发,深度剖析This关键字的指向规则。

This关键字: 

作用:

1. 引用当前对象:在类中的方法中,this用来引用当前对象。例如,通过this可以引用当前对象的成员变量,调用当前对象的方法。

public class Person {
   private String name;

   public Person(String name) {
       this.name = name; // 使用this关键字明确指明是成员变量name被赋值
   }

   public void sayHello() {
       System.out.println("Hello, my name is " + this.name); // 访问成员变量name
   }
}

在上面的例子中,通过this关键字引用当前对象的成员变量name,并在sayHello方法中调用。注意,这里使用this的效果和不使用this是一样的,因为name变量和sayHello方法都处于同一个对象的作用域之内。 

2. 区分局部变量和成员变量:如果方法的参数和类的成员变量同名,使用this关键字可以区分是引用方法的参数还是类的成员变量。

public class Person {
   private String name;

   public void setName(String name) {
       this.name = name; // this关键字区分成员变量name和方法参数name
   }
}

在上面的例子中,方法的参数name和类的成员变量name同名,在方法内部使用this关键字可以访问到对象的成员变量name;如果没有使用this关键字,那么方法中的name变量将会遮盖(覆盖)类的成员变量name,访问不到类的成员变量name了。使用this关键字能够明确地指明是对象的哪个成员被引用。 

3. 调用当前类的构造函数:在一个类中的构造函数中,使用this关键字可以调用同一个类的另一个构造函数。注意,this关键字只能用在构造函数中,而且必须出现在构造函数的第一条语句,即只能在一个构造函数中调用另一个构造函数。

public class Person {
   private String name;
   private int age;

   public Person() {
       this("Tom", 20); // 调用另一个构造函数初始化对象
   }

   public Person(String name, int age) {
       this.name = name;
       this.age = age;
   }
}

第一个构造函数中使用了this关键字来调用同一个类的另一个构造函数,即第二个构造函数,用来初始化成员变量。调用构造函数必须放在构造函数的第一条语句,所以this关键字只能用在构造函数中。通过使用不同的参数调用不同的构造函数,可以方便地初始化对象。

4. 传递当前对象:在某些情况下,需要将当前对象作为参数传递给另一个对象或方法,这时可以使用this关键字将当前对象传递出去。

public class Person {
   private String name;

   public void speakTo(Person person) {
       System.out.println("Hello " + person.name + ", my name is " + this.name);
   }
}

在上面的例子中,speakTo方法需要将当前对象作为参数传递给另一个Person对象,使用this关键字可以引用当前对象,然后将当前对象传递给另外一个Person对象。这里的实现是将当前对象的name属性值和传递进来的Person对象的name属性值进行输出比较,达到了给另一个对象传递当前对象的效果。 

本质:

                This关键字本质是所在方法调用者的地址值

在Java中,this关键字表示当前对象,是一个指向当前对象的引用,其本质是一个隐藏的参数。当创建一个Java对象时,会在内存中为该对象分配一块内存空间,其中存储了该对象的各个属性的值,以及指向该对象所属类的引用。当调用该对象的方法时,Java会将该对象的引用作为一个参数传递给该方法,其中,该对象的引用就是this关键字所指向的内容

在方法内部,可以使用this关键字来引用当前对象,并对其进行操作。通过this关键字,可以访问当前对象的成员变量、方法、传递当前对象给其他方法等操作。

总之,Java中的this关键字是一个指向当前对象的引用,其本质是一个隐藏的参数,用于引用当前对象并对其进行操作。


 在这里我们再详细介绍一下什么是局部变量和全局变量?

在Java中,变量分为局部变量和全局变量两种类型。

局部变量是指定义在方法体中或语句块中的变量,它只在当前方法体或语句块中有效,在方法调用结束后,局部变量的值也会被销毁。

以下是一个关于局部变量的例子:

public class Test {
   public void testMethod() {
       int x = 10; // 定义一个局部变量x
       System.out.println("x is: " + x); // 输出x的值
   }

   public static void main(String args[]) {
       Test obj = new Test(); // 创建一个对象
       obj.testMethod(); // 调用testMethod方法
   }
}

在上面的例子中,`x`是一个定义在`testMethod`方法中的局部变量。

全局变量(也叫成员变量)是指定义在类中、方法外部,没有加`static`关键字的变量。它的作用域为该类中的所有方法,即该类的对象可以访问该成员变量。

以下是一个关于全局变量的例子:

public class Test {
   int y = 20; // 定义一个全局变量y

   public void testMethod() {
       int x = 10; // 定义一个局部变量x
       System.out.println("x is: " + x); // 输出x的值
       System.out.println("y is: " + y); // 输出y的值
   }

   public static void main(String args[]) {
       Test obj = new Test(); // 创建一个对象
       obj.testMethod(); // 调用testMethod方法
   }
}

在上面的例子中,`y`是一个定义在`Test`类中的全局变量,可在`testMethod`方法中使用。在`main`方法中创建的`obj`对象就可以访问`y`变量。

总之,局部变量和全局变量是Java中两种不同的变量类型。局部变量只在定义它的方法内或语句块内有效,并且在其方法调用结束后会被销毁;而全局变量则定义在类中、方法外部,可以被类的不同方法和不同对象访问和修改。

总结:

        本篇详细的介绍了this关键字的作用和本质,希望可以加深大家对this关键字的理解认识,更加熟练的掌握java中对于this关键字的运用。

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/672857.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能python:Python编程语言的词汇量有多少?

Python编程语言的词汇量有多少? Python编程语言是一种广泛使用的高级编程语言,被广泛用于数据科学、机器学习、人工智能、Web开发、游戏开发和其他许多领域。由于Python的简单易学以及丰富的库,越来越多的人开始使用Python编程语言进行编程。…

【MongoDB】四、MongoDB副本集的部署

【MongoDB】四、MongoDB副本集的部署 实验目的实验内容实验步骤实验小结 实验目的 能够通过部署副本集理解副本集机制,从而解决大数据项目中数据丢失的问题 实验内容 环境准备:根据表中的信息完成3台MongoDB服务器的部署(XXX是姓名拼音首字母…

C语言指针初阶+进阶(看这一篇就够了)

目录 本章重点 1. 指针是什么 2. 指针和指针类型 3. 野指针 4. 指针运算 5. 指针和数组 6. 二级指针 7. 指针数组 8. 字符指针 9.数组指针 10. 指针数组 11数组传参和指针传参 12. 函数指针 13. 函数指针数组 14. 指向函数指针数组的指针 15. 回调函数 16 指针和数组面试题的解…

【从零开始学习JAVA | 第三篇】类与对象 和 封装

目录 前言: 类与对象: 封装: 总结: 前言: 从本篇开始,我们就要以面向对象编程思想来进行学习了,今天我们学习的内容是类与对象,这是JAVA中的重要知识,让我们一起来进…

docker 项目部署 后端/前端

1.前端部署 2.后端部署 问题一:build出问题 ERROR: failed to solve: failed to compute cache key: failed to calculate checksum of ref 668a7264-5d0b-45a6-b547-fa8fff014bda::g00ukurq2ipxuvrrz8rnpyskp: "/swagger2-demo-0.0.1-SNAPSHOT.jar": …

next.js博客搭建_react-markdown渲染内容(第三步)

文章目录 ⭐前言⭐引入react-markdown💖 使用markdown渲染💖 文章内容布局💖 react-syntax-highlighter代码高亮 ⭐结束 ⭐前言 大家好,我是yma16,本期给大家分享next项目中使用react-markdown渲染内容。 该系列的往期…

考研C语言第八章

结构体定义&#xff0c;初始化&#xff0c;结构体数组 结构体对齐 这个东西看着像数据库里面属性的定义&#xff0c;也像java里面的类的定义 #include <stdio.h> #include <string.h> #include <stdlib.h>struct student{int num;char name[20];char sex;i…

chatgpt赋能python:Python桌面编程:探索图形用户界面

Python桌面编程&#xff1a;探索图形用户界面 Python是一种广受欢迎的高级编程语言&#xff0c;被广泛应用于数据科学、人工智能、Web开发和自动化。但是&#xff0c;随着越来越多的应用程序向图形用户界面&#xff08;GUI&#xff09;转移&#xff0c;Python的桌面编程能力也…

datagrip 连接 phoenix

jar替换完后尽量重启datagrip. 然后重新连接即可. 不重启貌似报错... 效果:

chatgpt赋能python:Python更新界面:让你的应用更美观、更易用

Python更新界面&#xff1a;让你的应用更美观、更易用 Python是一门强大的编程语言&#xff0c;广泛应用于软件开发、数据分析、机器学习等领域。其中&#xff0c;Python的GUI开发能力也非常出色。Python支持多种GUI库&#xff0c;如Tkinter、PyQt、wxPython等&#xff0c;可以…

【C++篇】C++新增的一些基础特性

友情链接&#xff1a;C/C系列系统学习目录 知识总结顺序参考C Primer Plus&#xff08;第六版&#xff09;和谭浩强老师的C程序设计&#xff08;第五版&#xff09;等&#xff0c;内容以书中为标准&#xff0c;同时参考其它各类书籍以及优质文章&#xff0c;以至减少知识点上的…

Python--字典

Python--字典 <font colorblue>一、创建字典<font colorblue>二、访问字典元素<font colorblue>三、字典的增、删、查、改<font colorblue>1、添加元素<font colorblue>2、删除元素<font colorblue>3、查找元素<font colorblue>4、修…

Git——分布式版本控制系统

简介 Git是一个开源的分布式版本控制系统&#xff0c;可以高效的处理从小到很大的项目版本管理。 分类 集中式 SVN&#xff0c;CVS 使用单一的服务器用来管理和存储所有文件的修订版本&#xff1b;协同开发的成员拉取或提交都需连接到这台服务器&#xff1b;如果服务器宕机…

电控开关详细介绍 MOSFET

目录 NMOS MOSFET的开关模型 现实生活中MOSFET的截面图 输出特性曲线 总结 MOSFET的SCS模型 MOSFET的SR模型 进一步分析 例子 PMOS CMOS(Complementary Metal-Oxide-Semiconductor) NMOS 金属氧化物半导体场效应晶体管 这是一个什么样的结构呢&#xff1f; 对于…

2023 年6月开发者调查统计结果——最流行的技术(2)

2023 年6月开发者调查统计结果——最流行的技术&#xff08;2&#xff09; 本文目录&#xff1a; 二十三、编程、脚本和标记语言 二十四、数据库 二十五、云平台 二十六、网络框架和技术 二十七、其他框架和库 二十八、其他工具 二十九、集成开发环境 三十、异步工具 …

chatgpt赋能python:Python查错完全指南:如何快速诊断和解决常见的错误

Python查错完全指南&#xff1a;如何快速诊断和解决常见的错误 Python是一种高级编程语言&#xff0c;它被广泛用于数据科学、机器学习、Web开发和自动化等领域。虽然Python具有易于学习和易于使用的特点&#xff0c;但是在编写复杂的应用程序时&#xff0c;错误和异常情况经常…

chatgpt赋能python:Python构造图入门指南

Python构造图入门指南 Python是一种非常强大的编程语言&#xff0c;它可以用于各种任务&#xff0c;包括数据分析、机器学习和深度学习等领域。其中&#xff0c;构造图是Python在数据分析领域的一项非常重要的技术&#xff0c;本文将为大家介绍Python构造图的入门指南。 什么…

chatgpt赋能python:Python查找手机号码

Python查找手机号码 在今天的数字时代&#xff0c;手机号码已成为每个人生活中必不可少的一部分。虽然我们可以轻松地拥有一部手机&#xff0c;但是对于那些需要通过电话来联系客户、朋友或家庭成员的人&#xff0c;获取正确的手机号码就显得尤为重要。 这就是为什么Python查…

【科普知识】如何解决CANopen通信一体化伺服电机PDO无法正常使用

随着现代的自动化程度不断提高&#xff0c;一体化电机的应用正逐渐成为行业的新趋势。 一体化伺服电机是现代工业自动化系统中常用的设备&#xff0c;它集成了伺服电机、驱动器和控制器等功能&#xff0c;提供了高效、精确的运动控制。在其系统中&#xff0c;我们通常使用PDO&a…

vue封装ketcher 化学式、分子式编辑器

ketcher是一个化学结构式编辑器&#xff08;github地址&#xff09;&#xff0c;ketcher插件提供了传统的html standalone版、npm包react版&#xff0c;并没有npm包vue版&#xff0c;集成到vue的原理是将standalone版嵌到iframe中&#xff0c;通过拿到iframe中的ketcher对象&am…