JAVA中this三种方法详解
声明:this关键字必须放在非静态方法里面
this关键字代表自身,在程序中主要的使用用途有以下几个方面:
1. 使用this关键字引用成员变量
2. 使用this关键字在自身构造方法内部引用其它构造方法
3. 使用this关键字代表自身类的对象
4. 使用this关键字引用成员方法
一. 引用成员变量
在一个类的方法或构造方法内部,可以使用“this.成员变量名”这样的格式来引用成员变量名,有些时候可以省略,有些时候不能省略。首先看一下下面的代码:
/**
* 使用this引用成员变量
*/
public class ReferenceVariable {
private int a;
public ReferenceVariable(int a){
this.a = a;
}
public int getA(){
return a;
}
public void setA(int a){
this.a = a;
}
}
在该代码的构造方法和setA方法内部,都是用this.a引用类的成员变量。因为无论在构造方法还是setA方法内部,都包含2个变量名为a的变量,一个是参数a,另外一个是成员变量a。按照Java语言的变量作用范围规定,参数a的作用范围为构造方法或方法内部,成员变量a的作用范围是类的内部,这样在构造方法和setA方法内部就存在了变量a的冲突,Java语言规定当变量作用范围重叠时,作用域小的变量覆盖作用域大的变量。所以在构造方法和setA方法内部,参数a起作用。
这样需要访问成员变量a则必须使用this进行引用。当然,如果变量名不发生重叠,则this可以省略。
但是为了增强代码的可读性,一般将参数的名称和成员变量的名称保持一致,所以this的使用频率在规范的代码内部应该很多。
二. 引用构造方法(重点)
在一个类的构造方法内部,也可以使用this关键字引用其它的构造方法,这样可以降低代码的重复,也可以使所有的构造方法保持统一,这样方便以后的代码修改和维护,也方便代码的阅读。
下面是一个简单的示例:
/**
* 使用this关键字引用构造方法
*/
public class ReferenceConstructor {
int a;
public ReferenceConstructor(){
this(0);
}
public ReferenceConstructor(int a){
this.a = a;
}
}
这里在不带参数的构造方法内部,使用this调用了另外一个构造方法,其中0是根据需要传递的参数的值(这个构造方法通过this调用另外一个构造方法),当一个类内部的构造方法比较多时,可以只书写一个构造方法的内部功能代码,然后其它的构造方法都通过调用该构造方法实现,这样既保证了所有的构造是统一的,也降低了代码的重复。
在实际使用时,需要注意的是,在构造方法内部使用this关键字调用其它的构造方法时,调用的代码只能出现在构造方法内部的第一行可执行代码。这样,在构造方法内部使用this关键字调用构造方法最多会出现一次。
三. 代表自身对象
在一个类的内部,也可以使用this代表自身类的对象,或者换句话说,每个类内部都有一个隐含的成员变量,该成员变量的类型是该类的类型,该成员变量的名称是this,实际使用this代表自身类的对象的示例代码如下:
/**
* 使用this代表自身类的对象
*/
public class ReferenceObject {
ReferenceObject instance;
public ReferenceObject(){
instance = this;
}
public void test(){
System.out.println(this);
}
}
在构造方法内部,将对象this的值赋值给instance,在test方法内部,输出对象this的内容,这里的this都代表自身类型的对象。
四. 引用成员方法
在一个类的内部,成员方法之间的互相调用时也可以使用“this.方法名(参数)”来进行引用,只是所有这样的引用中this都可以省略,所以这里就不详细介绍了。
JAVA中this三种方法详解相关推荐
- eclipse java 逆向工程_Mybatis 逆向工程的三种方法详解
Mybatis 逆向工程 逆向工程通常包括由数据库的表生成 Java 代码 和 通过 Java 代码生成数据库表.而Mybatis 逆向工程是指由数据库表生成 Java 代码. Mybaits 需要程 ...
- python 命令-python解析命令行参数的三种方法详解
这篇文章主要介绍了python解析命令行参数的三种方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 python解析命令行参数主要有三种方法: ...
- 查看登陆系统用户的信息的三种方法详解
查看登陆系统用户的信息的三种方法详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.who这个命令显示可以谁在登陆,但是这个有很多的花式玩法,这个命令超简单 语法:who [O ...
- C语言求最大公约数三种方法详解
C语言求最大公约数三种方法详解 题目要求 常用写法(穷举法) 辗转相减法 辗转相除法 main函数 整体代码 题目要求 运行最大公约数的常用算法,并进行程序的调式与测试. 常用写法(穷举法) 从两个数 ...
- 新浪微博怎么推广引流,微博推广引流的三种方法详解
新浪微博怎么推广引流,微博推广引流的三种方法详解,#推广#营销 微博营销有哪些特点?#百收网SEO@千行助推 大家好,上一次内容讲了生意人如何将客户引流到自己的微信上去,受到很多朋友的喜爱,那么这一期 ...
- 网页中的三种地址详解
网页中的a标签具有地址跳转的功能,href属性指向跳转的地址. 一.三种地址模式 网络地址分为两种,一种是绝对地址,一种是相对地址. 但是相对地址又可以细分为两种,一种是基于当前目录的相对地址,一种是 ...
- 三种方法详解斐波那契数列
本文同步.md文件,在展示上会有些许问题 原始版本在语雀平台.请各位移步查阅. 代码保存在码云平台供有需要者下载阅览. 本文采用暴力递归,带备忘录的递归,以及动态规划求解斐波那契数列.不到之处,欢迎指 ...
- Php 链式执行,PHP实现链式操作的三种方法详解
本文实例讲述了PHP实现链式操作的三种方法.分享给大家供大家参考,具体如下: 在php中有很多字符串函数,例如要先过滤字符串收尾的空格,再求出其长度,一般的写法是: strlen(trim($str) ...
- 链表逆置(三种方法详解)
@Achievek 6-1 单链表逆转 (20 point(s)) 本题要求实现一个函数,将给定的单链表逆转. ##函数接口定义: List Reverse( List L ); 其中List结构定义 ...
- JS截取字符串的三种方法详解
本文详细讲解了JS截取字符串的三种方法,文中通过示例代码介绍的非常详细.对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 JS提供三个截取字符串的方法,分别是:slice(),subst ...
最新文章
- Java中 this关键字详解
- catia 无许可证服务器名称,win10升级2004后CATIA无法连接许可证服务器解决方案(2页)-原创力文档...
- [Swift]UIKit学习之UISegSmentedControl的用法
- mysql动态标签可以嵌套吗_Mysql动态嵌套游标
- python time sleep和wait_Python和硒:driver.implicitly_wait()和time.sleep()之间的区别...
- 【kafka】Kafka Fetch Session 剖析
- java8 Stream2
- RLS算法Matlab实现
- KL散度 JS散度 熵
- Apabi Reader 4.0.1正式发布!
- MySql 递归应用
- 一个程序员的科幻小说
- java and android_java jvm和android DVM区别
- Supplementary Materials for The spread of true and false news online 解读
- java中GUI中显示当前时间_【java编程】返回当地时间Clock到GUI面板Panel上
- sendfile优化文件拷贝
- uni-app--》如何制作一个APP并使用?
- 5G时代下催生了云电脑,云电脑带来了什么?
- 【车间调度】模拟退火算法求解车间调度(jobshop-3)问题【含Matlab源码 1082期】
- L版本12小时制状态栏时间不显示AM/PM mtk