筆記:
上述的文章中,贅詞太多,我精簡改述。
Static | 用法或定義 |
Class | 1. 靜態屬性 ,如果不是靜態內部類別,不能定義成 Static方法或屬性,必須要加上final 成為 static final 方法或變數才行。
2. 是成員的引用上。一般的非靜態內部類,可以隨意的使用外部類中的成員變量與成員方法,private的方法或變數也可以。 在靜態內部類中,只能引用外部的靜態變數或方法。 3. 建立靜態類內部實體時,不需要其外部類別的實體。建立非靜態內部類別實,一定要先建立外部類別實體,才能建立非靜態內部類別。 |
Var |
修飾詞加在任何的前面,都視為靜態 |
Function | 靜態方法可以直接通過類別名直接使用,任何的實體也都可以用,因此靜態方法中不能用this和super關鍵字,不能使用外部非 static的變數 跟方法,static方法獨立於任何實體,因此static方法必須被實體化,不能是抽象的abstract。 |
{} | 初始化使用,每次建立一個類別實體,使會建構一次,不論夾在任何位置,都是只會最優先產生出一次 |
package test;
public class TEST2 {
int T2int;
static int Static_TEST_int;
static class static_class {
static int j = 0;
int testInt;
static {
System.out.println("static_class建置了");
}
{
System.out.println("static_class建置幾次: " + j);
j++;
}
static void staticfunction() {
System.out.println("TEST2的staticfunction被呼叫了");
} //非靜態內部類別 能用static的方法
void out() {
// System.out.println("static_class建置幾次: " + TEST2int); //一定要用內部變數,或外部的靜態變數
System.out.println("變數J: " + j);
System.out.println("變數testInt: " + testInt);
System.out.println("變數Static_TEST_int: " + Static_TEST_int);
}
}
class Non_static_class {
//static void yoyo() {} //非靜態內部類別 不能用static的方法
void out() {
System.out.println(": " + T2int); //非靜態內部類別,可以使用外部非靜態的變數
System.out.println(": " + Static_TEST_int);
}
// static int iii = 0; //出錯
}
static void OutSaticfunction() {
// System.out.println(": " + T2int); //靜態方法不能使用 外部 非靜態的變數、方法
int tt = Static_TEST_int;
}
public static void main(String[] args) {
static_class SC = new static_class();
static_class SC2 = new static_class();
SC.testInt = 99;
SC2.testInt = 100;
System.out.println(static_class.j);
System.out.println(SC.testInt);
System.out.println(SC2.testInt);
test3.static_function_test3(); //static方法 可以直接呼喚
static_class.staticfunction(); //可以直接呼叫靜態內部類別的 靜態方法
OutSaticfunction(); //靜態方法可以直接呼叫
// TODO Auto-generated method stub
test3.Static_innerclass Add1 = new test3.Static_innerclass();
test3.Static_innerclass Add2 = new test3.Static_innerclass();
Add1.addj();
Add2.addj();
System.out.println(Add1.j); //1
System.out.println(Add2.j); //1 雖然在靜態類別內,但 非靜態方法跟變數 還是會產生新的
}
}
class test3{
static class Static_innerclass{
int j;
void addj() {
j++;
}
}
static void static_function_test3() {
System.out.println("test3的static_function_test3被呼叫了");
}
}
/*
Output:
static_class建置了
static_class建置幾次: 0
static_class建置幾次: 1
2
99
100
test3的static_function_test3被呼叫了
TEST2的staticfunction被呼叫了
1
1
*/
@copyright MRcodingRoom
觀看更多文章請點MRcoding筆記
觀看更多文章請點MRcoding筆記