对象
this—static
this作用
根据this出现的位置不同,this作为对象的默认引用有两种情形:
> 1、在方法中,引用调用该方法的对象。
this关键字最重要的作用就是让类中一个非静态方法访问该类中另一个非静态方法或实例变量。
注意:
1、这里强调“非静态”的原因是虽然在实例方法中可以用this调用静态方法,但是开发中对静态方法调用的调用几乎都用类,而不用this,所以当在实例方法中调用静态方法时,静态方法前啥也不写。
2、类中静态方法之间的调用绝对不能出现this。(因为this代表对象,static调用static的时候,不一定有对象哦!)
3、一般情况下静态方法无论怎样都不能调用实例方法。
4、如果非要在静态方法中访问实例成员,需要在静态方法中定义一个类对象。然后让对象去调用实例成员。(很少用)
例如:
public class Fu01 {
// 实例变量
int a = 2;
// 实例方法1
public void method1(){
System.out.println("实例方法1");
}
// 实例方法2
public void method2(){
System.out.println("实例方法2");
// 实例方法2中访问实例方法1
this.method1(); // this可以省略
this.a = 3; // this可以省略
}
// 静态方法1
public static void methodStatic1(){
System.out.println("静态方法1");
//method1(); // 错误,静态不能调用非静态
}
// 静态方法2
public static void methodStatic2(){
System.out.println("静态方法2");
methodStatic1();
}
}
在真实生活中,实例对象的一个方法调用另一个方法的的情形是非常常见的。例如:吃饭方法依赖于拿筷子方法。这种依赖都是一个实例对象的方法之间的依赖。
因此,java中允许对象的一个成员直接调用另一个成员,也就是可以省略掉this关键字。
> 2、构造器中,引用该构造器正在初始化的对象;
public class ThisInConstructor{
// 定义一个成员变量
public int foo1;
public int foo2
public ThisInConstrutor(){
// 在构造器中定义一个局部变量foo
int foo1 = 3;
// 使用this代表该构造器正在初始化的对象
// 下面的代码将会把该构造器正在初始化的对象的foo成员变量设为6.
// 当成员变量和局部变量同名时,如果想访问成员变量时需要加上this
this.foo1 = 6;
// 当成员变量和局部变量不同名时,如果想访问成员变量时this可加可不加。
foo2 = 8;
this.foo2 = 8;
}
public static void main(String[] args){
// 所有使用ThisInConstrutor创建的对象的foo成员变量都将被设为6
// 所有下面的代码将会输出6.
ThisInConstrutor obj1 = new ThisInConstrutor();
ThisInConstrutor obj2 = new ThisInConstrutor();
System.out.println(obj1.foo); // 6
System.out.println(obj2.foo); // 6
}
}