1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
2016/4/30
static:Java為例
本篇參考 http://openhome.cc/Gossip/Java/Static.html
如果你建立了多個Ball物件,那每個物件都有自己的資料成員,如下圖:
PI明明是固定的,這樣豈不是浪費記憶體嗎?這時可用static
PI就不會被物件個別擁有,而會屬於class,如下圖:
被宣告成static成員,將類別名稱作為名稱空間,現在可以這樣取得PI:
System.out.println(Ball.PI);
透過class名稱.operator,直接取得static成員
也可將method宣告成static:
現在可以透過class.operator來呼叫static的method
System.out.println(Ball.toRadians(100));
你可能會想說就算不用static也可以存取資料物件啊,像這樣:
看了原作者的說明,它只是什麼命名原則,但我還是不懂為何不能這樣new,要用static,只知道命名最好class名稱都首字大寫,
method名稱首字小寫
所以現在我們知道常用的System.out System.in 就是static成員了
System.out.println(Math.PI);也是
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 變數
1 2 3 4 5 |
|
如果你建立了多個Ball物件,那每個物件都有自己的資料成員,如下圖:
PI明明是固定的,這樣豈不是浪費記憶體嗎?這時可用static
1 2 3 4 5 |
|
PI就不會被物件個別擁有,而會屬於class,如下圖:
被宣告成static成員,將類別名稱作為名稱空間,現在可以這樣取得PI:
System.out.println(Ball.PI);
透過class名稱.operator,直接取得static成員
也可將method宣告成static:
1 2 3 4 5 6 7 |
|
現在可以透過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(); // method1() in ClassA a.method2(); // method2() in ClassA a.method3(); // compile-time error } } |
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 變數
建構式之重載(Overload)與this:Java為例
本篇參考
http://openhome.cc/Gossip/Java/Overload.html
http://openhome.cc/Gossip/Java/This.html
http://programming.im.ncnu.edu.tw/J_Chapter5.htm
視不同情況,有時會有很多個建構式,只要參數型態或個數不同,這稱之為重載(Overload)建構式,如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
public:Java為例
並參考 http://openhome.cc/Gossip/Java/Public.html
有沒有一種情況,你在寫java程式時,你要import一些東西,紅字才會不見,通常這情況下,import的java檔會在另一個package
來說說public
在承上篇文章中,Main.java和CashCard.java都在同個Package底下
現在我們把CashCard.java放到另一個package叫virtual
你會發現
這時只要上面加個import virtual.CashCard;就可以了
但import virtual.CashCard;這行還是錯!!
這時你就要用到public了
請在CashCard.java前面加上public
如果你要在其他package中存取其他class的資料物件成員,那被存取的那個class要加上public
但換到這三行錯誤...???
好...請去把CashCard.java中的method都加上public
是不是就好了呢?
總結:
public可放三個地方
1.class
2.method、constructor
3.你願意的話,資料物件成員也可
被加上去的東西,表公開的,可被其他package中的類別所使用
有沒有一種情況,你在寫java程式時,你要import一些東西,紅字才會不見,通常這情況下,import的java檔會在另一個package
來說說public
在承上篇文章中,Main.java和CashCard.java都在同個Package底下
現在我們把CashCard.java放到另一個package叫virtual
你會發現
1 2 3 4 5 6 7 | package Package1; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); CashCard card1 = new CashCard("A001", 500, 0);//編譯錯誤 card1.store(sc.nextInt()); |
這時只要上面加個import virtual.CashCard;就可以了
但import virtual.CashCard;這行還是錯!!
這時你就要用到public了
請在CashCard.java前面加上public
1 2 3 4 5 6 7 8 9 10 | package virtual; public class CashCard { private String number; private int balance; private int bonus; CashCard(String number,int balance,int bonus){ this.number = number; this.balance = balance; this.bonus = bonus; } |
如果你要在其他package中存取其他class的資料物件成員,那被存取的那個class要加上public
但換到這三行錯誤...???
1 2 3 | CashCard card1 = new CashCard("A001", 500, 0);//失敗 card1.store(sc.nextInt());//失敗 System.out.printf("%d",card1.getBalance());//失敗 |
好...請去把CashCard.java中的method都加上public
是不是就好了呢?
總結:
public可放三個地方
1.class
2.method、constructor
3.你願意的話,資料物件成員也可
被加上去的東西,表公開的,可被其他package中的類別所使用
NodeMCU API筆記
節點模組(node module):提供系統級的功能
node.restart():重起系統晶片chip
wifi模組(wifi module):提供wifi相關功能
wifi.setmode():設置wifi模式
Parameters
wifi.STATION:用於連接wifi的路由器
wifi.sta.status():獲取現在wifi連線狀態
Return
0: STATION_IDLE, 閒置中
1: STATION_CONNECTING,連接中
2: STATION_WRONG_PASSWORD,密碼錯誤
3: STATION_NO_AP_FOUND,找不到AP
4: STATION_CONNECT_FAIL,連接錯誤
5: STATION_GOT_IP.取得IP
1: STATION_CONNECTING,連接中
2: STATION_WRONG_PASSWORD,密碼錯誤
3: STATION_NO_AP_FOUND,找不到AP
4: STATION_CONNECT_FAIL,連接錯誤
5: STATION_GOT_IP.取得IP
wifi.sta.config():設置要連接的wifi AP帳號密碼
wifi.sta.config("myssid", "password")
GPIO模組(GPIO module)
IO index
|
ESP8266 pin
|
IO index
|
ESP8266 pin
|
0 [*]
|
GPIO16
|
7
|
GPIO13
|
1
|
GPIO5
|
8
|
GPIO15
|
2
|
GPIO4
|
9
|
GPIO3
|
3
|
GPIO0
|
10
|
GPIO1
|
4
|
GPIO2
|
11
|
GPIO9
|
5
|
GPIO14
|
12
|
GPIO10
|
6
|
GPIO12
|
gpio.mode():將GPIO腳位設為輸出
gpio.write():設置要輸出信號的GPIO腳位
覺得XUITE的文章編輯功能真的很爛...
訂閱:
文章 (Atom)