this的用法

this常见的用法有两种:

1.用this调用成员变量和成员函数

class Person
{
	String name ; 
	void talk()
	{
		System.out.println("my name is" + this.name);
	}
}

  

class Test
{
	public static void main(String args[])
	{
		Person p1 = new Person();
		p1.name = "zhangsan";
		p1.talk();
	}
}

  编译后执行Test,打印出“my name is zhangsan”

  this是一个对象,代表调用了"this所在函数的"那个对象,比如上面,p1.talk()调用了talk(),this就代表p1。this.name相当于p1.name。

  this一般不加也可以,比如上面第一段函数中的this。但是当成员变量参数名一致的时候就必须加this,比如下面这种情况:

class Person
{
	String name ; 
	void talk(name)
	{
		System.out.println("my name is" + name);
	}
}

  注意这里是没有加this的;这个时候如果在Test里的talk函数里传入“zhangsan1”,如下:

class Test
{
	public static void main(String args[])
	{
		Person p1 = new Person();
		p1.name = "zhangsan";
		p1.talk(zhangsan1);
	}
}

  编译执行Test后打印出来的就是"my name is zhangsan1"。就是说默认传给了参数。如果要传递给成员变量的name,就要加this。

  同样,this作为对象,可以调用成员函数

2.this调用构造函数

class Person
{
	String name ; 
	int age ; 
	String address ; 
	
	Person()
	{
		System.out.println("无参数构造函数");
	}
	Person(String s1 , int a , String s2)
	{
		name = s1 ; 
		age = a ; 
		address = s2 ; 
	}
	void talk()
	{
		System.out.println("my name is" + this.name);
	}
}

  用了this,上面就可以这样写:

class Person
{
	String name ; 
	int age ; 
	String address ; 
	
	Person()
	{
		System.out.println("无参数构造函数");
	}
	Person(String name , int age , String address)
	{
		this.name = name ; //第一个name是成员变量,第二个name是参数
		this.age = age ; 
		this.address = address ; 
	}
	void talk()
	{
		System.out.println("my name is" + this.name);
	}
}

  或者当你不需要给所有的成员变量赋值,比如只需给name 和 age赋值,可以加一个构造函数:

class Person
{
	String name ; 
	int age ; 
	String address ; 
	
	Person()
	{
		System.out.println("无参数构造函数");
	}
	Person(String name , int age)
	{
		this.name = name ; 
		this.age = age ; 
	}
	Person(String name , int age , String address)
	{
		this.name = name ; //第一个name是成员变量,第二个name是参数
		this.age = age ; 
		this.address = address ; 
	}
	void talk()
	{
		System.out.println("my name is" + this.name);
	}
}

  但是这样存在重复代码,这时候可以用this的第二种用法:

class Person
{
	String name ; 
	int age ; 
	String address ; 
	
	Person()
	{
		System.out.println("无参数构造函数");
	}
	Person(String name , int age)
	{
		this.name = name ; 
		this.age = age ; 
	}
	Person(String name , int age , String address)
	{
		this(name , age);
		this.address = address ; 
	}
	void talk()
	{
		System.out.println("my name is" + this.name);
	}
}

    this调用哪一个构造函数,根据this()中传入的参数个数和类型来决定,比如调用无参构造函数只要写this();即可。注意,这种用法要求对this的调用必须是第一条语句。这样产生了一个矛盾,能不能在三个参数的构造函数里同时调用其他两个构造函数?在this(name , age );之前写一个this();是不可以的。但是可以在第二个构造函数里面写一个this();,形成一个接力形式。也就是:

class Person
{
	String name ; 
	int age ; 
	String address ; 
	
	Person()
	{
		System.out.println("无参数的构造函数");
	}
	Person(String name , int age)
	{
                this();
		this.name = name ; 
		this.age = age ; 
                System.out.println("两个参数的构造函数");
	}
	Person(String name , int age , String address)
	{
		this(name , age);
		this.address = address ; 
                System.out.println("三个参数的构造函数");
	}
	void talk()
	{
		System.out.println("my name is" + this.name);
	}
}

  如此一来,用一个Test来调用:

class Test
{
    public static void main(String args[])
    {
        Person p = new Person("Zhangsan" , 20 , "Beijing");
    }
}

打印出的是:

无参数的构造函数

两个参数的构造函数

三个参数的构造函数

(为什么可以直接打印出这三句话呢?见“构造函数”)

(end)

原文地址:https://www.cnblogs.com/larrylawrence/p/3411424.html