①this关键字只能在方法内部使用
②this表示对“调用方法的那个对象”的引用–《Thinking in java》
1、this.属性名
// 创建构造方法,为属性赋初始值
public Teacher(String name,double salary,int age) {
this.name = name; // 设置名称
this.salary = salary; // 设置工资
this.age = age; // 设置年龄
}
在 构造方法中使用 this 关键字对属性 name、salary 和 age 赋值,this 表示当前对象。this.name 指当前对象具有的变量 name,右边的 name 表示参数传递过来的数值。
2、this.方法名
/**
* 第一种定义Dog类方法
**/
public class Dog {
public void jump() {
System.out.println("正在执行jump方法");
}
public void run() {
Dog d = new Dog();
d.jump(); //run方法调用jump方法。
System.out.println("正在执行 run 方法");
}
}
public class DogTest {
public static void main(String[] args) {
Dog dog = new Dog();
dog.run();
}
}
上述代码中:
一、main方法与run方法中各创建了一个Dog类的对象。
二、又可知run方法中要调用jump方法必须得new一个Dog类对象
/**
* 第二种定义Dog类方法
**/
public void run() {
// 用this调用run方法对象。思路见开头第二点,即(This:dog)
this.jump();
System.out.println("正在执行run方法");
}
Java 允许对象的一个成员直接调用另一个成员,可以省略 this 前缀。即可以改为如下形式:
public void run() {
jump();
System.out.println("正在执行run方法");
}
static 修饰的方法中不能使用 this 引用。并且 Java 语法规定,静态成员不能直接访问非静态成员。
如果传递一个对象的引用到静态方法里(静态方法可以创建其自身的对象),然后通过这个对象的引用(效果和this相同),就可以调用非静态方法和访问非静态数据成员了。
省略 this 前缀只是一种假象,虽然程序员省略了调用 jump() 方法之前的 this,但实际上这个 this 依然是存在的。
3、this( )访问构造方法
this( ) 用来访问本类的构造方法,括号中可以有参数,即调用有参构造方法。
public class Student {
String name;
public Student() {// 无参构造
this("张三");
}
public Student(String name) {// 有参构造
this.name = name;
}
public void print() {
System.out.println("姓名:" + name);
}
public static void main(String[] args) {
Student stu = new Student();
stu.print();
}
}
注:
this( ) 不能在普通方法中使用,只能写在构造方法中。
在构造方法中使用时,必须是第一条语句。