Java 簡介(Part 1)

Download Report

Transcript Java 簡介(Part 1)

Java Programming (Part 1)
Introduction
鄧姚文
http://www.ywdeng.idv.tw
[email protected]
1
內容大綱


Java 語言簡介
Java 程式基礎







一個簡單範例:Hello Java !
Java 程式基本結構
資料型態與變數
運算子與運算式
流程控制
編譯與執行 Java 程式
使用執行時期參數的 Hello Java !
2
參考書目


林信良 著,Java SE6 技術手冊,碁峰資訊
,2007年,書號: ACL023000,ISBN:
9789861811321
黃嘉輝 著, Java SE 6.0視窗程式設計之道
,碁峰資訊,2009年,書號: AEL006900
,ISBN: 9789861816104
3
Java 語言簡介:
Java 的由來

1995 年發表 by Sun Microsystems



原名 Oak,Project Green,目標消費性電子產
品
作者 James Gosling
Java 最早的成功應用:


Java Applet:製作網頁上的動態效果
JavaScript:Netscape, 處理網頁上的物件
4
Java 語言簡介:
特性、優缺點







安全:受管制的 I/O、沒有 Pointer
跨平台:Java 程式在虛擬機器(VM)上執行,
任何環境只要實作虛擬機器,就可以執行 Java
程式
簡單易學的物件導向語言
API 眾多,提供各種資料結構,適用各種應用
穩定,良好的 Exception Handling 機制
多執行緒(Multithread)
缺點:速度較慢
5
Java 語言簡介:
Java 的重要性



Java 程式設計師的數量逐年暴增。
絕大部分的大專院校都有開 Java 課程,資
訊相關科系將 Java 列為必修的程式語言。
美國的學院委員會(The College Board)決
定進階教育資訊課程規劃會全部改版納入
物件導向,並選用 Java 當作考試時使用的
語言。
6
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、…
7
JAVA 版本編號



JDK 1.2~1.4 之間的版本,稱為 J2SE(Java 2
Platform, Standard Edition)
J2SE 5.0(Java 2 Platform Standard Edition 5.0)
時的JDK稱為J2SE Development Kit 5.0
從Java SE 6(Java Platform, Standard Edition 6)
開始的JDK6則稱之為Java SE Development Kit 6
 不再帶有2這個號碼,版本號6或1.6.0都使用
 6是產品版本(Product Version),而1.6.0是開
發者版本(Developer Version)
8
Java Platform Edition
摘自http://thisjava.blogsome.com/2005/03/28/java-technology/
Java Platform & Products
10
Java 語言簡介:
Java 認證考試
摘自http://www.sun.com/training/certification/java/index.xml
11
JAVA 開發環境

JDK




NetBeans


http://java.sun.com
安裝後,設定 %JAVA_HOME% 環境變數
Online Document
http://www.netbeans.org
Eclipse

http://www.eclipse.org
12
瞭解JDK (1)




JDK: Java Development Kit 開發套件
JRE: Java Runtime Environment 執行環境
公用JRE是給開發好的程式之執行平台
JDK本身也有自己的JRE


位於JDK安裝目錄的「jre」目錄下
JDK本身所附的JRE比公用JRE多了個Server
的VM(Virtual Machine)執行選項
13
瞭解JDK (2)
JDK的JRE有server選項
14
JDK的安裝目錄

「bin」目錄


「demo」目錄


範例程式
「jre」目錄


JDK的工具程式
JDK自己附帶的JRE
「db」目錄

Apache Derby資料庫,純Java所撰寫的資料庫
15
JDK的安裝目錄

「lib」目錄




工具程式實際上會使用的Java工具類別
JDK中的工具程式,大多也是由Java所撰寫
而成
bin資料夾下的工具程式,不過是個包裝器
(Wrapper)
執行javac.exe等程式時,最後會呼叫lib目錄
中tools.jar中的對應類別
16
JDK的安裝目錄

src.zip

Java提供的API類別之原始碼檔案壓縮檔
17
設定 JAVA_HOME 環境變數

JAVA_HOME 環境變數的值為 JDK 的安裝目
錄
18
設定 Path 環境變數 (1)

找不到javac工具程式

設定系統變數中的 Path 環境變數
19
設定 Path 環境變數 (2)

Windows下安裝JRE時,會將java.exe複製至
「C:\Windows\System32\」路徑之下,而
這個路徑在Path變數中是預設的路徑
20
設定 CLASSPATH 環境變數 (1)



Java執行環境本身就是個平台,執行於這個
平台上的程式是已編譯完成的Java程式
設定Path變數是為了讓作業系統找到指定的
工具程式(例如Windows  exe)
設定classpath目的就是為了讓Java執行環境
找到指定的Java程式(JVM class)
21
設定 CLASSPATH 環境變數 (2)



JDK 6 預設會到現行工作目錄,以及JDK的
「lib」目錄中尋找Java程式
Classpath 通常包含目錄名稱與 JAR 檔名稱
編譯時期指定類別搜尋路徑


javac -classpath path1;path2 …
執行時期指定類別搜尋路徑

java -classpath path1;path2 …
22
設定 CLASSPATH 環境變數 (3)
23
修改 Windows 檔案總管的設定
顯示副檔名
24
Java 程式基礎







一個簡單範例:Hello Java !
Java 程式基本結構
資料型態與變數
運算子與運算式
流程控制
編譯與執行 Java 程式
使用執行時期參數的 Hello Java !
25
一個簡單範例:Hello Java !
public class Hello {
public static void main(String[] args) {
System.out.println("Hello Java !");
}
}
26
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 而不是檔案名
稱。
27
指令補充

CD 更換目錄(Change Directory)



DIR 列出目錄內容(Directory)
javac 執行 JAVA 編譯器(Java Compiler)


CD C:\
javac Hello.java
java 執行 JAVA

java Hello
28
編譯與執行 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 版)
29
JAVA 程式的編譯與執行
30
編譯與執行 Java 程式:
執行環境
JVM
JRE
31
JDK
JAVA 執行環境架構
32
33
資料型態與變數:
基本資料型態








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.
34
Wrapper Classes
包裝類別

Character


Integer, Short, Byte and Long


用於包裝字元 char
用於包裝整數 int, short, byte, long
Float and Double

用於包裝浮點數 float, double
35
Scalar V.S. Object




123 是 Literal(常數值)
int n = 123; 是 Scalar(純量)
String s = "123"; 是字串物件
Integer n = new Integer(123); 是整數物件
36
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));
37
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);
}
}
38
資料型態與變數:變數




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 常數名稱全部大寫
39
資料型態與變數:
常數(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";
40
邏輯判斷

比較大小


>=
<=
==
!=
而且(所有條件都必須成立才行)


<
相等、不相等


>
&&
或者(只要有一個條件成立即可)

||
41
數學運算

加減乘除


+
-
*
/
整數除法取餘數


%
5 % 2 結果為 1
42
運算子與運算式:
運算子&優先順序
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
==, !=
&
^
|
&&
||
?:
=, *=, /=, %=, +=, -=, <<=, >>=, >>>=, &=, ^=, |=
43
運算子與運算式:
運算式







int x = 5;
x = x + 1;
x <<= 2;
boolean hitTop = false;
String baseName = null;
x++;
abs = (a > 0) ? a : -a;
44
流程控制:
if-then-else
tru e
fa ls e
tru e
?
A
fa lse
?
B
A
C
C
if (a > b) {
// A
} else {
// B
}
// C
if (a > b) {
// A
}
// C
45
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:錯誤訊息輸出裝置
46
標準輸出入裝置

標準輸入裝置(stdin)



標準輸出裝置(stdout)



預設為 Console(主控台)
如果不做 Output Redirect(輸出重新導向)則為螢幕
(tty)
標準錯誤裝置(stderr)



預設為 Console(主控台)
如果不做 Input Redirect(輸入重新導向)則為鍵盤
(Keyboard)
預設為 Console(主控台)
不能夠 Output Redirect
參考 http://en.wikipedia.org/wiki/Standard_streams
47
流程控制:
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 巢狀
48
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
49
流程控制:
while 和 do-while 迴圈
fa lse
A
B
tru e
B
tru e
A
fa lse
while (A) {
do {
// B
// B
}
} while (A);
50
流程控制:
for 迴圈
for (A; B; C) {
A
// D
}
fa ls e
B
tru e
D
for (int i = 0; i < names.length; i++) {
System.out.println("Hello "+names[i]);
}
51
C
練習

步驟一:



寫一個程式將命令列參
數依序印出
測試資料

步驟二:


將程式改成反序印出
測試資料

java Echo 1 2 3 4
印出:
1234
52
java Echo 1 2 3 4
印出:
4321
流程控制:
break 和 continue
立刻回頭
開始下一回合
for (..;..;..) {
...
if (...) {
break;
}
...
if (...) {
continue;
}
...
}
53
立刻中斷迴圈
練習

寫一個程式將命令列
參數之中的偶數依序
印出





測試資料

遇到負數時立即停止列
印
只印出偶數,奇數忽略
不印出
假設命令列參數只輸入
正整數
0 是偶數

54
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
55
練習


設計一個 Java 程式,計算並印出從 1 到 10
累加的結果,例如:
1+2+3+4+5+6+7+8+9+10=55
設計一個 Java 程式,計算並印出從 1 到 n
累加的結果,其中 n 是一個從命令列讀入
的執行時期參數。
56
Java Applet

Application Let

在網頁環境中執行的小應用程式
Applet
JVM
瀏覽器
57
HelloApplet.java
import java.applet.Applet;
import java.awt.*;
public class HelloApplet extends Applet
{
public void paint(Graphics g)
{
g.drawString("Hello Applet !!", 50, 50);
}
}
58
HelloApplet.html
<html>
<head><title>Applet Demo</title></head>
<body>
<applet codebase="classes" code="HelloApplet.class"
width="350" height="200">
This browser does not appear to support Applets.
</applet>
</body>
</html>
59
Applet 傳參數
<HTML><HEAD><TITLE>Applet 傳參數
</TITLE></HEAD>
<BODY>
<APPLET CODE="HelloApplet2" HEIGHT="200"
WIDTH="200">
<PARAM NAME="name" VALUE="鄧姚文"></APPLET>
</BODY>
</HTML>
60
HelloApplet2.java
import javax.swing.*;
import java.awt.*;
public class HelloApplet2 extends JApplet {
private String name = null;
public void paint(Graphics g) {
g.drawString(name + " 您好!", 100, 100);
}
public void init() {
this.name = this.getParameter("name");
}
}
61
簡易UI
Javax.swing.JOptionPane

showConfirmDialog


showInputDialog


提示輸入
showMessageDialog


要求確認, yes/no/cancel.
顯示訊息
showOptionDialog

The Grand Unification of the above three.
62
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();
}
}
63
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());
64
65
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());
66
67
以 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();
}
68
以 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();
}
69
練習


設計一個 Java 程式,計算並印出從 1 到 n
累加的結果,例如 n=10:
1+2+3+4+5+6+7+8+9+10=55
輸入/輸出方式:


以 JOptionPane 讀入 n 值,JOptionPane 輸出
提示

以 Integer.parseInt() 將字串轉成數字
70
練習


寫一個程式,作用為接受十進位整數,然
後顯示其二進位、八進位與十六進位值。
提示



Integer.toBinaryString(number); 二進位
Integer.toOctalString(number); 八進位
Integer.toHexString(number); 十六進位
71
練習

印出九九乘法表


以兩層迴圈實作
兩欄之間以 \t 分隔
72