(1999/10/29 updated)
Special Thanks to Nelson Yeh(Sun Certified Java Programmer)
java簡介
java程式撰寫環境的設定
java基本觀念
java程式範例
java簡介
jdk (java development tool kit):
java基本觀念
boolean、char、byte、short、int、float、double
Integer,Float,Double,Long,Short,String
+,-,*,/,~,!,>>,<<,!=,==,<<=,>>=,>>>,<<<, 。。。
>>> 為無號數的位移
ex:最左邊的1為負號
1000100>>>2 => 0000001
1000100>>2 => 0010001
假設我們的 CLASSPATH=c:\jdk1.2\jre\lib\classes.zip:
則 import java.applet.*; 表示程式可以使用 C:\jdk1.2\jre\lib\java\applet 下所有的class(類別)。聰明的看官可以猜出classes.zip的內容其實是將java\applet\*.class的檔案壓縮成classes.zip。現在壓縮的檔案格式改為jar格式。
讀者有興趣可以打開classes.zip來看看
java 程式範例
//======================= ClassSample1.java =====================
public class ClassSample1 extends Object{
public static void Hello(){
System.out.println("hello");
}
}
//================================================================
程式解說:
第1列
public為保留字,表示可以公開給別的類別使用
class為保留字,表示此為類別型態
ClassSample1 為類別名字,必須與檔名(ClassSample1.java)相同(注意大小寫)
extends 為保留字表示繼承
Object 為父類別
第2列
static為保留字
void 表示副程式無回傳(return)值
Hello為副程式的名字
第3列
System.out.println("hello"); 將字串hello印出來 (System 是一靜態(static)類別型態)
ps:
ClassSample1.java不能直接執行,但可以compile
如果要能執行請到這兒
如何compiler這個程式
//========================== InstanceSample.java ===========================
import ClassSample1;
public class InstanceSample{
static ClassSample1 myClass;
public static void main(String args[]){
myClass.Hello();
ClassSample1.Hello();
}
}
//==========================================================================
程式解說:
第1列 Import為保留字, ClassSample1 表示此程式會用到類別ClassSample1
第3列 myClass 為 ClassSample1的一個 Instance
第4列 public static void main(String args[]) => 若要使成式能執行必須要有此function
第5列 myClass.Hello(); 此 Instance 執行Hello()這個副程式
第6列
ClassSample1.Hello(); 因 Hello()這個副程式 用 static 修飾 ,
所以類別ClassSample1可以直接執行Hello();
ps:
InstanceSample.java可以執行。
myClass中的Hello() 與 ClassSample1的Hello() 共用一個記憶體。
//=================== DataTypes.java ======================
public class DataTypes {
static int i;
static float j;
static int k;
public static void main(String args[]){
int l;
Integer a=new Integer(1000);
i=a.intValue();
j=a.floatValue();
k=a.parseInt("2000");
l=Integer.parseInt("3000");
System.out.println(a.toString());
System.out.println(i);
System.out.println(j);
System.out.println(k);
System.out.println(l);
}
}
//=========================================================
程式解說:
第2,3,4列
i , j , k 分別屬於 int , float , int 的資料型態 , 且必須要用 static 修飾,
因為main這個function是static ,而 static 的function 所用的data type必須是static
第6列
l 的資料型態屬於int , 因為是在main中,所以不用static 修飾 ,即是 static 變數
第7列
a 的資料型態屬於Integer, Integer是個類別,且給予a一個1000的初值
第8,9列
a 因為是Integer這個類別宣告出來的物件 , 所以a 具有Integer的功能
因此 a 將1000的數值轉換成適當的data type 給 i , j
而這些轉換的function 即是 Integer 這個 class 的function
第10列
a 將 2000 這個字串轉成 int 給 k 用
第11列
Integer是 static 的類別, 所以 可以直接使用 Integer.parseInt()這個function ,
第12列
將 i , j , k , l 印出來。 System 亦是一static class,所以可以直接使用 。
ps
此程式可執行
//=========================== InterfaceSample.java ===============================
public interface InterfaceSample{
public abstract void Hello();
}
//================================================================================
第1列
interface 為保留字
第2列
abstract 修飾 Hello 表現其為虛擬副程式
ps:
此程式可compile,但不可執行
副程式必須要用 abstract 修飾
//======================== InterfaceApp.java =========================
public class InterfaceApp extends Object implements InterfaceSample{
public static void main(String args[]){
InterfaceApp a=new InterfaceApp();
a.Hello();
}
public void Hello(){
System.out.println("hello!");
}
}
//====================================================================
第1列
InterfaceApp是一個類別 , 它繼承類別 Object 及 介面 InterfaceSample
implemnets是保留字
第3列
宣告類別InterfaceApp的instance => a
第6列 ~ 第8列
public void Hello() 為 InterfaceSample.java 的 abstract 副程式
因類別InterfaceApp繼承InterfaceSample這個介面,所以必須要重寫Hello()這個副程式,
否則會有error。
ps。
此程式可執行
//======================== ExtendsSample.java ======================
import java.awt.event.*;
import java.applet.*;
public class ExtendsSample extends Applet implements Runnable,MouseListener, MouseMotionListener{
private int counter;
synchronized private void count(){
counter++;
System.out.println(counter);
};
public void init() {
counter=0;
addMouseListener(this);
addMouseMotionListener(this);
}
public void start(){
}
public void run(){
count();
}
public void mouseDragged(MouseEvent e) {
}
public void mouseMoved(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
Thread seed=new Thread(this);
seed.start();
}
public void mouseReleased(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public void mouseClicked(MouseEvent e) {
}
public void stop(){
}
}
//==================================================================
程式解說:
第1,2列:
import 是保留字, 表示程式將參考到java.awt.event 及 java.applet.* 這些package
第3列:
ExtendsSample繼承 Applet這個 class , 也 implemnets Runnable,MouseListener, MouseMotionListener
這3個介面。
第5列:
副程式 count 用 private 及 synchronized 修飾 , 代表外界不能直接使用這個副程式(只有內部的副程式可
以使用 count ) 及 同一個時間只能執行一個 count副程式(其它必須等到 count 執行完才能接著執行 count)
第11,12列:
addMouseListener(this);
addMouseMotionListener(this);
代表mouse所產生的事件,會讓程式知道並執行特定的副程式,如 mounsePressed() ( 程式必須 implemnet
MouseListener, MouseMotionListener 這兩個介面 )
第24,25列:
其它副程式:
因繼承3個介面 , 所以必須要重寫原來這3個介面所定義的副程式。
ps。
//=============== ExtendsSample.html ===========================
<html>
<body>
<applet width="50" height="30" code="ExtendsSample.class" codebase=".">
</applet>
<body>
</html>
//=======================================================================
java程式撰寫環境的設定
windows:
================ AUTOEXEC.BAT ==============
PATH=%PATH%;C:\JDK1.2\BIN
SET CLASSPATH = C:\JDK1.2\JRE\LIB; <== 若為jdk1.2則不須加上此行
============================================
unix:(bash or sh)
================ .profile ==================
PATH=$PATH:/usr/local/java/bin
CLASSPATH=/usr/local/java/jre/lib: <== 若為jdk1.2則不須加上此行
export PATH
export CLASSPATH
============================================
windows:
c:\jdk1.2>javac InstanceSample.java
unix:
# javac InstanceSample.java
windows:
c:\>java InstanceSample
unix:
# java InstanceSample
假設Applet程式放在 ExtendsSample.html中
c:\>appletviewer ExtendsSample.html
寫程式最重要的是參考資料,因此jdk內的package用法必須到 Sun
下載jdk的document(java api),才能知道如何使用
%%% very important %%%