this关键字

 this关键字
this只能在类的方法中使用
this代表当前调用这个this所在方法的对象的自身

this可以在方法内区分同名类的属性和参数名,有this一定是属性,没有this一定是方法的参数

this不能在static修饰的语句块内出现

一言不合就上代码:

class ThisClass{
	String name;
	Integer age;
	public void printThis(){
		System.out.println("ThisClass本次调用对象的地址为:\t\t\t"+this);
	}
	
}

class Test{
	public static void main(String[] args){
		ThisClass thisClass = new ThisClass();
		thisClass.printThis();
		System.out.println("ThisClass在main方法创建的对象的地址为:\t\t"+thisClass);
	}
}

结果如下 :

ThisClass本次调用对象的地址为:               ThisClass@11cf3710
ThisClass在main方法创建的对象的地址为:         ThisClass@11cf3710


有没有发现两次输出的地址完全一致都是 “ThisClass@11cf3710”?this在这中间到底是代表啥?

其实很简单,this = 创建这个对象并调用这个对象的本身

也就是   this = thisClass = ThisClass@11cf3710


注意,String name;这里是不能使用this的,因为this只能在类的方法中使用


即然this代码了调用这个对象的本身,那之前的封装是不是可以改一下了呢?

原代码如下:

class ClassObject{  
    //被private封装的属性或方法,在外部是无法直接使用的,只能在本类中方可使用   
    private String name;  
    private Integer age;  
      
    //开放接口给外部类调用,实现给属性name/age赋值的目地  
    public void setName(String val){  
        name =  val;  
    }  
    public void setAge(int val){  
        age = val;  
    }  
      
    //开放获取name/age属性值 的方法  
    public String getName(){  
        return name;  
    }  
    public Integer getAge(){  
        return age;  
    }  
      
    public void printObject(){  
        System.out.println(name+"今年"+age+"岁了");  
    }  
}  
  
class Test{  
    public static void main(String[] args){  
        ClassObject classObject = new ClassObject();  
        //name被private设置成了私有的,不能在外部访问  
        //classObject.name ="小明";  
        //classObject.age = 10;  
          
        //ClassObject类中的属性,可以通过我们提供的setName/setAge接口进行赋值  
        classObject.setName("小二");  
        classObject.setAge(10);  
        classObject.printObject();  
          
        //获取classObject类中的name/age属性值   
        String name = classObject.getName();  
        Integer age = classObject.getAge();  
        System.out.println("从classObject获取的name值为:"+name);  
        System.out.println("从classObject获取的age值为:"+age);  
    }  
} 

使用this关键后,开发的接口接收的参数名就可以与类中的属性名同名了,工作中,也是这么干的。因为this后面代码 的参数,一定是属性

所以修改后如下:

class ClassObject{
	//被private封装的属性或方法,在外部是无法直接使用的,只能在本类中方可使用 
	private String name;
	private Integer age;
	
	//开放接口给外部类调用,实现给属性name/age赋值的目地
	public void setName(String name){
		this.name =  val;
	}
	public void setAge(int age){
		this.age = val;
	}
	
	//开放获取name/age属性值 的方法
	public String getName(){
		return name;
	}
	public Integer getAge(){
		return age;
	}
	
	public void printObject(){
		System.out.println(name+"今年"+age+"岁了");
	}
}

class Test{
	public static void main(String[] args){
		ClassObject classObject = new ClassObject();
		//name被private设置成了私有的,不能在外部访问
		//classObject.name ="小明";
		//classObject.age = 10;
		
		//ClassObject类中的属性,可以通过我们提供的setName/setAge接口进行赋值
		classObject.setName("小二");
		classObject.setAge(10);
		classObject.printObject();
		
		//获取classObject类中的name/age属性值 
		String name = classObject.getName();
		Integer age = classObject.getAge();
		System.out.println("从classObject获取的name值为:"+name);
		System.out.println("从classObject获取的age值为:"+age);
	}
}

主要改变的代码有:

//开放接口给外部类调用,实现给属性name/age赋值的目地
	public void setName(String name){
		this.name =  val;
	}
	public void setAge(int age){
		this.age = val;
	}

之前的参数名并不是name/age,而现在参数名可以与成员变量名相同了。。













  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值