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() {}
}