this关键字
this只能在类的方法中使用
this代表当前调用这个this所在方法的对象的自身
结果如下 :
使用this关键后,开发的接口接收的参数名就可以与类中的属性名同名了,工作中,也是这么干的。因为this后面代码 的参数,一定是属性
主要改变的代码有:
之前的参数名并不是name/age,而现在参数名可以与成员变量名相同了。。
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,而现在参数名可以与成员变量名相同了。。