Java 簡介(Part 1)
Download
Report
Transcript Java 簡介(Part 1)
JAVA 基本語法
鄧姚文
http://www.ywdeng.idv.tw
[email protected]
1
內容大綱
Java 語言簡介
Java 程式基礎
一個簡單範例:Hello Java !
Java 程式基本結構
資料型態與變數
運算子與運算式
流程控制
編譯與執行 Java 程式
使用執行時期參數的 Hello Java !
2
Java 語言簡介:Java 的版本
JAVA SE(Java Platform, Standard Edition)
JAVA EE(Java Platform, Enterprise Edition)
桌面應用程式、GUI、資料庫、網路、…
N-Tier Applications、Web Applications、…
JAVA ME(Java Platform, Micro Edition)
PDA、手機、Smart Card、…
3
Java Platform Edition
摘自http://thisjava.blogsome.com/2005/03/28/java-technology/
Java 程式基礎
一個簡單範例:Hello Java !
Java 程式基本結構
資料型態與變數
運算子與運算式
流程控制
編譯與執行 Java 程式
使用執行時期參數的 Hello Java !
5
一個簡單範例:Hello Java !
public class Hello {
public static void main(String[] args) {
System.out.println("Hello Java !");
}
}
6
Java 程式基本結構
每一支程式就是一個類別(Class)
Source file 的名字一定要跟 Class 的名字相同,大
小寫也一定要一樣,副檔名為 .java。
public static void main(String[] args) 為程式的進入點
main method 一定要宣告成 public static void,因為它
一定要能夠被外部的 class loader 存取,而且要在一開
始就存在,而且不能夠有傳回值。
System 是系統物件,out 指 stdout,println 印完之
後會換行。
JRE class loader 需要的是 class name 而不是檔案名
稱。
7
指令補充
CD 更換目錄(Change Directory)
DIR 列出目錄內容(Directory)
javac 執行 JAVA 編譯器(Java Compiler)
CD C:\
javac Hello.java
java 執行 JAVA
java Hello
8
編譯與執行 Java 程式
Java
Source
Hello.java
JRE
javac
Hello.class
java
To compile
Compiler
Java
Bytecode
javac Hello.java
To run
java Hello
javaw Hello (GUI 版)
9
JAVA 程式的編譯與執行
10
編譯與執行 Java 程式:
執行環境
JVM
JRE
11
JDK
JAVA 執行環境架構
12
13
資料型態與變數:
基本資料型態
boolean: The value is true or false. 布林
char: 16-bit Unicode. 統一碼字元
byte: 8-bit signed integer. 有號整數
short: 16-bit signed integer.
int: 32-bit signed integer.
long: 64-bit signed integer.
float: 32-bit signed floating point number. 浮點數
double: 64-bit signed floating point number.
14
Wrapper Classes
包裝類別
Character
Integer, Short, Byte and Long
用於包裝字元 char
用於包裝整數 int, short, byte, long
Float and Double
用於包裝浮點數 float, double
15
Scalar V.S. Object
123 是 Literal(常數值)
int n = 123; 是 Scalar(純量)
String s = "123"; 是字串物件
Integer n = new Integer(123); 是整數物件
16
Scalar V.S. Object(續)
數字才可以進行四則運算
String s = "123";
String z = s + s; // z 的值為 "123123"
double d = Double.parseDouble(s);
int i= Integer.parseInt(s);
double x = d + i; // x 的值為 123+123 = 246
物件才可以存入 Collection(集合)之中
Vector v = new Vector();
v.add(new Integer(123));
17
Autoboxing 自動將純量包成物件
public class Boxing {
public static void main(String[] args) {
Integer i = new Integer(10);
System.out.println(i.intValue() + 10);
}
}
public class AutoBoxing {
public static void main(String[] args) {
Integer i = 10;
System.out.println(i + 10);
}
}
18
資料型態與變數:變數
TypeName variableName = INI_VALUE;
double mathScore = 75.5;
ClassName variableName = INI_VALUE;
String authorName = "Bill Day";
ClassName varName = new ClassName(); // 建立物件
Hashtable ht = new Hashtable();
命名慣例
ClassName 類別名稱第一個字母大寫
variableName 變數名稱第一個字母小寫(Camel Naming 駱駝命名法)
CONSTANT_NAME 常數名稱全部大寫
19
資料型態與變數:
常數(Constant & Literal)
final int PASS_SCORE = 60;
final long LONG_ONE = 14L;
final int HEX_MASK = 0x0e;
final int OCT_MASK = 016;
final float PI = 3.14F;
final double PI = 3.14;
final double PI = 314e-2;
final String LANGUAGE = "Java";
20
邏輯判斷
比較大小
>=
<=
==
!=
而且(所有條件都必須成立才行)
<
相等、不相等
>
&&
或者(只要有一個條件成立即可)
||
21
數學運算
加減乘除
+
-
*
/
整數除法取餘數
%
5 % 2 結果為 1
22
運算子與運算式:
運算子&優先順序
15:
14:
13:
12:
11:
10:
9:
8:
7:
6:
5:
4:
3:
2:
1:
L:
R:
R:
L:
L:
L:
L:
L:
L:
L:
L:
L:
L:
R:
R:
., [], (args), (post)++, (post)-++(pre), --(pre), +(Positive), -(negative), ~, !
new, (type)
*, /, %
+, <<, >>, >>>
<, <=, >, >=, instanceof
==, !=
&
^
|
&&
||
?:
=, *=, /=, %=, +=, -=, <<=, >>=, >>>=, &=, ^=, |=
23
運算子與運算式:
運算式
int x = 5;
x = x + 1;
x <<= 2;
boolean hitTop = false;
String baseName = null;
x++;
abs = (a > 0) ? a : -a;
24
流程控制:
if-then-else
true
?
false
A
true
B
?
false
A
C
C
if (a > b) {
// A
} else {
// B
}
// C
if (a > b) {
// A
}
// C
25
public class EvenOdd {
public static void main(String[] args) {
if (args.length != 1) {
System.err.println("請輸入一個正整數");
System.exit(1);
}
int i = Integer.parseInt(args[0]);
String msg = (i % 2 == 0) ? "偶數" : "奇數";
System.out.println("" + i +
" is an " + msg + " number.");
}
}
args.length 為 args 陣列長度
Integer.parseInt() 將字串轉換成整數
== 比較兩值是否相等
% 整數除法取餘數
System.err 指 stderr:錯誤訊息輸出裝置
26
標準輸出入裝置
標準輸入裝置(stdin)
標準輸出裝置(stdout)
預設為 Console(主控台)
如果不做 Output Redirect(輸出重新導向)則為螢幕
(tty)
標準錯誤裝置(stderr)
預設為 Console(主控台)
如果不做 Input Redirect(輸入重新導向)則為鍵盤
(Keyboard)
預設為 Console(主控台)
不能夠 Output Redirect
參考 http://en.wikipedia.org/wiki/Standard_streams
27
流程控制:
nested if-else, switch-case
if (a == 0) {
// A
} else {
if (a == 1) {
// B
} else {
if (a == 2) {
// C
} else {
// D
}
}
}
if (a == 0) {
// A
} else if (a == 1) {
// B
} else if (a == 2) {
// C
} else {
// D
}
Nested 巢狀
28
switch (a) {
case 0:
// A
break;
case 1:
// B
break;
case 2:
// C
break;
default:
// D
}
練習
寫一個程式判斷成績是否及格
成績 >= 60 為及格
成績 <= 59 為不及格
成績 > 100 或 < 0 必須發出警訊
成績由命令列參數 String[] args 輸入
測試資料
java Score 80
java Score 123
java Score 59
29
流程控制:
while 和 do-while 迴圈
false
A
B
true
B
true
A
false
while (A) {
do {
// B
// B
}
} while (A);
30
流程控制:
for 迴圈
for (A; B; C) {
A
// D
}
false
B
true
D
for (int i = 0; i < names.length; i++) {
System.out.println("Hello "+names[i]);
}
31
C
練習
步驟一:
寫一個程式將命令列參
數依序印出
測試資料
步驟二:
將程式改成反序印出
測試資料
java Echo 1 2 3 4
印出:
1234
32
java Echo 1 2 3 4
印出:
4321
流程控制:
break 和 continue
立刻回頭
開始下一回合
for (..;..;..) {
...
if (...) {
break;
}
...
if (...) {
continue;
}
...
}
33
立刻中斷迴圈
練習
寫一個程式將命令列
參數之中的偶數依序
印出
測試資料
遇到負數時立即停止列
印
只印出偶數,奇數忽略
不印出
假設命令列參數只輸入
正整數
0 是偶數
34
java Even 1 2 3 4
印出:
24
java Even 2 3 0 -1 4 5
印出:
20
練習
設計一個 Java 程式,計算從命令列帶入的
參數之總和與平均值
測試資料
java Sum 1 2 3 4
印出:
總和為 10
平均為 2.5
35
練習
設計一個 Java 程式,計算並印出從 1 到 10
累加的結果,例如:
1+2+3+4+5+6+7+8+9+10=55
設計一個 Java 程式,計算並印出從 1 到 n
累加的結果,其中 n 是一個從命令列讀入
的執行時期參數。
36
簡易UI
Javax.swing.JOptionPane
showConfirmDialog
showInputDialog
提示輸入
showMessageDialog
要求確認, yes/no/cancel.
顯示訊息
showOptionDialog
The Grand Unification of the above three.
37
JOptionPane
import javax.swing.*;
public class Square {
public Square(){
String s = JOptionPane.showInputDialog("請輸入一個整數");
int n = Integer.parseInt(s);
int nn = n * n;
JOptionPane.showMessageDialog(null,
s + " 的平方為: " + nn,
"計算平方數",
JOptionPane.PLAIN_MESSAGE);
}
public static void main(String[] args){
Square square = new Square();
}
}
38
class ConfirmExit implements Application.ExitListener {
public boolean canExit(EventObject e) {
if (dctsdk.isServerOnLine()) {
int option = JOptionPane.showConfirmDialog(
getFrame(),
"Do you really wants exit?",
"Confirmation Required",
JOptionPane.YES_NO_OPTION);
if (option == JOptionPane.YES_OPTION) {
dctsdk.stopServer();
} else {
return false;
}
}
return true;
}
public void willExit(EventObject e) {
}
}
// ask for confirmation on exit
getApplication().addExitListener(new ConfirmExit());
39
40
Object[] possibleValues = {
IDctSdk.KeyboardCaseOptions.ToUpper + " 全部大寫",
IDctSdk.KeyboardCaseOptions.ToLower + " 全部小寫",
IDctSdk.KeyboardCaseOptions.Intact + " 不轉換",
IDctSdk.KeyboardCaseOptions.Inverse + " 大小寫互換"
};
String selectedValue = (String) JOptionPane.showInputDialog(this.getFrame(),
"請選擇鍵盤輸入英文字母之轉換方式", "英文字母轉換方式",
JOptionPane.INFORMATION_MESSAGE, null,
possibleValues, possibleValues[0]);
String[] ss = selectedValue.split(" ");
if (ss[0].equals(IDctSdk.KeyboardCaseOptions.ToUpper.toString())) {
dctsdk.setKeyboardCase(IDctSdk.KeyboardCaseOptions.ToUpper.ordinal());
} else if (ss[0].equals(IDctSdk.KeyboardCaseOptions.ToLower.toString())) {
dctsdk.setKeyboardCase(IDctSdk.KeyboardCaseOptions.ToLower.ordinal());
} else if (ss[0].equals(IDctSdk.KeyboardCaseOptions.Inverse.toString())) {
dctsdk.setKeyboardCase(IDctSdk.KeyboardCaseOptions.Inverse.ordinal());
} else {
dctsdk.setKeyboardCase(IDctSdk.KeyboardCaseOptions.Intact.ordinal());
}
setStatusMessageKeyboardCase(dctsdk.getKeyboardCase());
41
42
以 BufferedReader
從 Console 讀取一行字串
BufferedReader con = new BufferedReader(
new InputStreamReader(System.in));
String s = con.readLine();
int n = -1;
try {
n = Integer.parseInt(s);
} catch (NumberFormatException ex) {
ex. printStackTrace();
}
43
以 Scanner
從 Console 讀取資料
java.util.Scanner
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();
Scanner sc = new Scanner(new File("myNumbers"));
while (sc.hasNextLong()) {
long aLong = sc.nextLong();
}
44
練習
設計一個 Java 程式,計算並印出從 1 到 n
累加的結果,例如 n=10:
1+2+3+4+5+6+7+8+9+10=55
輸入/輸出方式:
以 JOptionPane 讀入 n 值,JOptionPane 輸出
提示
以 Integer.parseInt() 將字串轉成數字
45
練習
寫一個程式,作用為接受十進位整數,然
後顯示其二進位、八進位與十六進位值。
提示
Integer.toBinaryString(number); 二進位
Integer.toOctalString(number); 八進位
Integer.toHexString(number); 十六進位
46
練習
印出九九乘法表
以兩層迴圈實作
兩欄之間以 \t 分隔
47