在学习Java中遇见了这个代码:
这里this.name = name 感觉有点不对劲(主要还是不知道this的用法)
于是总结了以下:
一,this.属性名
在大多情况下,我们访问其它方法,成员变量时不需要使用this前缀,但是如果方法里有一个局部变量和成员变量同名,但是程序又需要在这个方法里访问这个被覆盖的成员变量时,必须使用this前缀。
例如:
构造方法
public Teacher(String name,double salary,int age) {
this.name = name; // 设置教师名称
this.salary = salary; // 设置教师工资
this.age = age; // 设置教师年龄
}
这里赋值的name salary age 是
这里传进来的值!
测试代码:
package text;
public class text{
private String name;
private int age;
public text(String name ,int age){
this.name = name;
this.age = age;
}
public static void main(String[] args){
text teather = new text("哈哈",20);
System.out.println("姓名:"+teather.name+" 年纪:"+ teather.age);
}
}
- 当一个类的属性(成员变量)名与访问该属性的方法参数名相同时,则需要使用 this 关键字来访问类中的属性,以区分类的属性和方法中的参数。
同理,当属性名与方法参数名不一样时就可以不需要用:
package text;
public class text{
private String name_1;
private int age_1;
public text(String name ,int age){
name_1 = name;
age_1 = age;
}
public static void main(String[] args){
text teather = new text("哈哈",20);
System.out.println("姓名:"+teather.name_1+" 年纪:"+ teather.age_1);
}
}
二,方法名
通俗的讲就是让类中的一个方法取访问同在一个类下的另一个方法或实例变量。
对比一下
下面是一般操作:
package text;
public class text{
public void way_1() {
System.out.println("way1方法调用成功!");
}
public void way_2() {
text p = new text();
p.way_1();
System.out.println("way2方法调用成功!");
}
public static void main(String[] args){
text a = new text();
a.way_2();
}
}
存在this
package text;
public class text{
public void way_1() {
System.out.println("way1方法调用成功!");
}
public void way_2() {
// text p = new text();
// p.way_1();
this.way_1();
System.out.println("way2方法调用成功!");
}
public static void main(String[] args){
text a = new text();
a.way_2();
}
}
-
不存在的情况也可以:
- (省略 this 前缀只是一种假象,虽然程序省略了调用way_1() 方法之前的 this,但实际上这个 this 依然是存在的。)
package text;
public class text{
public void way_1() {
System.out.println("way1方法调用成功!");
}
public void way_2() {
// text p = new text();
// p.way_1();
// this.way_1();
way_1();
System.out.println("way2方法调用成功!");
}
public static void main(String[] args){
text a = new text();
a.way_2();
}
}
this可以代表任何对象,当this出现在某个方法体中,所指的对象是不确定的,但是类型是确定的,只有方法被调用时,它指代的对象才能被确定下来。
tips:
对于static修饰的方法可以直接使用类来调用,不能使用this引用,即规定:静态成员不能直接访问非静态成员
三,访问构造方法
String name_1;
public text(){
this("构造方法成功!");
}
public text(String name) {
name_1 = name;
}
public void printf(){
System.out.println(name_1);
}
public static void main(String[] args){
text a = new text();
a.printf();
}
String name;
public text(){
this("构造方法成功!");
}
public text(String name) {
this.name = name;
}
public void printf(){
System.out.println(name);
}
public static void main(String[] args){
text a = new text();
a.printf();
}
这里“构造方法成功!”相当于把字符赋给了name。
若有不足欢迎指出。