# [Java] 初學用的一些筆記 ###### tags: `Java` [TOC] ## :triangular_flag_on_post:特色 - 跨平台(cross-platform) *"write once run anywhere"* - 物件導向(object-oriented)程式語⾔,不使⽤指標功能 - ⽀援泛型(generics)設計 - ⽀援並⾏(concurrent)處理 ## :triangular_flag_on_post:版本 - Java SE (Standard Edition) 標準版,開發個⼈電腦應⽤程式 (client-side application) - Java EE (Enterprise Edition) 企業版,開發伺服端應⽤程式 (server-side application) - Java ME (Micro Edition) 微型版,開發嵌入式應⽤程式 (embedded application) ## :triangular_flag_on_post:編譯(complie) Java原始程式(.java)經過編譯後產生中介文件Java bytecode(.class),並交予JVM解譯產生結果 *不同平台的JVM,會轉譯Java bytecode(.class)為適合該平台的機械碼後執行 - **JDK (Java Development Kit)** - 包含Java編譯器、JVM與JavaAPI - Java的開發工具,適用於開發人員 - **JRE (Java Runtime Environment)** - 包含JVM `(.../jre/bin/lib)` 與JavaAPI `API (.../jre/bin/server)` - Java的執行環境,適用於一般使用者執行 ### JDK編譯與執行指令 - 編譯Java檔案 `javac FileName.java` - 執⾏class檔案 `java FileName` - 查詢版本 `javac -version` `java -version` ## :triangular_flag_on_post: 原始程式(.java)由三部分組成(P.I.C) - **package(套件)** ```java //方式1 package packageName; //方式2 package packageName1.packageName2.packageName3…; ``` - **import(引入、匯入)** java.lang會自動匯入 ```java import java.util.java; //可匯入單個類別 import java.util.*; //可匯入整個套件,此方法只能省掉最後一段 ``` - **class(類別)** 一個class裡只能有一個公用類別(public class),但類別(classes)可以有多個 ```java public class ClassName { } public static void main(String[] args) { } //宣告(可與static互換位置) 存取權限 表示執行完該函數會傳回值(可略) 主函數 參數 引數 ``` ## :triangular_flag_on_post: 命名規則 - Java區分大小寫 + **關鍵字(keyword)**:Java定義的名稱 - 全部小寫,如: `package` `import` `if` `for` `else` + **識別字(identifier)**:可自定義的名稱,如變數、函數、類別、標籤 - 由大小寫字母、數字、`_`、`$`..等組成 - 字首不可用數字 - 建議駝峰式命名(camel case) - 不可使用關鍵字或有特殊意義的符號 1. **類別(class)、介面(interface)**\*此為一種特殊類別 字首大寫,其餘小寫。如: `String` `StringBuffer` 3. **屬性:變數(variable)、函數(method)** 字首小寫,其餘小寫。如: `length` `charAt` 3. **常數(constant)** 全大寫,若為複合字可用底線斷句。如: `PI` `MATH` `MAX_VALUE` ## :triangular_flag_on_post: 宣告、指派 - 透過資料型態宣告變數會占用的空間大小,並指派值給該變數 ```java= //資料型態(datatype) 變數(var) = 值; int n = 5; //類別(class) 物件(object) = 值; String str = "ABC"; ``` ## :triangular_flag_on_post: 變數(variable) - 不可重複宣告。 - 每個變數都有各自的名稱,並屬於**某一種**資料型態。 - **成員變數(Member Variables)** 1. **實例變數(Instance Variables)** 2. **類別變數(Class Variables)**,又稱靜態變數 跟隨著類別(Class),不依附在物件上 ex:`Math`、`System` 同個類別(Class)的物件可以共享 有預設初始值 | 基本資料型態 | 預設初始值 | | -- | :--: | | byte | 0 | | short | 0 | | int | 0 | | long | 0L | | float | 0.0F | | double | 0.0D | | char | ’\u0000’ | | boolean | false | | reference | nullText | - **區域變數(Local Variables)** 又稱自動變數,必須定義初始值才可使用、運算 只在定義它的區域內有效 ## :triangular_flag_on_post: 常數(constant) - 儲存的值⼀旦指定便不可更改 - 資料大小是固定的 ```java final datatype var = 15 //如:final int NUM=15 ``` ## :triangular_flag_on_post: 函數/方法(method) - 函數三部曲:宣告>定義>呼叫 - 傳回值 - 若不須/沒有傳回值——> `void` - 若需要/有傳回值———>必須說明傳回值的型態(相容或相同的型態都行) ```java public datatype className ( datatype var ) { return; } //例如 public double cat ( int x ) { return; } //也可傳回整個物件 public Cat run() { } //也可傳回整個陣列 public Cat[] run() { } ``` - Math.pow(數值,平方) ```java Math.pow(4,2) //結果16 ``` - Math.sqrt(數值平方後的值) ```java Math.sqrt(16) //結果4 ``` ## :triangular_flag_on_post: 資料型態 目的是能給予資料正確的記憶體與進行運算 - **基本資料型態**,共八種 | 型態 | 儲存空間 | 值域範圍 | 說明 | | -- | --: | :--: | -- | | **int** | 4 bytes | -2147483648(-2^31^) \~ 214483647(2^31^-1) | `整數型態` `整數常數` | | long | 8 bytes | -2^63^ \~ 2^63^-1 | `整數型態` `整數常數` 字尾需加L | | short | 2 bytes | -32768(-2^15^) \~ 32767(2^15^-1) | `整數型態` | | byte | 1 byte | -128(-2^7^) \~ 127(2^7^-1) | `整數型態` | | char | 2 bytes | 0 \~ 65535 | 值用單引號`' '`包起,被視為正整數 | | float | 4 bytes | -2^38^ \~ 2^38^-1 | `浮點常數` 字尾需加F,10進制精準⾄7位⼩數 | | **double** | 8 bytes || `浮點常數` 字尾需加D,10進制精準⾄15位⼩數 | | boolean | 1 byte | true / false || - 整數型態,共四種 - 整數常數(如:5),共兩種,預設用int儲存 - 整數表示 - 可用 `_` 作為分隔符號 - 2 進制 (binary):開頭以「0b」表⽰,開頭數字0為正,1為負 - 8 進制 (octal):開頭以「0」表⽰ - 16進制 (hexadecimal):開頭以「0x」表⽰ - 如: 17(10進制) = **0b**10001(2進制) = **0**21(8進制) = **0x**11(16進制) - 浮點常數(如:0.05),共兩種,預設用double儲存,只能用近似值,無法使用 `==` - **參考型態** | 型態 | 說明 | | -- | -- | | 字串型態(String) | 值用雙引號 `" "` 括起,使用+號串接 | | | | ## :triangular_flag_on_post: 文字類型 Java預設使⽤Unicode編碼 文字間用 + (加號)串接 - 字元類型 - 只能儲存一個文字,需用 `' '` (單引號)包住,屬於基本類型 - 跳脫字元(escaped character) - `\n` 換⾏ (line feed) - `\t` tab鍵 (horizontal tab) - `\b` 倒退鍵 (backspace) - `\r` return鍵 (carriage return) - `\f` 換⾴ (form feed) - `\’` 單引號 (single quote) - `\"` 雙引號 (double quote) - `\\` 反斜線 (backslash) - 字串類型 - 可儲存多個文字,需用 `" "` (雙引號)包住,不屬於基本類型 ## :triangular_flag_on_post: 抽象類別、介面 ### 抽象類別 abstract * 抽象類可以包含抽象方法、具體方法和成員變數 * 不需覆寫所有 function,沒有覆寫的function 一樣可以 call * 繼承的 function 可以覆寫 * 使用關鍵字 abstract 來定義抽象類、抽象方法 * 可以有建構子(constructor) * 子類使用 extends * 一個類只能繼承一個抽象類別 ### 介面 interface * 介面只能包含抽象方法和常數,不能有成員變數 * 介面可以宣告單一變數,通常IDE在執行時會自動補上 public static final 使之成為常數 * 使用關鍵字 interface 來定義介面 * 不可以有建構子(constructor) * 子類使用 implements,可以多個 implements,並且需實作(覆寫)所有 function ## :triangular_flag_on_post: Lambda表達式 (箭頭函式) 可以將函數作為參數傳進方法中 ```=java (參數) -> 表達式 (參數) -> { 陳述; } //寫法1 int addfn = (int a, int b) -> a + b; //寫法2 int addfn = (int a, int b) -> { return a + b; }; //寫法3 int addfn = (a, b) -> a + b; ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up