This
this只能在方法内部使用,表示对调用方法或者属性的那个对象的引用。
public class MyClass {
private String name;
public MyClass() {}
public MyClass(String name) {
this(); // 必须在这个构造器顶部,并且一个构造器只能使用一次this
this.name = name;
}
public void fun1() {
String s = this.name;
this.fun2();
}
public void fun2() {}
}
Static
static是静态数据,静态数据不能调用非静态数据,反过来可以。
static可以修改变量、代码块、方法、类(只能是内部匿名类)。
public class MyClass {
private static String name;
public static void fun() {}
public static void main(String[] args) {
System.out.println(MyClass.name);
MyClass.fun();
}
}
静态数据是在class被loader的时候初始化的;类的属性的初始化是在构造器调用之前被初始化的,所以下面的代码,i的值先是0,然后构造方法把他修改为7.
public class MyClass {
private int i;
public MyClass() {
i = 7;
}
}
Super
super和this一样,可以引用构造器、属性和方法,但是都是父类的:
public class MyClass extends A {
public MyClass() {
super(); // 构造器,必须顶部、一个
}
void fun() {
System.out.println(super.i); // 属性
super.funA(); // 方法
}
}
class A {
int i;
public A(){}
void funA() {}
}