通常,我this只在构造函数中使用.
我知道它用于识别参数变量(通过使用this.something),如果它与全局变量具有相同的名称.
但是,我不知道thisJava 的真正含义是什么,如果我this不使用dot(.)会发生什么.
Joa*_*uer 150
this 指当前的对象.
每个非静态方法都在对象的上下文中运行.所以如果你有这样一个类:
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
}
}
Run Code Online (Sandbox Code Playgroud)
然后调用frobnicate()上new MyThisTest()会打印
1 42 MyThisTest a=42
因此,您可以有效地将它用于多种事物:
Mic*_*Sim 51
以下是此处的复制和粘贴,但很好地解释了this关键字的所有不同用法:
定义:Java的this关键字用于引用使用它的方法的当前实例.
以下是使用此方法:
具体表示使用实例变量而不是静态或局部变量.那是,
private String javaFAQ;
void methodName(String javaFAQ) {
this.javaFAQ = javaFAQ;
}
Run Code Online (Sandbox Code Playgroud)
这里指的是实例变量.这里局部变量的优先级高.因此缺少this表示局部变量.如果作为参数名称的局部变量与实例变量不同,则无论this是否使用它都表示实例变量.
This 用于引用构造函数
public JavaQuestions(String javapapers) {
this(javapapers, true);
}
Run Code Online (Sandbox Code Playgroud)
这将调用具有两个参数的同一java类的构造函数.
This 用于将当前java实例作为参数传递
obj.itIsMe(this);
Run Code Online (Sandbox Code Playgroud)与上面类似,这也可以用于返回当前实例
CurrentClassName startMethod() {
return this;
}
Run Code Online (Sandbox Code Playgroud)
注意:在上述两点的内部类中使用时,这可能会导致不希望的结果.因为这将引用内部类而不是外部实例.
This 可用于获取当前类的句柄
Class className = this.getClass(); // this methodology is preferable in java
Run Code Online (Sandbox Code Playgroud)
虽然这可以通过
Class className = ABC.class; // here ABC refers to the class name and you need to know that!
Run Code Online (Sandbox Code Playgroud)与往常一样,this它与其实例相关联,这在静态方法中不起作用.
irr*_*ble 42
要完成,this也可以用来引用外部对象
class Outer {
class Inner {
void foo() {
Outer o = Outer.this;
}
}
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*man 16
它指的是特定对象的当前实例,因此您可以编写类似的东西
public Object getMe() {
return this;
}
Run Code Online (Sandbox Code Playgroud)
一个常见的用例this是防止阴影.请看以下示例:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,我们希望使用参数的值分配字段成员.由于它们具有相同的名称,因此我们需要一种方法来区分字段和参数.this允许我们访问此实例的成员,包括该字段.
public class Person {
private final String name;
public Person(String name) {
this.name = name;
}
}
Run Code Online (Sandbox Code Playgroud)
在Swing中,编写一个实现ActionListener并将当前实例(即'this')添加为组件的ActionListener 的类是相当常见的.
public class MyDialog extends JDialog implements ActionListener
{
public MyDialog()
{
JButton myButton = new JButton("Hello");
myButton.addActionListener(this);
}
public void actionPerformed(ActionEvent evt)
{
System.out.println("Hurdy Gurdy!");
}
}
Run Code Online (Sandbox Code Playgroud)
它指的是调用该方法的实例
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
Run Code Online (Sandbox Code Playgroud)
它实际上是“对当前上下文中对象的引用”。例如,要打印出“此对象”,您可以编写:
System.out.println(this);
Run Code Online (Sandbox Code Playgroud)
请注意,您对“全局变量”的使用有些不正确……如果您使用的this.variableName话,根据定义,它不是全局变量,而是特定于此特定实例的变量。
| 归档时间: |
|
| 查看次数: |
391186 次 |
| 最近记录: |