1.当成员变量和局部变量重名时,在方法中使用this时,表示的是该方法所在类中的成员变量。(this是当前对象自己)
class ThisDemo
{
public static void main(String[] args)
{
//A a = new A(3);
B b = new B(3);
}
}
class A
{
int i=2;
A(int i)
{
System.out.println("i="+i);//3 这里的i表示的是传进去的参数。
System.out.println("this.i="+this.i);//2 这里的this。i表示的是该方法所在类的成员变量
this.i=i;
System.out.println("i="+i);//3
System.out.println("this.i="+this.i);//3
}
}
class B extends A
{
int j=3;
B(int j)
{
super(j);//这里如果不指定super(j),第一行默认是super()但是父类没有这个,会报错,所以要手动指定相应参数构造函数。
this.j=j;
System.out.println("j="+j);//3
System.out.println("this.j="+this.j);//3
}
}
------------------------------------------------------------下面的和上面的是一个意思,
class B extends A
{
B(int i)
{
super(i);//除了指定子类的有一参数的构造函数,还有一个作用,就是调用父类赋值方法,this.i=i;
System.out.println("i="+i);//3
System.out.println("this.i="+this.i);//3
}
}
结果是:如图注释
==================================================================================================================================
2.把自己当作参数传递时,也可以用this.(this作当前参数进行传递)
class A {
public A() {
调用B的方法
}
public void print() {
System.out.println("A!");
}
}
class B {
A a;
public B(A b) {
this.a = b;
}
public void print() {
a.print();//调用A的方法
System.out.println("B!");
}
}
class HelloA {
public static void main(String[] args) {
A aaa = new A();
aaa.print();
B bbb = new B(aaa);
bbb.print();
}
}
/*
HelloAA from A!
HelloAB from B!
HelloAA from A!
HelloAA from A!
HelloAB from B!
*/
===============================================================================================================================
3.关于匿名内部类中使用this 访问外部类
interface Inter
{
public static final int x=4;//内部类成员函数
void method();
}
class Test
{
int x=3;//外部类成员函数
Inter function()
{
int x=0;//外部类局部函数
return new Inter()
{
public void method()
{
System.out.println("Inner method"+Test.this.x);//访问外部类成员函数
System.out.println("Inner method"+this.x);//访问内部类成员函数
}
};
}
}
class InnerClassTest
{
public static void main(String[] args)
{
new Test().function().method();
}
}
/*
Inner method3
Inner method4
*/
===================================================================================================================================
4.this用来指定调用构造函数,
public class ThisTest {
ThisTest(String str) {
System.out.println(str);
}
ThisTest() {
this("this测试成功!");//调用有一个参数都构造函数
}
public static void main(String[] args) {
ThisTest thistest = new ThisTest();
}
}
/*
this测试成功!
*/
-----------------------------------------------------------------------------
class ThisTest2
{
public static void main(String[] args)
{
A a1 = new A("zs",20);
A a2 = new A("ls",20);
A a3 = new A("ww");
}
}
class A
{
private String name;
private int age;
A()
{
String name="null";
int age=0;
System.out.println("还没出生"+"姓名:"+name+" "+"年龄:"+age);
}
A(String name)
{
this();//调用无参构造函数
this.name=name;
System.out.println("刚出生"+"姓名:"+name+" "+"年龄:"+age);
}
A(String name,int age)
{
this(name);//调用有一个参数构造函数
//this.name=name;
this.age=age;
System.out.println("出生很久了"+"姓名:"+name+" "+"年龄:"+age);
}
}
/*
还没出生姓名:null 年龄:0
刚出生姓名:zs 年龄:0
出生很久了姓名:zs 年龄:20
还没出生姓名:null 年龄:0
刚出生姓名:ls 年龄:0
出生很久了姓名:ls 年龄:20
还没出生姓名:null 年龄:0
刚出生姓名:ww 年龄:0
*/
=================================================================================================================================
5.this传递当前对象
public class ThisTest3 {
int x;
int y;
void showtest(ThisTest3 tt) {//实例化对象
System.out.println(tt.x + " " + tt.y);
}
void seeit() {
showtest(this);
}
public static void main(String[] args) {
ThisTest3 p = new ThisTest3();
p.x = 9;
p.y = 10;
p.seeit();
}
}
/*
9 10
*/
总结:当成员变量和局部变量同名是,用this指定访问的变量; 把自己当做参数传递,此时this代表类类型变量; this在匿名内部类中指定访问的外部类;
this用来指定要调用的构造函数; this传递当前对象实体;
|