我试图了解java关键字this
实际上做了什么。
我一直在阅读Sun的文档,但我对this
实际做的事情仍然很模糊。
答案 0 :(得分:38)
this
关键字是对当前对象的引用。
class Foo
{
private int bar;
public Foo(int bar)
{
// the "this" keyword allows you to specify that
// you mean "this type" and reference the members
// of this type - in this instance it is allowing
// you to disambiguate between the private member
// "bar" and the parameter "bar" passed into the
// constructor
this.bar = bar;
}
}
考虑它的另一种方式是this
关键字就像你用来引用自己的人称代词。其他语言对于相同的概念有不同的词。 VB使用Me
和Python约定(因为Python不使用关键字,只是每个方法的隐式参数)是使用self
。
如果您要引用本质上属于您的对象,您可以这样说:
我的手臂或我的腿
将this
视为某种类型说“我的”的方式。因此,伪代码表示如下所示:
class Foo
{
private int bar;
public Foo(int bar)
{
my.bar = bar;
}
}
答案 1 :(得分:21)
关键字this
在不同的情境中可能意味着不同的东西,这可能是您混淆的根源。
它可以用作对象引用,引用调用当前方法的实例:return this;
它可以用作对象引用,它引用当前构造函数正在创建的实例,例如访问隐藏字段:
MyClass(String name)
{
this.name = name;
}
它可用于从构造函数中调用类的不同构造函数:
MyClass()
{
this("default name");
}
它可用于从嵌套类中访问封闭实例:
public class MyClass
{
String name;
public class MyClass
{
String name;
public String getOuterName()
{
return MyClass.this.name;
}
}
}
答案 2 :(得分:6)
“this”是对当前对象的引用。
查看详情here
答案 3 :(得分:5)
The keyword this
is a reference to the current object。最好用以下代码解释:
public class MyClass {
public void testingThis()
{
// You can access the stuff below by
// using this (although this is not mandatory)
System.out.println(this.myInt);
System.out.println(this.myStringMethod());
// Will print out:
// 100
// Hello World
}
int myInt = 100;
string myStringMethod()
{
return "Hello World";
}
}
除非您的代码标准告诉您使用this
关键字,否则不会使用它。它有一个常见用途,那就是如果你遵循代码约定,你的参数名称与你的类属性相同:
public class ProperExample {
private int numberOfExamples;
public ProperExample(int numberOfExamples)
{
this.numberOfExamples = numberOfExamples;
}
}
this关键字的一个正确用法是链构造函数(使构造对象在构造函数中保持一致):
public class Square {
public Square()
{
this(0, 0);
}
public Square(int x_and_y)
{
this(x_and_y, x_and_y);
}
public Square(int x, int y)
{
// finally do something with x and y
}
}
此关键字的工作方式与例如C#。
答案 4 :(得分:4)
更好地利用这个
public class Blah implements Foo {
public Foo getFoo() {
return this;
}
}
它允许您在当前上下文中具体使用“this”对象。另一个例子:
public class Blah {
public void process(Foo foo) {
foo.setBar(this);
}
}
你怎么能做这些操作呢。
答案 5 :(得分:2)
“this”关键字引用当前对象,因为该方法正在执行。它还用于避免在实例变量和局部变量具有相同名称时,作为方法中的参数传递的局部变量与实例变量之间存在歧义。
示例::
public class ThisDemo1
{
public static void main(String[] args)
{
A a1=new A(4,5);
}
}
class A
{
int num1;
int num2;
A(int num1)
{
this.num1=num1; //here "this" refers to instance variable num1.
//"this" avoids ambigutiy between local variable "num1" & instance variable "num1"
System.out.println("num1 :: "+(this.num1));
}
A(int num, int num2)
{
this(num); //here "this" calls 1 argument constructor within the same class.
this.num2=num2;
System.out.println("num2 :: "+(this.num2));
//Above line prints value of the instance variable num2.
}
}
答案 6 :(得分:1)
关键字“ this ”指的是当前对象的上下文。在许多情况下(如Andrew指出的那样),您将使用显式 this 来明确表示您正在引用当前对象。
此外,来自“this and super”:
*还有其他用途。有时,在编写实例方法时,需要将包含该方法的对象作为实际参数传递给子例程。在这种情况下,您可以将其用作实际参数。例如,如果要打印出对象的字符串表示形式,可以说“System.out.println(this);”。或者,您可以将此值赋给赋值语句中的另一个变量。
事实上,除了更改其值之外,您可以对任何其他变量执行此操作。*
该网站还引用了“ super ”的相关概念,这可能有助于理解这些概念如何与继承一起工作。
答案 7 :(得分:1)
它是同一类方法中类的实际实例的引用。 编码
public class A{
int attr=10;
public int calc(){
return this.getA()+10;
}
/**
*get and set
**/
}//end class A
在 calc()主体中,软件在当前分配的对象内运行一个方法。
对象的行为如何才能看到自己?完全使用 此 关键字。
实际上,此关键字不需要强制使用(如 super ),因为JVM知道在内存区域中调用方法的位置,但在我看来,这使得代码更具有可重复性。
答案 8 :(得分:1)
它也可以是访问当前上下文信息的一种方法。 例如:
public class OuterClass
{
public static void main(String[] args)
{
OuterClass oc = new OuterClass();
}
OuterClass()
{
InnerClass ic = new InnerClass(this);
}
class InnerClass
{
InnerClass(OuterClass oc)
{
System.out.println("Enclosing class: " + oc + " / " + oc.getClass());
System.out.println("This class: " + this + " / " + this.getClass());
System.out.println("Parent of this class: " + this.getClass().getEnclosingClass());
System.out.println("Other way to parent: " + OuterClass.this);
}
}
}
答案 9 :(得分:0)
用英语来思考,“这个对象”是你现在拥有的对象。
WindowMaker foo = new WindowMaker(this);
例如,您当前位于从JFrame扩展的类中,并且您希望将引用传递给JFrame的WindowMaker对象,以便它可以与JFrame交互。您可以通过将其引用传递给名为“this”的对象来传递对JFrame的引用。
答案 10 :(得分:0)
每个对象都可以使用关键字this访问自身的引用(有时称为this 参考)。
首先让我们来看看代码
public class Employee {
private int empId;
private String name;
public int getEmpId() {
return this.empId;
}
public String getName() {
return this.name;
}
public void setEmpId(int empId) {
this.empId = empId;
}
public void setName(String name) {
this.name = name;
}
}
在上面的方法中,getName()返回实例变量名。 现在让我们再看看类似代码
public class Employee {
private int empId;
private String name;
public int getEmpId() {
return this.empId;
}
public String getName() {
String name="Yasir Shabbir";
return name;
}
public void setEmpId(int empId) {
this.empId = empId;
}
public void setName(String name) {
this.name = name;
}
public static void main(String []args){
Employee e=new Employee();
e.setName("Programmer of UOS");
System.out.println(e.getName());
}
}
<强>输出强> Yasir Shabbir
**注意:**当方法包含具有的参数或局部变量时,通常会出现逻辑错误 与该类字段的名称相同。在这种情况下,如果您想访问,请使用引用 类的字段 - 否则,将引用方法参数或局部变量。
答案 11 :(得分:0)
'这个'的作用非常简单。它掌握了当前的参考 对象