IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 【开开心心学java快快乐乐写代码】this引用 -> 正文阅读

[Java知识库]【开开心心学java快快乐乐写代码】this引用

在上篇博客中为大家讲解了什么是类、什么是对象以及如何实例化一个类。那么从这篇博客开始就要深入类与对象啦。这篇博客主要会讲解一下this这个关键字以及它的用法,文章不长,依旧还是写的很详细哦,快来看看吧~

目录

1、this引用

1.1为什么要有this引用

1.2什么是this引用

1.3this引用的特性

2、this引用的三种方法

2.1 使用this引用来访问成员变量

2.2 使用this引用调用构造方法

2.3使用this引用调用成员方法


1、this引用

1.1为什么要有this引用

先来看一个日期类例子:

class Data{

    //属性
    public int year;
    public int month;
    public int day;

    //方法
    public  void setData(int y,int m,int d){
        year=y;
        month=m;
        day=d;
    }

    public void printData(){
        System.out.println(year+","+month+","+day);
    }

}
public class Test {
    public static void main(String[] args) {
        Data data1=new Data();
        Data data2=new Data();
        Data data3=new Data();
        data1.setData(2000,12,15);
        data2.setData(2001,11,05);
        data3.setData(2020,22,35);
        data1.printData();
        data2.printData();
        data3.printData();
    }

}

运行结果:?

?以上代码定义了一个日期类,然后main方法中创建了三个对象,并通过Date类中的成员方法对对象进行设置和打印,代码整体逻辑非常简单,输出也是我们需要的结果。

但是仔细一想,如果我们将形参的变量名改的和成员变量名一样了呢?

比如我们将Date类中的setDate()方法不小心写成了这个样子呢:

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

再来看一下输出结果:

这个输出结果就不是我们所需要的了。 可是为什么会这样呢?

我们可以发现,就拿year这个变量来说,存在成员变量year和方法setDate()中的参数year,成员变量中变量year的作用域是整个类,而方法setDate()中的参数year的作用域就只是在方法setDate()内部,因此可以发现两个year的作用范围有了冲突

Java语言规定当作用范围小的变量与作用范围大的变量有重叠部分时,作用域小的变量会覆盖作用域大的变量。但是这种情况往往是我们不想要的,我们不希望谁去覆盖谁,为了解决这种问题,就要用到this这个关键字。这种情况下需要访问成员变量a则必须使用this进行引用.当然,如果变量名不发生重叠,则this可以省略。但是为了增强代码的可读性,一般将参数的名称和成员变量的名称保持一致,所以this的使用频率在规范的代码内部应该很多。

1.2什么是this引用

java编译器给每一个成员方法都增加了一个隐藏的引用类型参数,该引用参数指向了当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有对成员变量的操作,都是通过该引用去访问。只不过该引用对用户来说是透明的,用户不需要进行传递,编译器会自己加上。

1.3this引用的特性


(1) this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型。
(2)this只能在"成员方法"中使用。
(3)在"成员方法"中,this只能引用当前对象,不能再引用其他对象,具有final属性。
(4) this是“成员方法”第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法对象的引用传递给该成员方法,this负责来接收。

下图中的Date类也是可以通过编译的

2、this引用的三种方法

2.1 使用this引用来访问成员变量

class Data{

    public int year;
    public int month;
    public int day;

    public  void setData(int year,int month,int day){
        this.year=year;
        this.month=month;
        this.day=day;
    }

}

2.2 使用this引用调用构造方法

class Ts{
? ? public Ts(){

? ? //调用含两个参数的构造方法
? ? ? ? this(10,20);
? ? }
? ? public Ts(int a,int b){
? ? ? ? System.out.println("a+b="+(a+b));
? ? }

}
public class Test {
? ? public static void main(String[] args) {
? ? ? ? Ts ts=new Ts();

? ? }
}

运行结果:

?

注意:

(1)只能在构造方法中用this()调用其他构造方法,不能在成员方法中使用this()。

(2)this只能出现在构造方法的第一行,且只能出现一次。

(3)不能形成环,也就是不能在一个类中的两个构造方法中使用this()互相调用。

2.3使用this引用调用成员方法

class Data{
    public int year;
    
    public  void setData(int year,int month,int day){
        this.year=year;       
    }
    public void printData(){
        System.out.println(this.year);
    }
    public void printData1(){
        this.printData();
    }
}

注意:在printData1()方法中通过this.printData1()访问printData()方法,注意此处的this关键字可以不写,效果是一样的。?

以上就是我要今天分享的内容啦,后续我还会继续更新的哒,常看我的博客会学到很多知识哦?

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-04-06 16:04:04  更:2022-04-06 16:04:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:16:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码