但是如果我将构造函数中的语句更改为Java,则Java足够聪明以知道发生了什么

bar = bar;

假! 它编译,但它不会做你认为它的作用!

至于何时使用它,很多是个人喜好。 我喜欢在我的公共方法中使用this ,即使是没有必要的,因为这是接口发生的地方,很高兴声明什么是我的,什么不是。

作为参考,您可以查看关于this.subject的Oracle Java教程:-)

其实

baz = baz

会提出这个警告

对variablesbaz的赋值没有效果

所以你认为是错误的,本地范围覆盖类属性,所以你必须明确地使用this关键字来指定variables的类属性。

否则,分配给variables的variables只是作为parameter passing的variables,而类别被忽略。 这就是为什么this是有用的,这不是一个可读性的事实,这是明确地决定你在说什么baz的事实。

我会说

在不使用它的地方使用它会引起歧义(或编译器警告,这是更重要的),否则就把它留下。 既然其目的正是为了解决默认假设(首先检查本地,然后检查类属性)是否不明确。

当你有一个与字段同名的参数时,你应该使用它,否则你会遇到问题。 它会编译,但不一定会做你想要的。

至于其他地方,除非为了可读性的缘故,否则不要使用它。 如果你在任何地方都使用它,你的代码中的20%将由“this”组成。

this关键字引用了某个方法被调用的类的Object。

例如:

public class Xyz { public Xyz(Abc ob) { ob.show(); } } public class Abc { int a = 10; public Abc() { new Xyz(this); } public void show() { System.out.println("Value of a " + a); } public static void main(String s[]) { new Abc(); } }

在Abc()我们调用需要Abc Class对象的Xyz() 。所以我们可以通过this而不是新的Abc() ,因为如果我们在这里传递新的Abc() ,它会一次又一次地调用自己。

我们也用这个来区分方法的类和局部variables的variables。 例如

class Abc { int a; void setValue(int a) { this.a = a; } }

这里this.a是指Abc类的variablesa。 因此,与使用新的Abc().a;具有相同的效果Abc().a; 。

所以你可以说this是指当前课程的对象。

在显式的构造函数调用中使用这个关键字是很常见的。 你可以从文档中看到一个例子。

public class Rectangle { private int x, y; private int width, height; public Rectangle() { this(0, 0, 1, 1); } public Rectangle(int width, int height) { this(0, 0, width, height); } public Rectangle(int x, int y, int width, int height) { this.x = x; this.y = y; this.width = width; this.height = height; } ... }

public Foo(Bar bar) { this.bar = bar; }

是不一样的

public Foo(Bar bar) { bar = bar; }

在第二种情况下,作用域中的bar是参数,所以将其分配给自己。 this.bar保持为null 。

这是一种个人喜好 – select一种风格,坚持下去。 我个人使用this但其他人认为这是多余的。

根据惯例,您可以使用它来提高可读性。 它强调这是一个对象variables的事实。

我也喜欢使用与variables同名的setter参数(在方法签名中看起来更好)。 在这种情况下你需要this 。

我总是尝试在本地类对象上使用this关键字。

我用它在视觉上提醒我,如果一个对象是静态对象或类对象。

它帮助我和编译器区分方法参数和本地类对象。

public void setValue(int value){ this.value = value; }

它可以帮助我在视觉上提醒我内部/嵌套/匿名类中是否存在这样一个局部对象,以区分它与封装类对象。 因为如果没有this前缀,我的约定会提醒我这是封装类的一个对象

public class Hello{ public int value = 0; public boolean modal = false; public class Hellee{ public int value = 1; public getValue(){ if (modal) return 0; return this.value; } } }

void set(int real) { this.real = real; }

这里有一个关键字,当有实例variables和本地variables相同时。

另一个用途是构造函数重载。 它可以在重载的构造函数中调用构造函数。

个人喜好,但我用它来解决歧义,我想在极less数情况下,很明显,指定的variables是一个字段。 有一些项目在人们使用“this.field”每一个字段的参考。 我发现这种做法在视觉上分散注意力,让人讨厌,但是你应该准备好偶尔看看这样的代码。

我偷偷地以为地狱里有一个特别的地方,那些编写500行的,有275个这个关键字的人,但是这个风格是在一些开源项目中find的,所以我猜也是这样。

将其用于克隆对象(通过将自身的引用传递给复制构造函数)。

对inheritanceCloneable对象有用。

public Foo implements Cloneable { private String bar; public Foo(Foo who) { bar = who.bar; } public Object getClone() { return new Foo(this); //Return new copy of self. } }

java implements this,Java – 何时使用“this”关键字相关推荐

  1. implements在java,implements在java中实现接口的方法

    本教程操作环境:windows7系统.java10版,DELL G3电脑. 1.概念 (1)关键字implements是一个类,实现一个接口用的关键字,它是用来实现接口中定义的抽象方法. (2)接口在 ...

  2. java面试题6 牛客:哪个关键字可以对对象加互斥锁?

    哪个关键字可以对对象加互斥锁?() A synchronized B volatile C serialize D static synchronized的4种用法 1.方法声明时使用,放在范围操作符 ...

  3. 接口implements(Java)

    接口implements(Java) 接口的作用:1.约束2.定义一些方式,让不同的人3.public abstract4.public static final5.接口不能被实例化.接口中m没有构造 ...

  4. Java implements和extends的区别

    Java implements和extends的区别 implements 关键字implements是一个类,实现一个接口用的关键字,它是用来实现接口中定义的抽象方法.实现一个接口,必须实现接口中的 ...

  5. java implements用法_JAVA中implements的用法

    implements使用 interface Sport { void run(); void jump(); } class Athlete implements Sport { public vo ...

  6. Java查漏补缺(08)关键字:static、单例设计模式、理解main方法、类的成员之四:代码块、final关键字、抽象类、接口、内部类、枚举类、注解、包装类

    Java查漏补缺(08)关键字:static.单例设计模式.理解main方法.类的成员之四:代码块.final关键字.抽象类.接口.内部类.枚举类.注解.包装类 本章专题与脉络 1. 关键字:stat ...

  7. java语言语法--- Java标识符(标识符命名规则)、Java关键字、Java变量(变量的声明、赋值、使用)和常量(字符常量、字面常量)(包括Java字节码文件反汇编命令javap)

    java语言语法- Java标识符.Java关键字.Java变量和常量(包括Java字节码文件反汇编命令javap) 1.标识符 (1)读音:biao zhi fu (2)什么是标识符? (摘自百度百 ...

  8. JAVA入门级教学之(标识符与关键字)

    目录 JAVA入门级教学之(标识符与关键字) 1.什么是标识符? 2.标识符的命名规则? 3.标识符的命名规范? 4.严格遵守规则和规范: 在java里的关键字都是小写的 JAVA入门级教学之(标识符 ...

  9. Java多线程学习(二)synchronized关键字(1)

    转载请备注地址: https://blog.csdn.net/qq_34337272/article/details/79655194 Java多线程学习(二)将分为两篇文章介绍synchronize ...

最新文章

  1. ftp 追加远程文件_ftp上传,完成ftp定时上传、下载只需3步
  2. TensorFlow超级指南 | 你能想到的TF教程和资源都在这里(附链接视频)
  3. 面对这么多困境,梅耶尔还能怎么应对?
  4. Elasticsearch的Groovy Script自定义评分检索
  5. macbook 下载时睡眠_MacBook进入睡眠状态时如何自动使其静音
  6. PWN-PRACTICE-CTFSHOW-4
  7. ASP.NET 3.5中的ListView控件和DataPager控件(一)
  8. [基础]sizeof和strlen
  9. android 循环引用,spring循环引用
  10. webx mysql_Webx项目的获取与验证
  11. 编译原理考试知识点总结
  12. 一元线性回归:Excel、SPSS、Matlab三种方法实现
  13. 批处理|测试工具|局域网速度测试/网络上传与下载速度测试
  14. matlab编辑器背景颜色,matlab编辑器颜色风格设置
  15. 红帽子linux2017安装,Firefox 49发布 - 在RedHat和Debian系统上安装
  16. python怎么换行输入print_python中print换行的方法
  17. windows11系统下vone客户端连接服务器失败,请确认网络连接是否正常解决方案
  18. 吴恩达 深度神经网络,吴恩达神经网络课程
  19. 深耕边缘计算 揭秘阿里云边缘云网一体化的技术实践
  20. Redis过期策略---实现原理

热门文章

  1. windows 快捷调用
  2. 黄金分割法与单峰函数求极值
  3. vim 系统剪切板及 ubuntu 无法使用 vim 系统剪贴板(或 :reg 无+号寄存器)
  4. linux播放光盘花屏,求助fedora光盘安装花屏怎么解决
  5. react ui框架_Web开发 React 学习(二十)连载基础篇大结局
  6. python自动化办公真的好用吗-用 Python 自动化办公,我与大神之间的差距一下就拉小了...
  7. python 菜鸟-Python IDE
  8. 免费python课程排行榜-Python爬虫学习排行榜
  9. python怎么读写文件-python读写文件
  10. python基础知识-Python学习--最完整的基础知识大全