this在Java中使用关键字的最佳做法是什么?例如,我有以下类:
class Foo {
Bar bar;
public Foo(Bar bar) {
this.bar = bar;
}
}
Run Code Online (Sandbox Code Playgroud)
这很好,但是如果我将构造函数中的语句更改为,Java就足够聪明地知道发生了什么
bar = bar;
Run Code Online (Sandbox Code Playgroud)
那么为什么要使用this关键字?(我知道在某些情况下,使用它是完全必要的,我只是要求这样的情况).实际上,我倾向于纯粹为了可读性而使用关键字,但通常的做法是什么?例如,在整个商店中使用它会使我的代码看起来有些混乱
boolean baz;
int someIndex = 5;
this.baz = this.bar.getSomeNumber() == this.someBarArray[this.someIndex].getSomeNumber();
Run Code Online (Sandbox Code Playgroud)
显然是一个糟糕的代码,但它说明了我的例子.在这些情况下,这仅仅取决于个人偏好吗?
当我使用this关键字访问类中的非静态变量时,Java不会给出任何错误.但是当我不使用它时,Java会出错.我为什么要用this?
我知道通常应该什么时候使用this,但这个例子与正常用法非常不同.
例:
class Foo {
// int a = b; // gives error. why ?
int a = this.b; // no error. why ?
int b;
int c = b;
int var1 = this.var2; // very interesting
int var2 = this.var1; // very interesting
}
Run Code Online (Sandbox Code Playgroud) 我试图了解java关键字this实际上做了什么.我一直在阅读Sun的文档,但我仍然对this实际操作有些模糊.
可能重复:
我什么时候应该在课堂上使用"this"?
在引用实例的字段时,如何知道是否使用"this"?
例如:
return this.name
Run Code Online (Sandbox Code Playgroud)
我被教了一个有用的案例.即当输入参数与字段名称相同时:
public void setName(String name) {
this.name = name;
}
Run Code Online (Sandbox Code Playgroud)
除此之外,"这个"似乎不需要..还有什么其他案例?
据我所知,这用于以下情况:
this 当我们想要引用与本地变量具有相同名称的实例变量时,使用关键字.但我已经完成了他的项目代码,他们在getter中使用它,如:
class a {
int time;
int getValue() {
return this.time * 5.;
}
}
Run Code Online (Sandbox Code Playgroud)
据我所知,每个对象都有自己的实例变量和方法副本,因此以这种方式返回是有道理的.请澄清.
提到Stackoverfow问题:什么时候应该在课堂上使用"this"?
我希望能够清楚准确地理解两者之间的区别.
this用于隐式引用还是显式的关键字也是?这也是我想要在两者之间澄清的原因?
我假设使用this关键字is隐式引用(是类的东西)而显式(不属于类本身)就像传递给方法的参数变量一样.
当然,我的假设显然是错误的,这就是我在这里要求澄清的原因.
例如,假设我们有一个名为的对象car,它是类的一部分Cars并且有一个color属性。假设我们有一个颜色吸气剂:
public String getColor(){
return color;
}
Run Code Online (Sandbox Code Playgroud)
但不应该是这样吗this.color?如果没有,为什么?
class Person
{
string name;
public Person(string name)
{
this.name = name;
}
public void method()
{
Person gupta = new Person("James"); // Current Object
Console.WriteLine(this.name);
Person gupta1 = new Person("Peter"); // Current Object
Console.WriteLine(this.name);
Person gupta2 = new Person("Frank"); // Current Object
Console.WriteLine(this.name);
}
static void Main(string[] args)
{
Person p = new Person("Jim");
p.method();
Console.ReadLine();
}
}
Run Code Online (Sandbox Code Playgroud)
这段代码产生了结果
Jim
Jim
Jim
Run Code Online (Sandbox Code Playgroud)
但是,如果认为这应该是
James
Peter
Frank
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下吗?
class Position {
private double x,y;
private int id;
public String toString(Position a){
String words ="(" + a.x + "," +a.y + ")";
return words;
Run Code Online (Sandbox Code Playgroud)
所以我在这里得到了一个内存地址.我究竟做错了什么?我想获得使用setter设置的x和y的实际值.我也有吸气剂,我试过而不是把斧头放入getX(),但这仍然给我另一个内存地址.我究竟做错了什么?