本篇參考
http://openhome.cc/Gossip/Java/Static.html
1
2
3
4
5
|
class Ball {
double radius;
final double PI = 3.14159;
...}
|
如果你建立了多個Ball物件,那每個物件都有自己的資料成員,如下圖:
PI明明是固定的,這樣豈不是浪費記憶體嗎?這時可用static
1
2
3
4
5
|
class Ball {
double radius;
static final double PI = 3.141596;
...}
|
PI就不會被物件個別擁有,而會屬於class,如下圖:
被宣告成static成員,
將類別名稱作為名稱空間,現在可以這樣取得PI:
System.out.println(Ball.PI);
透過class名稱.operator,直接取得static成員
也可將method宣告成static:
1
2
3
4
5
6
7
|
class Ball {
double radius;
static final double PI = 3.141596;
static double toRadians(double angdeg) {
return angdeg * (Ball.PI / 180);
}}
|
現在可以透過class.operator來呼叫static的method
System.out.println(Ball.toRadians(100));
你可能會想說就算不用static也可以存取資料物件啊,像這樣:
1
2
3
4
5
6
7
8
9
10
11
12
|
class Ball {
double radius;
final double PI = 3.14159;
double toRadians(double angdeg) {
return angdeg * (PI / 180);
}}
public class Main {
public static void main(String[] args) {
Ball ball = new Ball();
System.out.println(ball.PI);
System.out.println(ball.toRadians(100));
|
看了原作者的說明,它只是什麼命名原則,但我還是不懂為何不能這樣new,要用static,只知道命名最好class名稱都首字大寫,
method名稱首字小寫
所以現在我們知道常用的System.out System.in 就是static成員了
System.out.println(Math.PI);也是
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| class ClassA {
static void method1() {
System.out.println("method1() in ClassA");
}
static void method2() {
System.out.println("method2() in ClassA");
}
}
class ClassB extends ClassA {
static void method1() {
System.out.println("method1() in ClassB");
}
static void method3() {
System.out.println("method3() in ClassB");
}
}
public class ClassC {
public static void main(String[] args) {
ClassA a = new ClassB();
a.method1();
a.method2();
a.method3();
}
}
|
method1 method2 method3都屬static,和多行無關,編譯器直接使用靜態連結(static link),而不會留到執行期才動態地決定真正該呼叫的 method 為何。因為編譯器在編譯期就做必須決定 method, 所以編譯器完全依賴形式型態,
這麼一來「a.method1()」等於是「ClassA.method1()」, 「a.method2()」等於是「ClassA.method2()」。
static重點:
1.不能用this
2.只有static能用static
3.屬class層級擁有的成員
4.存取static資料成員語法 class名稱.變數名稱,存取static method語法 class名稱.method名稱(參數1,參數2)
5.static method不能直接用instance變數,與instance method,必須在static method中建立物件,並使用物件參考名稱才可用instance method與instance變數
6.instance method可直接用static method與static 變數
The King Casino | Situs Judi Slot Online Terbaik 2021
回覆刪除Play ford fusion titanium online https://deccasino.com/review/merit-casino/ Pragmatic Play Slots https://vannienailor4166blog.blogspot.com/ at The King Casino - Member Baru & Terpercaya 2021! Rating: 98% · https://septcasino.com/review/merit-casino/ 240,388 votes