Public class test{
test(int a) {
this.a=a;
}
Void print(){
System.out.println(a);
}
Public static void main(String args[]){
test s=new test(2);
s.print();
}
}
class ExpThisKeyWord{
int x;
int y;
public void setMyInstanceValues(int a, int b) {
x= a;
y=b;
System.out.println("x is ="+x);
System.out.println("y is ="+y);
}
}
class Demo{
public static void main(String[] args){
ExpThisKeyWord obj1 = new ExpThisKeyWord();
ExpThisKeyWord obj2 = new ExpThisKeyWord();
ExpThisKeyWord obj3 = new ExpThisKeyWord();
obj1.setMyInstanceValues(1, 2);
obj2.setMyInstanceValues(11, 22);
obj3.setMyInstanceValues(111, 222);
}
}
public void setMyInstanceValues(int a, int b) {
this.x= a; //Answer: this keyword denotes the current object that is handled by JVM.
this.y=b;
System.out.println("x is ="+x);
System.out.println("y is ="+y);
}
class A {
public boolean is(Object o) {
return o == this;
}
}
A someA = new A();
A anotherA = new A();
someA.is(someA); // returns true
someA.is(anotherA); // returns false
public class Person {
private final String name;
public Person(String name) {
// how would we initialize the field using parameter?
// we can't do: name = name;
}
}
在上面的示例中,我们希望使用参数的值指定字段成员。因为它们共享相同的名称,所以我们需要一种方法来区分字段和参数。 this 允许我们访问此示例的成员,包括字段。
public class Person {
private final String name;
public Person(String name) {
this.name = name;
}
}
public class MyThisTest {
private int a;
public MyThisTest() {
this(42); // calls the other constructor
}
public MyThisTest(int a) {
this.a = a; // assigns the value of the parameter a to the field of the same name
}
public void frobnicate() {
int a = 1;
System.out.println(a); // refers to the local variable a
System.out.println(this.a); // refers to the field a
System.out.println(this); // refers to this entire object
}
public String toString() {
return "MyThisTest a=" + a; // refers to the field a
}
}
17条答案
按热度按时间tf7tbtn21#
this关键字用于引用块的当前变量,例如,请考虑以下代码(只是一个示例,因此不要期望使用标准java代码):
就这样。输出为“2”。如果我们没有使用this关键字,那么输出将是:0
acruukt92#
为了完整,
this
也可以用来指外部对象monwx1rj3#
(我知道我迟到了,但嘘,我是个鬼鬼祟祟的家伙,你从没见过我)
在大多数面向对象编程语言中,this关键字(如果不是全部的话)意味着它是对该类的当前对象示例的引用。它本质上与通过名称从方法外部调用该对象是一样的。这可能毫无意义,因为我的解释太不周详了:
在类之外,为了调用对象示例中的某个对象,例如,假设您有一个名为object的对象,并且希望获得需要使用的字段
例如,您试图从类内部访问object.field,例如,您可以使用
在类内部调用this关键字时,它实际上会替换object name关键字。通常没有太多的理由在外部这样做如果你有两个同名的变量,其中一个是类的一个字段,另一个只是一个方法内部的一个变量,它有助于在这两个变量之间进行破译。例如,如果你有这个:(哈,明白了吗?这个?呵呵。。。。就我一个人?好的:(我现在就走)
这将导致一些问题,编译器将无法知道在构造函数的参数中定义的name变量和类的字段声明中的name变量之间的差异,因此它将把name参数赋给。。。。name参数的值,它没有任何好处,也没有任何意义。这是大多数新程序都会遇到的常见问题,我也是其中的受害者。无论如何,定义此参数的正确方法是使用:
这样,编译器就知道您试图分配的name变量是类的一部分,而不是方法的一部分,并正确地分配它,这意味着它将name字段分配给您在构造函数中输入的任何内容。
总而言之,它基本上引用了您正在处理的类的对象示例的一个字段,因此它是关键字“this”,意思是它的this object或this instance。在调用类的一个字段时使用这个方法是一个很好的实践,而不仅仅是使用名称来避免可能的bug,因为编译器在这些bug上运行时很难找到它们。
sbtkgmzw4#
它实际上是“当前上下文中对对象的引用”。例如,要打印“this object”,您可以编写:
请注意,您对“全局变量”的用法有些不正确。。。如果你用的是
this.variableName
那么根据定义,它不是一个全局变量-它是一个特定于这个特定示例的变量。yuvru6vn5#
示例变量对于您创建的每个对象都是公共的。假设有两个示例变量
如果您注意到上面的代码,我们已经启动了三个对象,三个对象正在调用setmyinstancevalues方法。您认为jvm如何正确地为每个对象分配值?有一个诀窍,jvm不会看到上面显示的代码。相反,它将看到如下代码;
rlcwz9us6#
这可以在某些方法或构造函数中使用。
它返回对当前对象的引用。
vptzau2j7#
它引用调用方法的示例
drkbr07n8#
它引用特定对象的当前示例,因此您可以编写如下内容
一个常见的
this
是为了防止阴影。举下面的例子:在上面的示例中,我们希望使用参数的值指定字段成员。因为它们共享相同的名称,所以我们需要一种方法来区分字段和参数。
this
允许我们访问此示例的成员,包括字段。v2g6jxz69#
引用programming.guide上的一篇文章:
this
在java程序中有两个用途。1. 作为对当前对象的引用
这种情况下的语法通常类似于
这里描述了这种用法:“this”引用(带示例)
2. 调用其他构造函数
本例中的语法通常类似于
这里描述了这种用法:这个(…)构造函数调用(带示例)
1l5u6lss10#
this
是对当前对象的引用:http://download.oracle.com/javase/tutorial/java/javaoo/thiskey.htmlcgyqldqp11#
this
引用当前对象。每个非静态方法都在对象的上下文中运行。如果你有这样的课:
然后打电话来
frobnicate()
在new MyThisTest()
将打印因此,您可以有效地将其用于多种用途:
澄清你所说的是一个字段,同时还有其他与字段同名的内容
将当前对象作为一个整体引用
在构造函数中调用当前类的其他构造函数
nfeuvbwi12#
在swing中,编写一个实现
ActionListener
并将当前示例(即“this”)添加为组件的actionlistener。yzxexxkh13#
这指的是你现在“在”的对象。换句话说,这是指接收对象。您可以用这个来说明您所指的是哪个变量。java\u白皮书第37页
在上面的代码示例中,this.x/this.y引用当前类,即点类x和y变量,其中(double x,double y)是从不同类传递的双值,用于将值赋给当前类。
sg24os4d14#
下面是这里的复制粘贴,但是很好地解释了
this
关键字:定义:java的
this
关键字用于引用使用它的方法的当前示例。以下是使用方法:
具体表示使用示例变量代替静态或局部变量。也就是说,
这里它指的是示例变量。在这里,局部变量的优先级很高。因此
this
表示局部变量。如果作为参数名称的局部变量与示例变量不同,则不考虑this
表示示例变量。This
用于表示构造函数这将调用具有两个参数的同一java类的构造函数。
This
用于将当前java示例作为参数传递与上面类似,这也可以用于返回当前示例
注意:这可能会导致不希望的结果,而在内部类中使用上述两点。因为这将引用内部类而不是外部示例。
This
可用于获取当前类的句柄虽然这可以通过
一如既往,
this
与它的示例相关联,这在静态方法中不起作用。cunj1qz115#
我也在寻找同样的答案,但不知怎么的,我无法清楚地理解这个概念。但我终于从这个环节明白了
这是java中的一个关键字