调用成员变量
this 指正在执行的对象。this的另外一个用途就是当方法的局部变量与类成员变量重名时,在方法里面就隐藏了类的成员变量。此时可以通过this.成员变量的方式来访问,如下程序:
//程序1:
public class Student {
String name; //定义学生姓名
public Student(String name) {
this.name=name;//定义构造方法并初始化name
}
public static void main(String []args) {
Student stu=new Student("soft");
}
}
在该例子中,student类的构造方法中存在局部变量name与类成员变量同名的情况下,方法体里面,根据就近原则只看到方法形参的name,而类的成员变量被隐藏,如果需要,可以用this关键字来显示地访问被隐藏的成员变量,因为this是当前对象。
调用其他构造方法
当一个构造方法需要调用此类另一个构造方法时,也可以用this关键字,同时java要求这歌调用语句是整个构造方法的第一行,如下程序:
//程序2:
public class Student {
static String name; //定义学生姓名
public Student(String name) {
this.name=name;//定义构造方法并初始化name
}
public Student() {//定义一个不带参数的构造方法
this("soft");//this.name="soft";这两句效果一样
}
public static void main(String []args) {
Student stu=new Student();
System.out.println(name);
}
}
以下还有两个代码也是体现了this的作用:
//程序3:
public class Student {
static String name; //定义学生姓名
public Student(String name) {
this.name=name;//定义构造方法并初始化name
}
public Student() {//定义一个不带参数的构造方法
this(name);
//this("soft");
//this.name="soft";
//这三句效果一样 ,仔细对比体会用法
}
public static void main(String []args) {
Student stu=new Student("soft");
System.out.println(name);
}
}
public class Demo9_1 {
private String userName,password;
Demo9_1(){ //显示地定义Demo9_1的构造方法
System.out.println("全部为空!");
}
Demo9_1(String name){ //定义构造方法并初始化name
userName=name;
}
Demo9_1(String name,String pwd){//定义构造方法并初始化name和pwd
this(name);//采用this指针,因为参数与类的成员变量重名
password=pwd;
check();
}
//以上有三个构造方法,也叫多态的重载,但是要注意,他们的参数都是不一样的
void check() {
String s=null;
if(userName!=null)
s="用户名"+userName;
else {
s="用户名不能为空!";
}
if(password!="12345678")
s=s+"口令无效";
else {
s=s+"口令:****";
}
System.out.println(s);
}
}