發表文章

目前顯示的是 3月, 2017的文章

System.in & System.out & System.err

從這篇連結擷取自己想要的部分:  https://blog.yslifes.com/archives/821 Java的輸出及輸入控制大都定義在java.io.*裡, Java IO大概分成2大類: 1. byte的讀取與寫出,可讀取寫入二位元binary的資料; 2. char的讀取與寫入,提供文字的讀取與寫入。 System類別並不屬於java.io的套件,而是屬於java.lang套件,在使用時預設載入,所以並不需要特別去import它。 1. System.in --> 通常是指鍵盤的輸入,為java.io.InputStream類別 System.in: System.in為InputStream串流類別,可直接使用: - read(byte[]) 來取出輸入內容 - read() 取出每次輸入的ascii數字(再轉換成字元char) - 利用 BufferedReader 來直接讀取一行內容等等 p.s. 鍵盤的輸入完成預設為enter鍵,也就是\r\n。 (char)read(): 因對於中文字部份無法判別,需要先把讀入的字元全部放進一個char 陣列,再利用 new String(char[]) 來使中文字正常 (p.s 請見連結內的example code: 連結: https://blog.yslifes.com/archives/821 ) 2. System.out --> 通常是指Console螢幕輸出,為java.io.PrintStream類別 3. System.err --> 同System.out,主要是用在系統出錯時輸出至Console螢幕 (p.s. Java本身在處理字串時均是使用utf8 uncode的方式,不過在Windows的Console(螢幕)字串的顯示與輸入都是使用ISO-8859-1編碼,所以需要先把字串轉換成Big5再行輸出,在Linux上則不會有這種問題。) 文章參考來源:  https://blog.yslifes.com/archives/821

ArrayList

ArrayList的相關方法:     - add(Object elem) : 新增物件參數到ArrayList        p.s. add(Int, Object) --> 可依指定索引值去新增物件     - remove(int index) : 從索引參數移除對應的物件     - remove(Object elem) : 移除物件(如果該物件有在ArrayList裡的話)     - contains(Object elem) : 如果有該物件參數, 則返回true     - isEmpty() : 如果ArrayLista沒有元素時, 則返回true     - indexOf(Object elem) : 如果有找到該物件的索引值,則返回其索引值; 如果沒有找到該物件的索引值,則返回-1     - size() : 返回目前在ArrayList中有多少個元素     - get(int index) : 返回目前該索引值所對應的物件 p.s. Java 5.0中的ArrayList是參數化的(parameterized):       e.g. ArrayList<Egg> myList = new ArrayList<Egg>();             --> 代表建構出Egg型別的ArrayList       e.g. ArrayList<String> myList = new ArrayList<String>();             --> 代表建構出String型別的ArrayList p.s. ArrayList和一般陣列不同,       --> 如在刪除某元素時,             在ArrayList的操作: myList.remove(1);             在一般陣列的操作: myList[1] = null;       --> 如想知道是否含有b元素,             在ArrayList的操作:                 boolean isIn = myList.contains(b);             在一

轉貼JS blog文: socket介紹

畢竟是Java中的socket介紹, 所以轉貼一下 連結:  https://lucrelin.blogspot.tw/2017/03/socket.html

如何建立建構子(constructor)?

連結:  http://pydoing.blogspot.tw/2010/11/java-constructor.html 這篇寫的簡潔明白, 無法擷取, 都是重點...

cast運算元

用途: 用於強制型別轉換 之前在講到primitive時, 有說過較小型別的primitive不能裝在較大型別的primitive, 但是如果要硬來, 把較大型別的primitive塞進較小型別的primitive, 就用cast達到目的。 e.g. long y = 40002; short x = (short) y;  // x = -25534; p.s. short的值域: -32768到32767 e.g. float f = 3.14f; int x = (int) f;  // x = 3; 以上標橘底為cast運算元。

加強版的for loop

從Java 5.0 (Tiger)開始有加強版的for loop, 優點: 可對"陣列"或"其他集合(collection)"的元素做輪巡(loop through) 寫法: for (String name: nameArray) {} --> 如果以中文解釋上面在做啥: "對nameArray中的每個元素執行一次" 編譯器會如何判定上述寫法: a. 建立名稱為name的String變數 (注意: 此變數型別要和陣列元素相容) b. 把 nameArray的第一個元素值指派(assign)給name (注意: ":"代表"in") c. 執行重複的內容(也就是{}中的statements) d. 指派下一個元素值給name e. 重複執行到所有元素都被輪巡完為止

使用==比較兩個primitive或判別兩個reference是否參照同一個物件

當使用==比較兩個primitive, 我們不在意兩個型別是否一樣, 只在意兩個位元組合是否相等, e.g. int a = 3; byte b = 3; if (a == b)  {  // true  } 當使用==比較兩個reference是否參考同一個物件, 我們不在意兩個物件上意義是否相等, 只在意兩個reference是否參考、指向同一個物件, e.g. Foo a = new Foo(); Foo b = new Foo();  --> 又和記憶體要一個新空間, 所以和 a 要的原本的記憶體空間是不同的, 也因此是新的物件 Foo c = a; if (a == b) {  // false  } if (a == c) {  // true  } if (b == c) {  // false  } p.s. 真的要看兩個物件意義上是否相等, 用equals()看。

instance variables v.s. local variables

兩者差別: 1. instance variables是宣告在class內, 而非method內 2. local variables是宣告在method內 3. local variables在使用前必須初始化過。    e.g.      class Foo {        public void go() {            int x = 2;   --> 錯誤寫法: int x; (這樣編譯器會報錯)            int z = x + 3;        }    } 注意: local variables沒有預設值, 而instance variables一定有預設值(不管開發者有沒有設)

實體變數(instance variables)永遠都有預設值

integers(包括char) 預設值為0 floating points 預設值為0.0 booleans 預設值為false references(物件參考) 預設值為null (注意: null代表沒有操作對象的"指位標", 它是個參考, 而非物件本身) 以下這麼寫仍會有預設值: e.g. int size; String name;

隱藏資料--封裝的基本原則

封裝的基本原則: 將instance variables標示為private 將getters與setters標示為public --> 利用getters和setters控制存取動作 這樣能維持安全性 e.g. class GoodDog { private int size; public int getSize() { return size; } public void setSize(int s) { size = s; } void bark() { if (size > 60) { System.out.println("Wooof! Wooof!"); } else if (size > 14) { System.out.println("Ruff! Ruff!"); } else { System.out.println("Yip! Yip!"); } } } class GoodDogTestDrive { public static void main (String[] args) { GoodDog one = new GoodDog(); one.setSize(70); GoodDog two = new GoodDog(); two.setSize(8); System.out.println("Dog one: " + one.getSize()); System.out.println("Dog two: " + two.getSize()); one.bark(); two.bark(