2016/4/30

不定長度引數

http://www.codedata.com.tw/book/java-basic-source/ch11-2.htm


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20


public class SimpleAdder{
    public int sumOf(int... params){
        int sum = 0;
        for (int i = 0; i < params.length; i++){
            sum = sum + params[i];
        }
        return sum;
    }
 
    public static void main(String[] args){
        SimpleAdder adder = new SimpleAdder();
        System.out.print("1+2+3=");
        System.out.print("1+2+3+4=");
        System.out.print("1+2=");
        System.out.println(adder.sumOf(1, 2));
        System.out.println(adder.sumOf(1, 2, 3));
        System.out.println(
                adder.sumOf(1, 2, 3, 4));
    }}



static:Java為例

本篇參考   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();  // method1() in ClassA
    a.method2();  // method2() in ClassA
    a.method3();  // compile-time error
   }
}
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 變數







建構式之重載(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 class Some {
    private int a = 10;
    private String text = "n.a.";
    public Some(int a) {
        if(a > 0) {
            this.a = a;
        }
    }
    public Some(int a, String text) {
        if(a > 0) {
            this.a = a;
        }
        if(text != null) {
            this.text = text;
        }
    }
    ...}

建構式(Constructor)

建構式(Constructor):與class同名,是class中一開始執行的method,不用宣告回傳型態

建構物件時,資料成員會初始化,如沒指令初始值,系統會給預設值

資料型態初始值
byte0
short0
int0
long0L
float0.0F
double0.0D
char\u0000
booleanfalse
類別null

public:Java為例

並參考  http://openhome.cc/Gossip/Java/Public.html

有沒有一種情況,你在寫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

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的文章編輯功能真的很爛...