---
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'
例

Compile error
step3發生錯誤
更改方式:加大左側資料型態
例

Compile error
step2發生錯誤
更改方式:加大緩衝區(數值後加L)
例
long z = 22; (數值沒超過,不用加L,浪費記憶體空間)
例

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`