何为this引用:

this引用指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过该引用去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。

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引用的是调用成员方法的对象

特别是在成员方法中形参名和成员变量(属性)的名字一样的时候一定要用this引用,否则该成员方法(行为)将与成员变量(属性)无关。因为由于局部变量优先原则,该行为中的参数已经与属性无关,所以属性的值都是默认值,并没有得到赋值。

this引用的3种用法:

1、this.成员变量

该用法也是最为普遍的一种用法,在上面的代码中也已经展示过如何使用。大部分时候,普通方法访问其他方法、成员变量时无须使用 this 前缀,但如果方法里有个局部变量和成员变量同名,但程序又需要在该方法里访问这个被覆盖的成员变量,则必须使用 this 前缀。

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

this.year=year语句表示一个赋值语句,等号左边的this.year是指当前对象具有的变量year,等号右边的year表示参数传递过来的数值。

提示:当一个类的属性(成员变量)名与访问该属性的方法参数名相同时,则需要使用 this 关键字来访问类中的属性,以区分类的属性和方法中的参数。

2、this.成员方法

this 关键字最大的作用就是让类中一个方法,访问该类里的另一个方法或实例变量。

这是一个Dog类

public class Test {public static void main(String[] args) {Dog dog=new Dog();dog.setDog("旺财","白色");dog.wag();dog.bark();}
}
class Dog{public String name;public String color;public void bark(){System.out.println(name+"汪汪叫");}public void wag(){System.out.println(name+"摇尾巴");}public void setDog(String name,String color){this.name=name;this.color=color;}
}

 那么如何在一个方法里面调用另一个方法呢?

public class Test {public static void main(String[] args) {Dog dog=new Dog();dog.setDog("旺财","白色");dog.wag();// dog.bark();}
}
class Dog{public String name;public String color;public void bark(){System.out.println(name+"汪汪叫");}public void wag(){this.bark();System.out.println(name+"摇尾巴");}public void setDog(String name,String color){this.name=name;this.color=color;}
}

 当把this引用去除之后改成这样:

    public void wag(){bark();//this.bark();System.out.println(name+"摇尾巴");}

也是可以实现的。

大部分时候,一个方法访问该类中定义的其他方法、成员变量时加不加 this 前缀的效果是完全一样的。省略 this 前缀只是一种假象,虽然程序员省略了调用 bark() 方法之前的 this,但实际上这个 this 依然是存在的。

注意:对于 static 修饰的方法而言,可以使用类来直接调用该方法,如果在 static 修饰的方法中使用 this 关键字,则这个关键字就无法指向合适的对象。所以,static 修饰的方法中不能使用 this 引用。并且 Java 语法规定,静态成员不能直接访问非静态成员。

3、this();访问构造方法

this( ) 用来访问本类的构造方法(构造方法是类的一种特殊方法,方法名称和类名相同,没有返回值,且有无参构造方法和有参构造方法)

下面定义一个 Student 类,使用 this( ) 调用构造方法给 name 赋值,Student 类的代码如下所示:


public class Student {String name;// 无参构造方法(没有参数的构造方法)public Student() {this("张三");}// 有参构造方法public Student(String name) {this.name = name;}// 输出name和agepublic void print() {System.out.println("姓名:" + name);}public static void main(String[] args) {Student stu = new Student();stu.print();}
}

注意:

this()不能在普通方法中使用,只能在构造方法中使用。

this()在构造方法中的时候必须是第一条语句。

this引用的特点:

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

如最上面的Date类:

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

这样也是可以编译通过的。

【Java SE】this引用注意事项相关推荐

  1. java se 导原码_Java SE 8新功能导览:Java开发世界中的重大变化

    java se 导原码 我很自豪,像其他专业团队成员一样,是采用OpenJDK的成员之一,但是从过去8个月就加入了,我们经历了Java SE 8 开发,编译,编码,讨论等各个阶段,直到将其付诸实践为止 ...

  2. Java SE 8新功能导览:Java开发世界中的重大变化

    与其他专业团队成员一样,我是采用OpenJDK的成员之一,但是从最近8个月开始加入,我们经历了Java SE 8 开发,编译,编码,讨论等各个阶段,直到将其付诸实践为止. . 它于2014年3月18日 ...

  3. Java SE 8 新特性之旅 : Java开发世界的大变动

    我很自豪的成为了adopt-OpenJDK的一员,像其他专业团队成员一样,但是我只刚加入了8个月,我们一同经历了Java SE 8 的开发.编译.编码.讨论--等等,直到JDK上线.Java SE 8 ...

  4. JAVA SE、EE、ME,JRE、JDK,基本数据类型,访问修饰符、函数、封装的概念、UML类图、构造方法、this关键字、static关键字、方法重载、方法重写、包(packahe)

    运行第一个JAVA程序: 这里使用的开发环境是eclipse,新建一个java工程,然后可以看到src这个是存放java代码的地方,然后在src文件右击新建一个class(类),然后可以看到下图,同样 ...

  5. Java SE 8新特性导览:使用Lambda Expression进行函数式编程

    " Java SE 8新功能浏览 "系列的这篇文章将深入了解Lambda表达式 . 我将向您展示Lambda表达式的几种不同用法. 它们都具有功能接口的共同实现. 我将解释编译器如 ...

  6. Java SE 基础(一)

    Java 0.基础内容 1.程序 计算机在执行某些操作或解决某些问题时,而编写的一系列有序指令的集合 2.java历史 1995年发布第一版 java 8.java 11.java 16为长期支持版 ...

  7. JAVA SE基础笔记

    第一天  JDK安装.快捷键.JAVA语言特点 1.Java语言的概述 1.1 Java语言的背景 Java语言诞生于1995年,在编程语言排行榜占据重要的地位. Java语言之父是高斯林,以前隶属于 ...

  8. Java SE笔记(其三)

    IO流 File类 java.io.File类:文件和文件目录路径的抽象表示形式,与平台无关 File 能新建.删除.重命名文件和目录,但 File 不能访问文件内容本身.如果需要访问文件内容本身,则 ...

  9. Java SE 基础知识汇总

    目录 一.Java概述 1.1 Java语言背景 1.2 Java语言的三个版本 1.3 Java语言的跨平台原理 1.4 JRE和JDK 1.5 DOS命令 二.Java环境搭建 2.1 环境变量的 ...

  10. Java SE 基础入门知识

    系列文章目录 提示:阅读本章之前,请先阅读目录 文章目录 系列文章目录 前言 Hello world 注意事项 注释 关键字 变量命名 强类型语言 八大数据类型 字节类型和单位 进制转换 完全避免使用 ...

最新文章

  1. “chaos”的算法--之链表面试题
  2. SAS、R以及SPSS的比较__统计语言大战
  3. 教你两种黑掉“人工智能”的方法
  4. 无法消除恐惧?Nature发现肠道菌与大脑间更多的神秘联系...
  5. linux 软件包的安装
  6. Spring2 Hibernate3 Junit 应用示例1
  7. 阻止中文输入法输入拼音的时候触发input事件
  8. 数据预处理之将类别数据数字化的方法 —— LabelEncoder VS OneHotEncoder
  9. 用gulp计算合金弹性常数_考研结构力学 用3种方法解东南大学位移法大题
  10. 如何实现批量替换文件夹名称?
  11. 双下划线一粗一细怎么加_word 下划线 一粗一细
  12. 媒体查询之响应式布局
  13. python2个子线程等待_Python的并发并行[1] - 线程[3] - 多线程的同步控制
  14. 离散数学——成真赋值与成假赋值
  15. 前端同学需要知道的产品原型绘制技巧
  16. 把方形头像切成圆形的头像工具类
  17. BISTML-CRF项目源码
  18. JAVA并发编程的艺术-读书笔记
  19. 植物大战僵尸经典android,植物大战僵尸经典版
  20. 《Python数据分析与挖掘实战》第10章(下)——DNN2 筛选得“候选洗浴事件”3 构建模型

热门文章

  1. 【BZOJ2440】【中山市选2011】完全平方数
  2. irobot擦地机器人故障_简单修理irobot 380T拖地机器人 后退转圈故障
  3. 好玩的计算机操作,windows10系统功能详解,各种有趣好玩的功能,你是否了解
  4. JAVA练习59-连续子数组的最大和
  5. 一般纳税人给小规模纳税人一般都是开普通发票
  6. js 正则 限制 input 只能输入数字,不能输入特殊符号,保留两位小数等效果
  7. 深入理解:为什么要使用工厂模式?
  8. Nokia官方技术论坛
  9. godot3.4节点按照键盘方向键旋转和移动
  10. CUDA:cudaMalloc vs cudaMallocHost