Java中关于this的用法:
this关键词的意义:"指向当前对象的引用"(可以理解为本对象自己的,,,,)
如果没有用this
示例:
package test;
class Student {
int no;//定义参数no
String name;//定义参数anme
Student(int no,String name){
no = no;
name = name;
}
public static void main (String args []){
Student s1=new Student(1,"zhanagshan");
Student s2=new Student(2,"lishi");
System.out.println("name="+s1.name+"\tno="+s1.no);
System.out.println("name="+s2.name+"\tno="+s2.no);
}
}
运行结果为:

为什么会出现这样的问题呢?
修改了构造方法之后,当我们调用构造方法创建对象时,给构造方法所传递的参数值没有赋值到对象的属性中

构造方法的参数与类所定义的属性同名,根据”同名情况下,局部变量的优先级更高”原则,在构造方法执行的过程中,虚拟机会把参数值赋给”参数本身”,而不是赋值给对象的属性!
具体来说,比如我们给构造方法的name参数传递的值是”zhangsan”,而这个”zhangsan”在构造方法执行的过程中,当运行到”name=name;”这条语句时,并没有把”zhangsan”赋值给对象的name属性,而是又重新赋值给了name参数自身。
就是因为”zhangsan”最终没有被赋值到对象的name属性中,才导致introduce方法中打印出的name属性是null。
所以为了让虚拟机知道我们想把"zhangsan"这个字符串赋值给对象name的属性,而不是赋值给构造方法的参数,就需要用this来做修改

大家来看,这一次,我们在构造方法中,给”=”左边的属性前面都加上了this关键字,经过修改之后,重新运行main方法,就恢复了正常的运行效果。好,现在我们就来探究一下,加了this关键字之后,为什么程序能够”恢复正常”。刚才我们说过,”this”可以被解释为” 本对象自己的...”,按照这个逻辑,”this.name”就可以被解释为”本对象自己的name属性”,所以在执行”this.name=name;”这条语句的时候,虚拟机就会把name参数的值”张三”赋值给对象的name属性。也就是说在这条赋值语句中,”=”左边的”this.name”表示对象的name属性,而”=”右边的name表示方法的name参数。
除了this.属性名,还可以用this.方法名
