--- tags: Java, Development, Software, --- # Java note01 ### 程序導向 以自訂函數/程序為單元 1.自訂函數 說明:有回傳值 2.自訂程序 說明:無回傳值→void ### 物件導向 以類別(class)為程序單元 1. 類別(class):定義工具箱(計畫) 2. 物件(object):列別的實體 3. 成員(member): 1.屬性(field):即變數 2.方法/成員方法(method):自訂函數 3.建構(constructor):建立物件時必須叫用的函數 <table style="text-align:center; width:100%; "> <colgroup span="4"></colgroup> <tr> <th style="text-align:center">程序導向</th> <th style="text-align:center">混合</th> <th style="text-align:center">物件導向</th> </tr> <tr> <th style="text-align:center">C</th> <th style="text-align:center">C++,python,PHP,JavaScript,VB ...</th> <th style="text-align:center">java , C#</th> </tr> </table> --- ### Package命名方式--- 以domain name(網址www....)反向寫 例.幫海乘科技寫一個套件工具(www.hoceantek.com) com.hoceantek 說明文件產生方式: \/** */註解 e.g. cmd>>javadoc Mytool.java -->(index.html) ### 使用有套件路徑的類別--- 方式1.使用命名 ``` com.hoceantek.Mytools obj = new tw.com.lccnet.Mytools(); ``` 方式2.以import簡化 1. ``` import com.hoceantek.Mytools; Mytools obj = new Mytools(); 2. import com.hoceantek.*; Mytools obj = new Mytools(); ``` (有套件路徑 +參數-d ) ``` javac -d . Sayhi.java javac -d . Hello2.java -->com\hoceatek\Sayhi.class -->kuo\Hello2.class java kuo.Hello2 ``` package 在同個路徑則無需使用import --- ### 基本資料型態--- #### 整數--- | 整數型態| 記憶體配置|值域 | |:------:|:-----:|:-----:| |byte| 8 bit |-128~127| |short |16 bit| -32768~32767 | |int |32 bit| +-21E | |long |64 bit |略| 說明:允許以二進位八進位十進位十六進位來表示數值大小 #### 浮點數--- |浮點數型態|值域| |:------:|:-----:| |float |小數有效位數7位| |double |小數有效位數15位| #### 字元--- 1. 採用16bit的unicode:"A"字串,'A'字元 2. 跳脫字元: 例'\n' 例 ![](https://i.imgur.com/YaR0Qmt.png) Compile error step3發生錯誤 更改方式:加大左側資料型態 例 ![](https://i.imgur.com/zJyEBVl.png) Compile error step2發生錯誤 更改方式:加大緩衝區(數值後加L) 例 long z = 22; (數值沒超過,不用加L,浪費記憶體空間) 例 ![](https://i.imgur.com/pbBJaIb.png) compile error 處理方式:縮小緩衝區 在數值後加F 例 float y = 123; //不用加F --- ### 一維陣列--- 說明:1.是以一個變數要求配置若干個相同型態的連續空間。 2.區分為一維與多維 宣告: 1.`資料型態[] 陣列名稱 ` java (java原廠希望我們這樣寫) 2.`資料型態[] 陣列名稱` c,c++ (c,c++只能這樣寫) 1. 每個儲存空間稱為"元素" 2. element以"索引"管理,數值由0起算,如num[0],num[1] 3. 陣列建立後大小不能變更 4. 陣列提供唯獨的屬性"length"來記錄陣列的大小(final variable) ```java int[] nums={98.60,75,100,85}; //JavaEE,JavaSE int[] nums= new int{98.60,75,100,85}; //JavaME ``` --- ### String類別--- 說明: 套件路徑在**java.lang** 字串的其他類別有: |1.StringBuffer |Java SE |Java EE| | |:------:|:-----:|:-----:|:------:| |2.StringBuilder | Java SE| Java EE |Java ME| |3.CharSequence | | | Java ME| #### 建立物件: ```java String 物件 = new String (字串變數) String 物件 = new String (字元陣列) String 物件 = new String (byte陣列 字元碼) ``` #### 物件方法: 1. **length()**---取得字串長度 2. **equals()**---比較字串內容是否相同 3. **charAt(索引)**---取得索引所對應的字元 4. **toCharArray()**-把字串拆解成字元陣列 5. **getBytes()**---將字串拆解成byte陣列 --- ### 標準輸入--- #### 輸入字元-- 語法 ```java char 變數=(char) System.in.read() ``` 說明: System.in是指鍵盤緩衝區 (System.out\System.err)則是指螢幕緩衝區 #### 輸入字串- 說明:使用Scanner類別,套件路徑在java.util 語法: ```java Scanner 物件 = new Scanner(System.in); String 物件2 = 物件.nextLine() ``` 註:會自動處理"\r,\n" #### 數字字串轉數值--- 說明:使用Integer,Double類別,套件路徑在**java.lang** 例 "123" ------→123 "1.234"-----→1.234 語法: ```java 1.int 變數 = Integer.parseInt (數字字串) 2.double 變數 = Double.parseDouble (數字字串) ``` 註:轉換工具不具備資料的檢查功能 #### 資料型態轉換--- byte----→Byte short---→Short int-----→Integer long----→Long float---→Float double--→Double ```java char 變數 = (char)System.in.read() ``` ---→進入鍵盤緩衝取,讀取一個字元碼 ```java import java.util.Scanner Scanner 物件 = new Scanner(System.in) String 物件2 = 物件.nextLine() ``` →以列為單位讀取資料(含\r,\n) 註: **System.in** 表示鍵盤緩衝區 **System.out/System.err** 表示螢幕緩衝區 ```java int 變數 = Integer.parseInt (整數字串) double 變數 = Double.parseDouble (浮點數字串) ``` ### Console類別--- 1.套件路徑在 java.io 2.建立物件 Console 物件 = System.console() 3.方法 (1)char[] 密碼字串 = 物件.readPassword("提示文字") (2)String 字串 = 物件.readLine("提示文字") e.g. ```java System.out.print("輸入姓名"); String name = Scanner 物件.nextLine(); String name = Console 物件.readLine("輸入姓名"); ``` #### 字元陣列 轉成 字串物件-- String 字串 = new String(字元); if(a>b) 可寫成 max = a>b?a:b; max=a; max = (a>b)?a:b; else max=b; String result = grade>=60?"及格":"不及格"; --- #### 物件間的比較- 1. **==** 說明:表示兩個務間共用實體 2. **equals()** 說明:表示要比較物件的內容,回傳true,false e.g. ```java String str1 = "abcd"; String str2 = "abcd"; System.out.println(str1.equals(str2)); ->true System.out.println(str1 == str2); ->true ``` e.g. ```java String str3 = new String("abcd"); String str4 = enw String("abcd"); System.out.println(str3.equals(str4)); ->false System.out.println(str3==str4;) ->false ``` (用new出來的新字串,heap記憶體空間不同) 3.**compareTo()** 說明: 1. 比較物件的大小 2. 不同物件表示大小的方式不同 a.Byte,Short:回傳數值的差值(相減) b.Integer,Long,Double,Float:回傳-1,0,1 c,Character:回傳字元碼的差值 d.boolean回傳0,-1,1 e.回傳對位相異字元的字元碼差值 ### 類別方法與物件方法--- 1.語法 [public] static 回傳值型態 函數名稱([參數]){主體} -類別方法 [public] 回傳值型態 函數名稱([參數]){主體} -物件方法 因人而異的是物件方法,不會因人而異的是類別方法 會因為類別而有所不同的是物件方法,所以要建立物件->物件方法 e.g. 三角函數sin,cos 圓周率PI 為類別方法 (會有static) 3.配置的時機 1.類別方法:載入時 2.物件方法:建立物件時 e.g. ```java class MyTools { static void showA(){...} void showB(){...} } ``` -->MyTools.class 叫用showA()以類別名稱來區分 MyTools.showA() step1:載入 static記憶體空間 step2:建立物件 MyTools oo = new MyTools(); MyTools pp = new MyTools(); | stackm | heap | static | |:------:|:-----:|:-----:| pp showA showA oo showB (個別) (共用) oo.showB ~= pp.showB oo.showA == pp.showA #### ceil()-無條件進位 #### round()-四捨五入到個位數 1.參數是float,回傳值是int 2.參數是double,回傳值是long e.g. ```java int x = math.round(123.4); ``` 上述的敘述在Conpile時是否發生Error 修正: 1.int x=(int)Math.round(123.4); 2.int x=Math.round(123.4); 3.long x=Math.round(123.4); **rint()**---四捨六入到個位數 小數第一位的5進位的原則 1.個位數是奇數:進位 2.個位數是偶數:捨去 回傳值是double e.g. ```java Math.rint(123.4)-->123.0 Math.rint(123.5)-->124.0 Math.rint(124.5)-->124.0 Math.rint(123.6)-->124.0 ``` #### 亂數產生器- 1.**random()** 例: 產生:0.0 ≦ ... < 1.0間的亂數 產生1~6(123456)的亂數 ```java 0.0<=math.random()<1.0 0<=(int)(math.random()*6)<6 1<=(int)(math.random()*6)+1<7 ``` 公式:產生1~n的亂數 ```java (int)(math.random()*n)+1 ==(int)(math.random()*n+1) ``` 2.**Random**類別 1.套件路徑 **java.util** 2.建立物件: ```java Random 物件=new Random(); ``` e.g. (0~5) ```java 物件.nextInt(6) ``` #### 資料的排序- 使用類別**Arrays** 1.套件路徑在 java.util.* 2.使用的方法: ```java 1. Arrays.sort(基本資料型態[]) //由小而大排序 2. Arrays.sort(基本資料型態[],index1,index2) //索引1到索引2,-1個元素由小而大排序 3. Arrays.sort(類別型態[]) //由小而大排序 4. Arrays.sort(類別型態[],Collections.reverseOrder()) //由大而小排序 ``` 註: **Collections** 套件路徑在**java.util** 類別方法 **reverseOrder()** 是建立一個由大而小的排序原則物件 ### 迴圈--- 選錯迴圈不會導致程式錯誤,只是會寫or執行的比較冗長 說明: 1.Java提供四種迴圈,分別是: 1. while 1. do while 1. for 1. Enhance for 2.挑選迴圈的原則 1. 迴圈數可數 for 1. 先執行後判斷 do while 1. 對象是一個容器(list,set,Map,Quere) Enhance for #### Switch--- 語法: ```java switch(運算式) { case 結果值1: 主體1 case 結果值2: 主體2 case 結果值3: 主體3 : : } ``` 說明: 1.switch是單條件混合的語法 但在大多數情況都被寫成[單進] 2.運算式的結果可以式 "int" "char" "String" 3.每個case代表一個[入口] ###### tags: `Java` `Development` `Software`