java this作为参数_Java this关键字
在 Java 中,this 关键字指的是当前对象的引用,它有 5 种用法,下面分别给大家介绍一下。
1、消除语法歧义(最常用)
这种情况一般出现在有参构造器中,当构造器的参数与类的属性(或成员变量)名称完全相同时,导致 Java 编译器无法区别,从而产生语法歧义,编译报错。
解决办法就是使用 this 关键字,如下代码:
public class Man {
private int age;
private String name;
public Man (int age, String name) {
this.age = age;
this.name = name;
}
}
Man 类有两个成员变量,分别是 age 和 name,在使用有参构造器的时候,如果参数名和成员变量的名字相同,就需要使用 this 关键字消除歧义。
其中 this.age 是指类的成员变量,age 是指有参构造器的参数。
2、引用类的其他构造器
当一个类的构造器有多个,可以使用 this 关键字在一个构造器内部调用其他构造器,从而减少代码量
比如说,在无参构造器中调用有参构造器,如下代码:
public class Man {
private int age;
private String name;
public Man(int age, String name) {
this.age = age;
this.name = name;
}
public Man() {
this(23, "张三"); //显示默认构造器调用有参构造器
}
}
也可以在有参构造器中调用无参构造器,如下代码:
public class Man {
private int age;
private String name;
public Man(int age, String name) {
this(); // 有参构造器内部调用显式默认构造器
this.age = age;
this.name = name;
}
public Man() {
}
}
需要注意的是,Java 语法要求 this() 必须是构造器方法体中的第一条语句,否则就会报错。不信,你可以自己试一试哈。
3、作为方法参数传递
先看下面的代码
public class Test {
public Test() {
print(this);
}
private void print(Test test) {
System.out.println("print 方法:" + test);
}
public static void main(String[] args) {
Test test = new Test();
System.out.println("main方法:“+test);
}
}
我在显式默认构造器中调用了 print( ) 方法,然后把 this 关键字作为参数传递给该方法,接着在 print( ) 方法中打印 this 关键字的值。在 程序入口 main() 方法中,实例化 Test 对象,然后同样打印对象名的值。
来打印看一下结果:
print方法: com.cmower.baeldung.this1.ThisTest@573fd745
main方法:com.cmower.baeldung.this1.ThisTest@573fd745
从结果中可以看得出来,this 关键字和 test 对象名都指向同一个对象的引用(或地址),而那个对象就是使用 new 关键字创建的 test 对象。
4、链式调用
学过 JavaScript,或者 jQuery 的读者可能对链式调用比较熟悉,类似于 a.b().c().d(),仿佛能无穷无尽调用下去。
在 Java 中,也可以使用 this 关键字编写链式调用,代码如下:
public class Man {
private int age;
private String name;
public Writer() {
}
public Man SetName(String name) {
this.name = name;
return this;
}
public Man SetAge(String age) {
this.age = age;
return this;
}
}
这时候,创建 Man 对象就可以通过链式调用的方式设置姓名和年龄
Man man = new Man();
man.setName("张三“).setAge(23);
5、在内部类中访问外部类对象
自从 Java 8 的函数式编程出现后,就很少用到 this 在内部类中访问外部类对象了
public class Test {
private String name;
class InnerClass {
public InnerClass() {
Test test = Test.this;
String name = test.name;
}
}
}
在内部类 InnerClass 的构造方法中,通过外部类.this 可以获取到外部类对象,然后就可以使用外部类的成员变量了,比如说 name。
6、总结
以上 5 种 this 关键字的使用没必要全部掌握,很多用法实际项目开发中很少或根本用不到,所以仅作了解而已即可。毕竟我们学 Java 是为了开发,应该关注使用最频繁的用法,如果花费太多精力去研究语言本身的各种稀奇古怪的用法,简直是本末倒置。
java this作为参数_Java this关键字相关推荐
- java 接口 this参数_Java BiFunction 接口实例
原标题:Java BiFunction 接口实例 www.baeldung.com/java-bifunction-interface 1. 简介 Java8 引入了函数式编程,可以把函数作为参数传入 ...
- java 命令行参数 _java命令行参数
原标题:java命令行参数 命令行参数就是main方法里面的参数String[] args他就是一个数组,args只是数据类型的一个名称,就是一个数组的变量,名称无所谓,类型没变就行了.这个就是程序的 ...
- java方法可选参数_Java可选参数
java方法可选参数 在Java类中设计方法时,某些参数对于其执行而言可能是可选的. 无论是在DTO,胖模型域对象还是简单的无状态服务类中,可选方法参数都是常见的. 从本文中, 您将学习如何在Java ...
- java变长参数_Java可变长度参数
术语"varargs"是"variable-length arguments"(可变长度参数)的缩写. 可变长度参数声明一个接受可变数量的参数(或参数)的方法或 ...
- java 什么是参数_java中的参数是什么?
本篇文章介绍了Java中什么是参数,以及参数的两种类型及他们之间的关系,希望对学习Java开发的同学有帮助. java中的参数是什么? 参数分两种:一种叫形式参数,一种叫实际参数 方法名后面括号里面用 ...
- java -jar 默认参数_JAVA入门学习指南,建议收藏
如果你不懂Java 并且想认真学习接触了解一下Java的语法,建议把这篇文章收藏了,多看几遍,应该可以初步掌握Java 大部分基础的语法 . 让我们出发吧!ps:本文有点长,耐心阅读 . 〇,编程环境 ...
- java super父类方法_java super关键字,super调用父类构造方法详解
因为子类不可以继承父类的构造方法,所以,想要调用父类的构造方法的话,那么就可以使用得到super关键字下面的话就来对这个方面做一下详细的讲解. super关键字能够用来访问父类的构造方法.普通方法和属 ...
- java方法的参数_Java方法参数
Java方法参数 在程序设计语言中如何将参数传给方法(或函数): 按值调用:方法接受的是调用者提供的值 按引用调用:方法接受的是调用者提供的地址 Java程序设计语言总是采用按值调用(方法得到的是所有 ...
- java客户端传递参数_java – 在客户端传递参数
我使用RESTful Web服务.在这个Web服务中,我必须传递一个我想要保存为参数的bean. 这是服务器代码: @POST @Consumes(MediaType.APPLICATION_JSON ...
最新文章
- List再整理,从代码底层全面解析List(看完后保证收获满满)
- 求主析取范式与主合取范式
- 阿里达摩院《机器学习算法学习指南》火了,限时开放下载!
- 【转】Android编码规范建议18条
- 在webpack中使用eslint配置(详细教程)-js教程-PHP中文网
- 科研项目 | 深度参与前沿课题研究,全英华人教授协会(ABCP)资深学者亲授
- 查看linux网络带宽
- git怎么操作会丢失自己的代码_git找回丢失的代码
- 第一次正面交火!版主说博文里有广告!
- php试题多选,php考试题 (选择题).doc
- Web性能瓶颈查找经验总结
- 《Lua程序设计》第1章 开始 学习笔记
- 理解C语言——从小菜到大神的晋级之路(9)——多维数组
- 自适应平台AUTOSAR(Adaptive Platform AUTOSAR)平台设计(6)——通信管理
- 运维简历怎么写项目描述_简历中的项目描述
- WINDOWS 7 PRO X64 2015年9月增量补丁包微软官方下载地址
- [GUET-CTF2019]BabyRSA(p,q灵活应用)
- 商品id- item_id /条形码/skuid
- 记录--Spyder打开时出现“An error occurred while starting the kernel“
- Dell 730xd 加外部硬件 风扇变快