天天看點

(轉貼)java基礎

http://www.eviloctal.com/forum/read.php?tid=17938

一,概述。

1995年,美國Sun Microsystems公司正式推出。(java好像就是爪哇,這個地方咖啡好,

程式員喜歡咖啡,金州注釋)具有安全、跨平台、面向對象、簡單、适用于網絡等顯著

特點(尤其是跨平台,可以說是偉大啊,想想windows編寫的程式能夠不做修改就直接拿

到UNIX系統上運作嗎?估計不行,哈哈,但是java可以。金州注釋。)

工作原理:java源程式需要通過編譯器編譯成為.class檔案(位元組碼檔案),然後解釋器

就ok了。

java程式分為java application(java 應用程式)和java applet(java小應用程式)兩種

舉例:

java application例子記憶體狀況輸出。

import java.util.*; (用到額外的類,需要這句,金州注釋)

 public class jinzhoutest {   (這個類取名.金州注釋)

  public static void main(String args[]){     (固定格式,金州注釋)

  System.out.println(new Date( ));   (輸出日期,金州注釋)

  Properties p=System.getProperties( );   (獲得對象,定義為p,金州注釋)

  p.list(System.out);       (輸出p,金州注釋)

  System.out.println("jinzhou Memory Usage:");   (輸出那個字元串,金州注釋

  Runtime rt=Runtime.getRuntime( );   ( 獲得系統的Runtime對象,金州注釋)

  System.out.println("Total Memory= "

          + rt.totalMemory( )

          +" Free Memory = "

          +rt.freeMemory( ));   (輸出記憶體情況,金州注釋)

    }

  }  

java applet例子:顯現一句話。

import java.awt.Graphics;     (說明需要用到類Graphics的對象;下面一句類似。金州注釋)

 import java.applet.Applet;  

 public class Hellojinzhou extends Applet {

   public String s;

   public void init() {        (格式,金州注釋)

     s=new String("Welcome to E.S.T");

              (生成一個新的字元串,金州注釋)

 }

 public void paint(Graphics g){

     g.drawString(s,25,25);         (在坐标為25.25輸出,金州注釋)

   }

 }  

(看出來差別了吧,後者不用main函數,這說明需要嵌入執行,一般嵌入浏覽器,金州注釋。)

上例,嵌入方式

<html>

<applet code=Hellojinzhou.class width=250 height=250>

</applet>

</html>

一個完整的java源程式應該包括下列部分:

  package語句; //該部分至多隻有一句,必須放在源程式的第一句

  import語句;

  public classDefinition; //公共類定義部分,至多隻有一個公共類的定義

       //java語言規定該java源程式的檔案名必須與該公共類名完全一緻

  classDefinition; //類定義部分,可以有0個或者多個類定義

  interfaceDefinition; //接口定義部分,可以有0個或者多個接口定義

關于java開發環境的建立,金州略過。

二。Java語言基礎知識

金州簡略如下,

資料類型劃分

  java語言的資料類型有簡單類型和複合類型:

  簡單資料類型包括:

     整數類型(Integer):byte, short, int, long

     浮點類型(Floating):float,double

     字元類型(Textual):char

     布爾類型(Logical):boolean

  複合資料類型包括:

     class

     interface

     數組

常量:用保留字final來實作

     final typeSpecifier varName=value[,varName[=value]…];

                     如:final int NUM=100;

  變量:是java 程式中的基本存儲單元,它的定義包括變量名、變量類型和作用域幾個部分。

其定義格式如下:

     typeSpecifier varName[=value[,varName[=value]…];

                 如:int count; char c='a';

算術運算符: +,―,*,/,%,++,――

關系運算符: >,<,>=,<=,==,!=

布爾邏輯運算符: !,&&,||

運算符的優先次序

優先次序 運算符

1     . [] ()

2     ++ -- ! ~ instanceof

3     new (type)

4     * / %

5     + -

6     >> >>> <<

7     > < >= <=

8     = = !=

9     &

10     ^

11     |

12     &&

13     ||

14     ?:

15     = += -= *= /= %= ^=

16     &= |= <<= >>= >>>=

條件語句 if-else

多分支語句 switch     (這些和其他語言中的使用格式大多雷同,不多說,金州注釋)

循環語句while語句 do-while語句 for語句

跳轉語句break語句 continue語句 傳回語句return

例外處理語句:try-catch-finally, throw

數組,字元串處理金。州略過。因為要超簡單介紹。

三。Java語言中的面向對象特性

基本特征1.封裝性 2.繼承性3.多态性

類:包括兩個部分:類聲明和類體。

這個說起來比較麻煩,隻要記住這個語言面對的是對象就好了,不是面對過程的。是以這個語言

才簡單好用,就是說比如你隻考慮如何如何操作一台電腦,而不用多想這種操作為什麼會實作。

比如我寫這個東西,點檔案儲存就會儲存,而不用想調用了哪些函數使得檔案儲存的。

四。Java的例外處理和I/O流

例外,比如金州要去鄭州,路上出車禍了,去不成了。就是說程式有問題,不能執行下去

I/O輸入輸出。

舉例:

class ExceptionDemo2{

      public static void main( String args[ ] ){   (格式,金州注釋)

       int a = 0;                       (讓a = 0,金州注釋)

       System.out.println( 5/a );       (輸入5/a ,金州注釋)

      }

     }

因為除數不能為0,就例外了,出問題了就是。java中的例外類可分為兩大類 Error。 Exception

兩種處理例外的機制:1.捕獲例外:當Java運作時系統得到一個例外對象時,它将會沿着方法的

調用棧逐層回溯,尋找處理這一例外的代碼。找到能夠處理這種類型的例外的方法後,運作時

系統把目前例外對象交給這個方法進行處理,這一過程稱為捕獲(catch)例外。這是積極的例外

處理機制。如果Java運作時系統找不到可以捕獲例外的方法,則運作時系統将終止,相應的Java程式也将退出。

捕獲例外通過try-catch-finally語句實作。

2.聲明抛棄例外:如果一個方法并不知道如何處理所出現的例外,則可在方法聲明時,聲明抛棄(throws)例外。

這是一種消極的例外處理機制。聲明抛棄例外是在一個方法聲明中的throws子句中指明。

I/O流的層次1.位元組流2.字元流3.對象流4.其它

I/O進行中,最常見的是對檔案的操作,

檔案描述舉例:列出目錄D://ex/所有的.java檔案

import java.io.*;               (io處理,金州注釋)

  public class FileFilterTest{

    public static void main(String args[]){   (以上格式,起個名字。金州注釋)

     File dir=new File("d://ex");     (用File 對象裡面那個目錄,金州注釋)

     Filter filter=new Filter("java");   (生成一個名為java的過濾器,金州注釋)

     System.out.println("list java files in directory "+dir);

     String files[]=dir.list(filter);   (輸入列舉目錄,金州注釋)

     for(int i=0;i<files.length;i++){   (循環查找,金州注釋)

      File f=new File(dir,files);   (為目錄dir 賦予對象,金州注釋)

       if(f.isFile())             (如果找到就輸出,金州注釋)

        System.out.println("file "+f);

       else

        System.out.println("sub directory "+f ); (如果是目錄則列印目錄名)

     }

    }

   }

   class Filter implements FilenameFilter{

    String extent;

    Filter(String extent){

     this.extent=extent;

    }

    public boolean accept(File dir,String name){

     return name.endsWith("."+extent);   (傳回檔案的字尾名,金州注釋)

    }

   }

檔案或目錄的生成

  public File(String path);

  public File(String path,String name);//path是路徑名,name是檔案名

  public File(File dir,String name);//dir是路徑名,name是檔案名

檔案名的處理

  String getName( ); //得到一個檔案的名稱(不包括路徑)

  String getPath( ); //得到一個檔案的路徑名

  String getAbsolutePath( );//得到一個檔案的絕對路徑名

  String getParent( ); //得到一個檔案的上一級目錄名

  String renameTo(File newName); //将目前檔案名更名為給定檔案的

                   完整路徑

檔案屬性測試

  boolean exists( ); //測試目前File對象所訓示的檔案是否存在

  boolean canWrite( );//測試目前檔案是否可寫

  boolean canRead( );//測試目前檔案是否可讀

  boolean isFile( ); //測試目前檔案是否是檔案(不是目錄)

  boolean isDirectory( ); //測試目前檔案是否是目錄

普通檔案資訊和工具

  long lastModified( );//得到檔案最近一次修改的時間

  long length( ); //得到檔案的長度,以位元組為機關

  boolean delete( ); //删除目前檔案

目錄操作

  boolean mkdir( ); //根據目前對象生成一個由該對象指定的路徑

  String list( ); //列出目前目錄下的檔案

随機通路檔案

構造方法:

  RandomAccessFile(String name,String mode); //name是檔案名,mode

          //是打開方式,例如"r"表示隻讀,"rw"表示可讀寫,"

  RandomAccessFile(File file,String mode); //file是檔案對象

檔案指針的操作

  long getFilePointer( ); //用于得到目前的檔案指針

  void seek( long pos ); //用于移動檔案指針到指定的位置

  int skipBytes( int n ); //使檔案指針向前移動指定的n個位元組

幾種常見的過濾流

過濾流在讀/寫資料的同時可以對資料進行處理,它提供了同步機制,使得某一時刻隻有

一個線程可以通路一個I/O流,以防止多個線程同時對一個I/O流進行操作所帶來的意想不

到的結果

BufferedInputStream和BufferedOutputStream

    緩沖流,用于提高輸入/輸出處理的效率。

DataInputStream 和 DataOutputStream

    不僅能讀/寫資料流,而且能讀/寫各種的java語言的基本類型,如:boolean,int,float等。

LineNumberInputStream

    除了提供對輸入處理的支援外,LineNumberInputStream可以記錄目前的行号。

PushbackInputStream

    提供了一個方法可以把剛讀過的位元組退回到輸入流中,以便重新再讀一遍。

PrintStream

    列印流的作用是把Java語言的内構類型以其字元表示形式送到相應的輸出流。

字元流

1.Reader類是處理所有字元流輸入類的父類。

讀取字元

  public int read() throws IOException; //讀取一個字元,傳回值為讀取的字元

  public int read(char cbuf[]) throws IOException;

  public abstract int read(char cbuf[],int off,int len) throws IOException;

  

标記流

  public boolean markSupported(); //判斷目前流是否支援做标記

  public void mark(int readAheadLimit) throws IOException;

   //給目前流作标記,最多支援readAheadLimit個字元的回溯。

  public void reset() throws IOException; //将目前流重置到做标記處

關閉流

  public abstract void close() throws IOException;

2. Writer類是處理所有字元流輸出類的父類。

向輸出流寫入字元

  public void write(int c) throws IOException;

  //将整型值c的低16位寫入輸出流

  public void write(char cbuf[]) throws IOException;

  //将字元數組cbuf[]寫入輸出流

  public abstract void write(char cbuf[],int off,int len) throws IOException;

  //将字元數組cbuf[]中的從索引為off的位置處開始的len個字元寫入輸出流

  public void write(String str) throws IOException;

  //将字元串str中的字元寫入輸出流

  public void write(String str,int off,int len) throws IOException;

  //将字元串str 中從索引off開始處的len個字元寫入輸出流

flush( )

  刷空輸出流,并輸出所有被緩存的位元組。

關閉流

  public abstract void close() throws IOException

生成流對象

  public InputStreamReader(InputStream in);

  

  public OutputStreamWriter(OutputStream out);

  

  public OutputStreamWriter(OutputStream out,String enc) throws UnsupportedEncodingException;

  //enc是編碼方式

  InputStreamReader和OutputStreamWriter的方法:

讀入和寫出字元

  基本同Reader和Writer。

擷取目前編碼方式

  public String getEncoding();

關閉流

  public void close() throws IOException;

生成流對象

  public BufferedReader(Reader in); //使用預設的緩沖區大小

  public BufferedReader(Reader in, int sz); //sz為緩沖區的大小

  public BufferedWriter(Writer out);

  public BufferedWriter(Writer out, int sz);

讀入/寫出字元

  除了Reader和Writer中提供的基本的讀寫方法外,增加對整行字元的處理。

  public String readLine() throws IOException; //讀一行字元

  public void newLine() throws IOException; //寫一行字元

記憶體的讀/寫

1.ByteArrayInputStream和ByteArrayOutputStream

  ByteArrayInputStream //從位元組數組中讀取以位元組為機關的資料

  ByteArrayOutputStream //向位元組數組中寫入以位元組為機關的資料

2。StringBufferInputStream和StringBufferOutputStream

  StringBufferInputStream

  //從字元串緩沖區StringBuffer中讀取以字元為機關的資料

  StringBufferOutputStream

  //向字元串緩沖區StringBuffer中寫入以字元為機關的資料

五AWT圖形使用者界面設計

AWT事件及其相應的監聽器接口

事件類别     描述資訊   接口名           方法

 ActionEvent 激活元件   ActionListener  actionPerformed(ActionEvent)

 ItemEvent 選擇了某些項目   ItemListener  itemStateChanged(ItemEvent)

 MouseEvent 滑鼠移動   MouseMotionListener  mouseDragged(MouseEvent)

 mouseMoved(MouseEvent)

滑鼠點選等   MouseListener  mousePressed(MouseEvent)

 mouseReleased(MouseEvent)

 mouseEntered(MouseEvent)

 mouseExited(MouseEvent)

 mouseClicked(MouseEvent)

 KeyEvent 鍵盤輸入   KeyListener  keyPressed(KeyEvent)

 keyReleased(KeyEvent)

 keyTyped(KeyEvent)

 FocusEvent 元件收到或失去焦點   FocusListener  focusGained(FocusEvent)

 focusLost(FocusEvent)

 AdjustmentEvent 移動了滾動條等元件   AdjustmentListener  adjustmentValueChanged(AdjustmentEvent)

 ComponentEvent 對象移動縮放顯示隐藏等   ComponentListener  componentMoved(ComponentEvent)

 componentHidden(ComponentEvent)

 componentResized(ComponentEvent)

 componentShown(ComponentEvent)

 WindowEvent 視窗收到視窗級事件   WindowListener  windowClosing(WindowEvent)

 windowOpened(WindowEvent)

 windowIconified(WindowEvent)

 windowDeiconified(WindowEvent)

 windowClosed(WindowEvent)

 windowActivated(WindowEvent)

 windowDeactivated(WindowEvent)

 ContainerEvent 容器中增加删除了元件   ContainerListener  componentAdded(ContainerEvent)

 componentRemoved(ContainerEvent)

 TextEvent 文本字段或文本區發生改變   TextListener  textValueChanged(TextEvent)

其餘略過

六Java的線程和Java Applet

Applet和浏覽器間的通信

getDocumentBase( ) //傳回目前網頁所在的URL

  getCodeBase( ) //傳回目前applet所在的URL

  getImage(URL base,String target) //傳回網址URL中名為target的圖像

  getAudioClip(URL base,String target)

                 //傳回網址URL中名為target的聲音對象

  getParameter(String target ) //提取HTML檔案中名為target的參數的值

同頁Applet間的通信

  在java.applet.Applet類中提供了如下方法得到目前運作頁的環境上下文AppletContext對象。

  public AppletContext getAppletContext();

通過AppletContext對象,可以得到目前小應用程式運作環境的資訊。AppletContext是一個接口,

其中定義了一些方法可以得到目前頁的其它小應用程式,進而實作同頁小應用程式之間的通信。

1.得到目前運作頁的環境上下文AppletContext對象

     public AppletContext getAppletContext();

2.取得名為name的Applet對象

     public abstract Applet getApplet(String name);

3.得到目前頁中所有Applet對象

     public abstract Enumeration getApplets();

七Swing使用者界面設計

Swing包

包                描述

Com.sum.swing.plaf.motif 使用者界面代表類,它們實作Motif界面樣式  

Com.sum.java.swing.plaf.windows 使用者界面代表類,它們實作Windows界面樣式

Javax.swing   Swing元件和使用工具

Javax.swing.border    Swing輕量元件的邊框

Javax.swing.colorchooser   JcolorChooser的支援類/接口

Javax.swing.event   事件和偵聽器類

Javax.swing.filechooser   JFileChooser的支援類/接口

Javax.swing.pending   未完全實作的Swing元件

Javax.swing.plaf   抽象類,定義UI代表的行為

Javax.swing.plaf.basic   實作所有标準界面樣式公共功能的基類

Javax.swing.plaf.metal 使用者界面代表類,它們實作Metal界面樣式

Javax.swing.table   Jtable元件

Javax.swing.text   支援文檔的顯示和編輯

Javax.swing.text.html   支援顯示和編輯HTML文檔

Javax.swing.text.html.parser   Html文檔的分析器

Javax.swing.text.rtf   支援顯示和編輯RTF檔案

Javax.swing.tree   Jtree元件的支援類

Javax.swing.undo   支援取消操作

金州略過

八Java網絡程式設計

為了表示URL, java.net中實作了類URL。我們可以通過下面的構造方法來初始化一個URL對象:

public URL (String spec);

     通過一個表示URL位址的字元串可以構造一個URL對象。

     URL urlBase=new URL("http://www. 263.net/")

public URL(URL context, String spec);

     通過基URL和相對URL構造一個URL對象。

     URL net263=new URL ("http://www.263.net/");

     URL index263=new URL(net263, "index.html")

public URL(String protocol, String host, String file);

     new URL("http", "www.gamelan.com", "/pages/Gamelan.net. html");

public URL(String protocol, String host, int port, String file);

     URL gamelan=new URL("http", "www.gamelan.com", 80, "Pages/Gamelan.network.html");

注意:類URL的構造方法都聲明抛棄非運作時例外(MalformedURLException),是以生成URL對象時,

我們必須要對這一例外進行處理,通常是用try-catch語句進行捕獲。格式如下:

try{

URL myURL= new URL(…)

}catch (MalformedURLException e){

  …

                       (放置例外的編碼的,金州注釋)

  …

}

這個應該很熟悉的,哈哈,前天還有朋友在邪惡八進制的回帖裡面問這一句什麼意思。

一個URL對象生成後,其屬性是不能被改變的,但是我們可以通過類URL所提供的方法來擷取這些屬性:

public String getProtocol() 擷取該URL的協定名。

public String getHost() 擷取該URL的主機名。

public int getPort() 擷取該URL的端口号,如果沒有設定端口,傳回-1。

public String getFile() 擷取該URL的檔案名。

public String getRef() 擷取該URL在檔案中的相對位置。

public String getQuery() 擷取該URL的查詢資訊。

public String getPath() 擷取該URL的路徑

public String getAuthority() 擷取該URL的權限資訊

public String getUserInfo() 獲得使用者的資訊

public String getRef() 獲得該URL的錨

當我們得到一個URL對象後,就可以通過它讀取指定的WWW資源。這時我們将使用URL的方法openStream(),其定義為:

         InputStream openStream();

方法openSteam()與指定的URL建立連接配接并傳回InputStream類的對象以從這一連接配接中讀取資料。

public class URLReader {

public static void main(String[] args) throws Exception{   (聲明抛出所有例外,金州注釋)

URL tirc = new URL("http://www.eviloctal.com/forum/"); (建構一URL對象,金州注釋)                    

BufferedReader in = new BufferedReader(new InputStreamReader(tirc.openStream()));

 (使用openStream得到一輸入流并由此構造一個BufferedReader對象,金州注釋)

String inputLine;

while ((inputLine = in.readLine()) != null) (一直讀,讀完為止,金州注釋)

  System.out.println(inputLine);       (輸出,金州注釋)

in.close();               ( 關閉輸入流,金州注釋)

 }

}

例子

下面是一個典型的建立用戶端Socket的過程。

try{

 Socket socket=new Socket("127.0.0.1",4700);      

}catch(IOException e){

 System.out.println("Error:"+e);

}

這是最簡單的在用戶端建立一個Socket的一個小程式段,也是使用Socket進行網絡通訊的

第一步,程式相當簡單,在這裡不作過多解釋了。