返回顶部
首页 > 资讯 > 后端开发 > Python >Javathis关键字的引用详解
  • 448
分享到

Javathis关键字的引用详解

2024-04-02 19:04:59 448人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录为什么要有this引用?什么是this引用this引用的特性为什么要有this引用? 我们先看一段代码示例 public class Date { public in

为什么要有this引用?

我们先看一段代码示例


public class Date {
    public int year;
    public int month;
    public int day;
    
    public void setDay(int y,int m,int d){
        year = y;
        month = m;
        day = d;
    }
    
    public void printDate(){
        System.out.println(year + "/" + month + "/" + day);
    }
    public static void main(String[] args){
        //构造三个日期类型的对象
        Date d1 = new Date();
        Date d2 = new Date();
        Date d3 = new Date();
       
        //对d1,d2,d3的日期进行设置
        d1.setDay(2022,3,25);
        d2.setDay(2022,3,26);
        d3.setDay(2022,3,27);
        
        //打印日期中的内容
        d1.printlnDate();
        d2.printlnDate();
        d3.printlnDate();
        
    }
}

以上代码定义了一个日期类,然后main方法中创建出了三个对象,并且通过Date类中的成员方法对对象进行设置和打印,代码逻辑没有任何问题
但是有两个小细节
⚠️形参名不小心和成员变量名相同


public void setDay(int year,int month,int day){
    year = year;
    month = month;
    day = day;
}

这个方法中,形参名和对象的成员变量名重复了,编译器也懵了,不知道谁给谁赋值
⚠️三个对象都在调用setDate和printDate方法,但是两个方法中没有任何有关对象的说明,setDate和printDate方法是如何寻找到引用自己的对象,并且去调用这个对象的数据的呢?(这段字有点绕,大家好好品一品)
那么,this就是幕后操纵者

什么是this引用

Java编译器给每个“成员方法”增加了一个隐藏的引用类型参数,该引用参数指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过该引用去访问的。只不过所有的操作对用户来说都是透明的,用户不需要在调用方法的时候去刻意得传入对象的地址值或是引用变量,编译器帮你自动完成。



public class Date {
    public int year;
    public int month;
    public int day;
    
    public void setDay(int year,int month,int day){
        this.year = year;
        this.month = month;
        this.day = day;
    }
    public void printDate(){
        System.out.println(this.year+"/"+this.month+"/"+this.day);
    }
    
}

⚠️:this引用的是调用成员方法的对象
这里我们填上main方法之后再来观察一下


public static void main(String[] args) {
        Date d = new Date();
        d.setDay(2020,9,15);
        d.printDate();
    }

image.png

我们进入调试后,首先程序执行创造对象的代码,我们可以看到这里的this存了一个地址值

image.png

然后我们继续

image.png

当程序进行到d.setDay这一行的时候,我们就可以发现了,d这个引用变量指向的对象地址值也是Date@701
说明什么,说明this和d引用的都是同一个对象

image.png

this引用的特性

  • this的类型:对应类类型引用,即那个对象调用就是哪个对象的引用类型
  • this只能再“成员方法”中使用
  • 在“成员方法”中,this只能引用当前对象,不能再引用其他对象了,具有final属性(后面解释)
  • this是“成员方法”第一个隐藏的参数,编译器会自动传递,再成员方法执行的时候,编译器会负责调用成员方法对象的引用传递给该成员方法,this负责来接受,就像上图一样,

image.png

感谢阅读,希望能帮到你

到此这篇关于Java this关键字的引用详解的文章就介绍到这了,更多相关Java this内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Javathis关键字的引用详解

本文链接: https://lsjlt.com/news/144548.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Javathis关键字的引用详解
    目录为什么要有this引用?什么是this引用this引用的特性为什么要有this引用? 我们先看一段代码示例 public class Date { public in...
    99+
    2024-04-02
  • C++ 右值引用与 const 关键字详解
    C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,const关键字是一种修饰符。修饰符本身,并不产生任何实际代码。就 const 修饰符而言,它用来告...
    99+
    2024-04-02
  • 详解C++ 左值引用与 const 关键字
    左值引用是已定义的变量的别名,其主要用途是用作函数的形参,将 const 关键字用于左值引用时,其在初始化时可接受的赋值形式变得更加广泛了,这里来总结一下。 左值引用是已定义的变量的...
    99+
    2024-04-02
  • 一文详解C++中的引用与关键字auto
    目录一.引用1.引用的概念2.引用的使用和问题3.引用与指针的比较二.关键字auto一.引用 1.引用的概念 引用就是给一个已经存在的变量取一个别名,与变量共用一段内存空间。注意引用...
    99+
    2023-05-16
    C++ 引用 关键字auto C++引用 C++ 关键字auto
  • Javasuper关键字的用法详解
    目录super关键字的三种用法:1. super.成员变量2. super.成员方法3. super():调用父类中的构造方法3.1.1 隐式调用父类无参数构造方法super()3....
    99+
    2024-04-02
  • SQL关键字详解
    当前市场中,数据库在互联网整个技术链中的重要性是亘古不变的,站在实现业务功能的角度来说我们最常用的就是与数据库和缓存进行交互,而最终持久化存储最常见的依旧是关系型数据库。数据库中我们做常用的就是SQL基本查询语言,甚至有些人认为数据库就是S...
    99+
    2023-10-07
    数据库 mysql
  • c++关键字const的用法详解
    目录C语言const的用法1、指向常量的指针变量const int *p指针指向int a;2、常指针(常地址)int * const p指针指向int a;3、指向常量的常指针co...
    99+
    2024-04-02
  • C++ explicit关键字的使用详解
    在C++中,我们有时可以将构造函数用作自动类型转换函数。但这种自动特性并非总是合乎要求的,有时会导致意外的类型转换,因此,C++新增了关键字explicit,用于关闭这种自动特性。即...
    99+
    2024-04-02
  • Golang关键字defer的用法详解
    目录1. defer的简单介绍与使用场景2. defer在return执行的时机3. 小结1. defer的简单介绍与使用场景 defer是Go里面的一个关键字,用在方法或函数前面,...
    99+
    2023-05-18
    Golang关键字defer使用 Golang defer使用 Golang defer
  • Java this关键字的使用详解
    目录1. 先看一段代码,并分析问题2. 深入理解 this3. this 的注意事项和使用细节4. this 的案例1. 先看一段代码,并分析问题 public class ...
    99+
    2024-04-02
  • Java super关键字的使用详解
    目录1.super介绍2.super的基本使用3.子类和父类方法的调用细节4.super和this的区别1.super介绍 我们可以通过super关键字来实现对父类成员的访问,用来引...
    99+
    2024-04-02
  • 详解Java的static关键字
    文章目录 🎄静态方法🌺静态方法和非静态方法对比🛸静态方法实例🛸非静态方法实例 🌹static关键字⭐static变量⭐static代码块 ...
    99+
    2023-12-22
    java 开发语言 static 静态方法
  • 详解JS中continue关键字和break关键字的区别
    目录1.框架2.简单介绍3.代码演示4.演示break1.框架 <!DOCTYPE html> <html> <head> ...
    99+
    2022-11-13
    JS continue break区别 JS continue break
  • 详解Java关键字final
    目录一、常见问题二、final修饰类三、final修饰方法四、final方法是可以被重载的五、修饰变量六、static final七、black final八、final域重排序规则...
    99+
    2024-04-02
  • Java 关键字:synchronized详解
    synchronized详解 基本使用源码解析常见面试题好书推荐 基本使用 Java中的synchronized关键字用于在多线程环境下确保数据同步。它可以用来修饰方法和代码块 当一...
    99+
    2023-10-20
    java 开发语言 并发编程 JUC synchronized 原力计划
  • MySQL中ESCAPE关键字的用法详解
    MySQL转义 转义即表示转义字符原来的语义,一个转义字符的目的是开始一个字符序列,使得转义字符开头的该字符序列具有不同于该字符序列单独出现时的语义。 MySQL中,转义字符以“\”开头,编程中常见的转义字符,在M...
    99+
    2022-05-30
    MySQL ESCAPE关键字 MySQL ESCAPE
  • Python 中的with关键字使用详解
    在 Python 2.5 中, with 关键字被加入。它将常用的 try ... except ... finally ... 模式很方便的被复用。看一个最经典的例子: with open('file...
    99+
    2022-06-04
    详解 关键字 Python
  • 详解怎么用Java的super关键字
    Java的super关键字 当子类重写父类的方法后,子类对象将无法直接访问父类被重写的方法。为了解决这个问题,在Java中专门提供了一个super关键字来访问父类的成员,例如访问父类...
    99+
    2024-04-02
  • JavaScript中的this关键字用法详解
    目录this的绑定call与apply当方法失去主语的时候,this不再有?不可见的调用总结先举一个生活例子: 小明正在跑步,他看起来很开心 这里的小明是主语,如果没有这个主语,那么...
    99+
    2023-05-19
    JavaScript this关键字 JavaScript 关键字 JavaScript this
  • Kotlinthis关键字的使用实例详解
    目录this可以用来访问类的成员使用this访问类实例二级构造函数的委托在 Kotlin 中,this 关键字允许我们引用一个类的实例,该类的函数恰好正在运行。此外,还有其他方式可以...
    99+
    2023-02-17
    Kotlin this关键字 Kotlin this的使用
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作