关于Java语言中的this关键字
static
的方法中测试1:
public class Customer { // 姓名 String name; // 构造方法 public Customer(){ } // 顾客购物的行为 // 不带 static 关键字 // 没有 static 的变量和方法分别称为实例变量和实例方法 // 实例变量和实例方法的调用需要使用引用 // 因为没有一个顾客购买不同,所以该方法应使用实例方法 // 注意:当一个行为?动作在执行过程中涉及对象的参与,应该使用实例方法【不带static关键字】 public void shopping(){ System.out.println(this.name + "在购物"); // this 代表当前执行该实例方法的对象引用 } public static void doSome(){ // System.out.println(name); 报错 // 这个执行过程中没有“当前对象”,因为带有static的方法是 类.方法 // name 实例变量,上述代码表示:访问当前对象的实例变量name // System.out.println(this); 报错 // 使用static方法调用不需要对象,直接使用类名,所以执行过程中没有当前对象 } }
public class ThisTest01{ public static void main(String[] args) { // 创建Customer对象 Customer c1 = new Customer(); c1.name = "jock"; // 创建Customer对象 Customer c2 = new Customer(); c2.name = "rose"; // 顾客购物 c1.shopping(); c2.shopping(); // 带static的方法 Customer.doSome(); } }
测试2:
public class ThisTest02 { // 实例变量(引用) int num = 10; public static void main(String[] args){ // System.out.println(num); 报错 // this 或 实例变量 不能使用在有 static 的方法中 // System.out.println(this.num); 报错 // 与上面一样 } }
测试3:
public class ThisTest03 { public static void main(String[] args) { // 调用doSome方法 ThisTest.doSome(); // 或者 doSome(); // 调用doOther方法 // ThisTest.doOther() 报错 // 实例方法需要引用和对象,但目前在类自身中 // this.doOther(); 报错 // 因为 main 方法是静态方法带有static } // 带有static 静态方法 public static void doSome() { System.out.println("do some!"); } // 不带static 实例方法 public void doOther() { System.out.println("do other!"); } // 实例方法 public void run() { // 想要运行run实例方法,需要有对象 System.out.println("run !"); doOther(); // 成功调用 // 运行run说明已经有对象,所以doOther能调用 this.doOther(); // 同理 } }
结论:
this什么时候不能省略
this
不能省略public class User { private int id; private String name; /* public void setId(int a) { id = a; } */ // 传入参数与id不同可以区分,id是实例变量,a是传入参数 /* public void setId(int id) { id = id; } */ // 传入参数与id相同,由于就近原则传入参数为前一个id,后一个是实例变量 // 上述两种含义不同,前者是:实例变量 = 传入参数;后者是:传入参数 = 实例变量 // 传入参数与id相同应该用 public void setId(int id) { this.id = id; } }
this可以使用在哪里?
可以使用在实例方法当中,代表当前对象
语法格式:this.
可以使用在构造器【构造方法】当中,通过当前的构造方法调用其他的构造方法
语法格式:this(实参列表);
重点:this()
只能出现在构造函数第一行