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