this关键字

调用本类属性、调用本类方法(普通、构造)、表示当前对象

1.使用this调用本类属性

class Person{
	private String name;
	private int age;
	//setter getter 无参构造函数略
	public Person (String n, int a){
		name = n;
		age = a;
	}
	public String getInfo(){
		return "姓名:" + name + ",年龄:" + age;
	}
}
public class ThisDemo {
	public static void main (String args[]){
		System.out.println(new Person("张三",20).getInfo);
	}
}

      但是给出的参数存在一些问题,当前类中的构造方法目的为类中的name和aga两个属性进行初始化。但是构造方法的参数声明不准确public Person (String n, int a),想要赋值有明确的指向。这时候可能会产生参数和属性同名问题,为了明确属性和参数名,在属性名前面都加上this. 这样就不会和方法中的参数名混淆了。如下:

class Person{
	private String name;
	private int age;
	//setter getter 无参构造函数略
	public Person (String name, int age){
		this.name = n;
		this.age = a;
	}
	public String getInfo(){
		return "姓名:" + name + ",年龄:" + age;
	}
}
public class ThisDemo {
	public static void main (String args[]){
		System.out.println(new Person("张三",20).getInfo);
	}
}

只要在类中的方法访问类的属性是,一定要加上this关键字。

2.使用this调用本类方法

     普通方法:this.方法名称(参数)

     构造方法:this(参数...)

范例:调用普通方法

class Person{
	private String name;
	private int age;
	//setter getter 无参构造函数略
	public Person (String name, int age){
		this.name = n;
		this.age = a;
		//不加this可会调用,但是好的习惯需要加上
		this.print();
	}
	public vodi print(){
		System.out.println("************");
	}
	public String getInfo(){
		return "姓名:" + name + ",年龄:" + age;
	}
}
public class ThisDemo {
	public static void main (String args[]){
		System.out.println(new Person("张三",20).getInfo);
	}
}

代码好习惯,虽然调用本类的普通方法前可以不使用this,但是强烈建议加上,可以确定方法的来源。

范例:调用构造方法

构造方法与普通方法最大的区别:使用关键new实例化新对象时使用一次,而普通方法是在构造完成后可以调用多次。

在java中支持类的构造方法互相调用。

class Person{
	private String name;
	private int age;
	//不管执行哪个构造方法,都要求信息输出
	public Persong(){   //无参
		System.out.println("************");
	}
	public Person(String name){
		this.name = name ;
		System.out.println("************");
	}
	public Person (String name, int age){
		this.name = n;
		this.age = a;
		System.out.println("************");
		//不加this可会调用,但是好的习惯需要加上
		this.print();
	}
	public vodi print(){
		System.out.println("************");
	}
	public String getInfo(){
		return "姓名:" + name + ",年龄:" + age;
	}
}
public class ThisDemo {
	public static void main (String args[]){
        System.out.println(new Person().getInfo);
        System.out.println(new Person("张三").getInfo);
        System.out.println(new Person("张三",20).getInfo);
	}
}

要求实现了要求,但是有重复代码,要求使用this消除重复代码,如下:

class Person{
	private String name;
	private int age;
	//不管执行哪个构造方法,都要求信息输出
	public Persong(){   //无参
		System.out.println("************");
	}
	public Person(String name){
		this();  //调用本类无参构造
		this.name = name ;
		
	}
	public Person (String name, int age){
		this(name);   //调用本类有参构造
		this.name = n;
		this.age = a;
		
		//不加this可会调用,但是好的习惯需要加上
		this.print();
	}
	public vodi print(){
		System.out.println("************");
	}
	public String getInfo(){
		return "姓名:" + name + ",年龄:" + age;
	}
}
public class ThisDemo {
	public static void main (String args[]){
		System.out.println(new Person().getInfo);
            System.out.println(new Person("张三").getInfo);
            System.out.println(new Person("张三",20).getInfo);
	}
}

虽然使用this可以实现构造方法互相调用,但是有两点需要注意:

     this调用构造的语句,必须放在构造方法的首行。

     使用this调用构造方法时请留有出口。

3.this表示当前对象:

在一个类之中肯定会产生若干个对象,那么程序类中在分辨时不会知道产生多少个对象,只知道操作当前类的对象是哪一个。

范例:观察当前对象

class Person{
	public void fun() {
		System.out.printlin("FUN方法" + this);
	}
}
public class ThisDemo {
	public static void main (String args[]){
		Person p1 = new Person();
		System.out.printlin("FUN方法" + p1);
		p1.fun();   //由p1调用了fun方法
		Person p2 = new Person();
		System.out.printlin("FUN方法" + p2);
		p2.fun();   //由p1调用了fun方法
		
	}
}

在整体的操作过程中,只要有某个对象调用了本类的方法,那么this就指当前的对象,this并不是一个固定的对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值