this 变量代表对象本身
当类中有两个同名变量,一个属于类(类的成员变量),而另一个属于某个特定的方法(方法中的局部变量),使用this区分成员变量和局部变量。
class Point
{
int x,y;
Point(int a,int b)
{
x=a;
y=b;
}
Point()
{}
void output()
{
System.out.println(x);
System.out.println(y);
}
void output(int x,int y)
{
x=x;
y=y;
}
public static void main(String[] args)
{
Point pt;
pt=new Point(3,3);
// pt=new Point();
pt.output(5,5);
pt.output();
}
}
rihiroshitekiMacBook-Air:test LiBo$ java Point
3
3
rihiroshitekiMacBook-Air:test LiBo$ java Point
5
5
rihiroshitekiMacBook-Air:test LiBo$ cat Point.java
class Point
{
int x,y;
Point(int a,int b)
{
x=a;
y=b;
}
Point()
{}
void output()
{
System.out.println(x);
System.out.println(y);
}
void output(int x,int y)
{
this.x=x;
this.y=y;
}
public static void main(String[] args)
{
Point pt;
pt=new Point(3,3);
// pt=new Point();
pt.output(5,5);
pt.output();
}
}
rihiroshitekiMacBook-Air:test LiBo$
使用this简化构造函数的调用。
rihiroshitekiMacBook-Air:test LiBo$ java Point
1
1
rihiroshitekiMacBook-Air:test LiBo$ cat Point.java
class Point
{
int x,y;
Point(int a,int b)
{
x=a;
y=b;
}
Point()
{
this(1,1);
}
void output()
{
System.out.println(x);
System.out.println(y);
}
void output(int x,int y)
{
this.x=x;
this.y=y;
}
public static void main(String[] args)
{
Point pt;
// pt=new Point(3,3);
pt=new Point();
// pt.output(5,5);
pt.output();
}
}
关于实例的方法和实例数据成员的进一步说明
一个类所有的实例(对象)调用的成员方法在内存中只有一份拷贝,尽管在内存中可能有多个对象,而数据成员在类的每个对象所在内存中都存在一份拷贝。this变量润许相同的实例方法为不同的对象工作,
rihiroshitekiMacBook-Air:test LiBo$ java Point
6
7
rihiroshitekiMacBook-Air:test LiBo$ cat Point.java
class Point
{
int x,y;
Point(int a,int b)
{
x=a;
y=b;
}
Point()
{
this(1,1);
}
void output()
{
System.out.println(x);
System.out.println(y);
}
void output(int x,int y)
{
this.x=x;
this.y=y;
}
public static void main(String[] args)
{
Point pt;
// pt=new Point(3,3);
pt=new Point();
// pt.output(5,5);
// pt.output();
Point pt2=new Point();
pt.x=6;
pt2.x=7;
System.out.println(pt.x);
System.out.println(pt2.x);
}
}
this变量润许相同的实例方法为不同的对象工作.每当调用一个实例的方法时,this变量将被设置成引用该实例方法的特定的类对象。方法的代码接着会与this所代表的对象的特定数据建立关联。
class Point
{
int x,y;
Point(int a,int b)
{
x=a;
y=b;
}
Point()
{
this(1,1);
}
static void output()
{
// System.out.println(x);
// System.out.println(y);
System.out.println("output() called");
}
void output(int x,int y)
{
this.x=x;
this.y=y;
}
public static void main(String[] args)
{
Point.output();
/* Point pt;
// pt=new Point(3,3);
pt=new Point();
// pt.output(5,5);
// pt.output();
Point pt2=new Point();
pt.x=6;
pt2.x=7;
System.out.println(pt.x);
System.out.println(pt2.x);*/
}
}