Written By William after Nelson reviewed

(1999/10/29 updated)

Special Thanks to Nelson Yeh(Sun Certified Java Programmer)


java 入門

  1. java簡介

    1. 什麼是java

    2. java的種類

    3. 誰可以學java

  2. java程式撰寫環境的設定

    1. jdk環境設定

    2. 如何執行Applet

    3. 參考資料(Bible)

    4. 其它

  1. java基本觀念

  1. 類別(class)

  2. 物件

  3. 資料型態(data photo type)

  1. 運算子(operator)

  2. 程式庫(package)

  3. overwrite

  4. 多褚線MutiThread

  5. this

  6. Applet程式執行流程

  7. 介面(interface)

  8. 繼承(extends)

  9. what is .jar file

  1. java程式範例

    1. 如何寫一個類別(class)程式

    2. 類別(class)要有Instance?

    3. 資料型態也可以是一種類別(class)

    4. 如何寫一個介面(interface)

    5. 如何實作(implements)介面

    6. 如何繼承一個類別與多個介面

 


java簡介

什麼是java:

跨平台:

java種類:

誰可以學java:

java virtual machine:

jdk (java development tool kit):


java基本觀念

類別(class):

物件(Object):

static:

資料型態(data type):

  1. java的資料型態大致與C語言相同,用法也相同,如:
     boolean、char、byte、short、int、float、double
  1. 特別的是java有一種類別本身可以當資料型態使用,又可以執行額外的功能,如:
     Integer,Float,Double,Long,Short,String
  1. sample

 

運算子:

     +,-,*,/,~,!,>>,<<,!=,==,<<=,>>=,>>>,<<<, 。。。
     >>> 為無號數的位移
     ex:最左邊的1為負號
        1000100>>>2  =>   0000001
        1000100>>2   =>   0010001

介面(interface):

繼承(extends):

package:

假設我們的 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來看看

overwrite:

結果印出來:

Thread:

this:

Applet程式執行流程:

  1. 此程式(類別)開始執行時,會先跑 init() 這個副程式。
  2. init()執行完,如果程式有呼叫到 this.start()的時候,則系統會自動執行副程式run()。
  3. 當 run()執行完,即會接著執行stop()這個副程式
  4. 請參考sample , 以下為sample程式的解說:
    1. 當類別開始執行時,會先跑 init(),當執行完init()後,
    2. 如果有mouse的button被按下,則程式的副程式 mousePressed()自動執行, 產生新的thread
    3. 當新的thread執行start()時,
    4. run()即跟著自動執行,將counter加一,將結果印出來
    5. 當 run()執行完,即會執行stop() =>此thread執行完畢。
    6. 回到第b項。

c++多重繼承的缺點:


java 程式範例

 

如何寫一個類別(class)程式:

//======================= 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:  

 

類別(class)要有Instance?

//========================== 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:  

 

 

資料型態也可以是一種類別(class):

//=================== 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
  此程式可執行

 

如何寫一個介面(interface):

//=========================== InterfaceSample.java ===============================
  public interface InterfaceSample{
    public abstract void Hello();
  }
//================================================================================

第1列

     interface 為保留字

第2列

    abstract 修飾 Hello 表現其為虛擬副程式 

ps:

 

如何實作(implements)介面:

//======================== 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:

//=============== ExtendsSample.html ===========================

<html>
<body>
<applet width="50" height="30" code="ExtendsSample.class" codebase=".">
</applet>
<body>
</html>
//=======================================================================

java程式撰寫環境的設定

JDK設定步驟:

  1. java程式的compiler,tools,package甚至是source code都包含在jdk這個套件中,jdk可到sun取得,各平台都有jdk的套件,請依需要選擇然後安裝。
  2. 拿到jdk解開後,會安裝在一個目錄下 如:windows下 c:\jdk1.1 ; 或 unix 下/usr/local/java
  3. 在作業系統下增加JDK路徑,及classpath的環境變數:
      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
      ============================================
  1. 當寫好程式 InstanceSample.java , 必須要將程式編譯(compile)
      windows:  
      c:\jdk1.2>javac InstanceSample.java
      unix:
      # javac InstanceSample.java
  1. 程式編譯後,會產生 ClassSample1.class 的bytecode, 如果要執行,可打
      windows:  
      c:\>java InstanceSample
      unix:
      # java InstanceSample

如何執行Applet:

     假設Applet程式放在 ExtendsSample.html
     c:\>appletviewer ExtendsSample.html

Bible:

     寫程式最重要的是參考資料,因此jdk內的package用法必須到 Sun 
     下載jdk的document(java api),才能知道如何使用 
     %%% very important %%%