明輝手游網(wǎng)中心:是一個免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

所有方面認(rèn)識JAVA

[摘要]作SCJP培訓(xùn)已經(jīng)有一段時間了,到我這學(xué)習(xí)的有在校的大學(xué)生,也有在職的開發(fā)人員。通常這些學(xué)員此前都對Java已有一些了解,但普遍對Java缺乏總體的認(rèn)識。于是學(xué)員總是問,Java應(yīng)該怎么學(xué)?Java能做什么?什么是Applet?什么是Servlet、Jsp、EJB?還有Webspere、Weblo...
作SCJP培訓(xùn)已經(jīng)有一段時間了,到我這學(xué)習(xí)的有在校的大學(xué)生,也有在職的開發(fā)人員。通常這些學(xué)員此前都對Java已有一些了解,但普遍對Java缺乏總體的認(rèn)識。于是學(xué)員總是問,Java應(yīng)該怎么學(xué)?Java能做什么?什么是Applet?什么是Servlet、Jsp、EJB?還有Webspere、Weblogic又是做什么的等等。之所以學(xué)員會有這些疑問,是因?yàn)榇蠹移毡閷ava相關(guān)概念聽說的太多而了解的又相對少的緣故。

  學(xué)通Java語言需要一個過程,所有Java相關(guān)的概念都會在學(xué)習(xí)的過程中逐漸變得清昕。這個過程的開始就是要先學(xué)會標(biāo)準(zhǔn)的Java技術(shù)(J2SE),然后是學(xué)Java的簡單Web運(yùn)用,然后分布式運(yùn)用,再以后對Java的移動技術(shù)運(yùn)用就很容易理解了。

  以下是Java標(biāo)準(zhǔn)技術(shù)的一些要點(diǎn):

  一、Java的跨平臺性,即一次編譯到處運(yùn)行

  簡單地說Java的跨平臺性就是指,編譯后的Java程序可直接在不同的平臺上運(yùn)行而不用重新編譯,這一特性使得Java隨著Web應(yīng)用的普及而迅速普及起來。而Java的跨平臺性是如何實(shí)現(xiàn)的呢?這就要理解Java虛擬機(jī)和字節(jié)碼的概念。

  實(shí)際上,編譯后的Java代碼并不是傳統(tǒng)的二進(jìn)制代碼(如Windows下的.exe文件),而是Java字節(jié)碼,這種字節(jié)碼文件是不能直接在操作系統(tǒng)上執(zhí)行的。要想在一個操作系統(tǒng)上運(yùn)行一個Java程序必須有一個中間環(huán)節(jié)來負(fù)責(zé)將Java字節(jié)碼解釋成二進(jìn)制碼,這個中間環(huán)節(jié)就是Java虛擬機(jī)(簡稱JVM)。由于目前大多數(shù)操作系統(tǒng)已經(jīng)實(shí)現(xiàn)了JVM,所以Java輕松實(shí)現(xiàn)跨平臺性。

  二、面象對象技術(shù)

  Java全面支持面象對象技術(shù),這體現(xiàn)在Class(類)是Java程序構(gòu)成的基本單元,一個Java程序通常由許多Class組成,而且這些Class還會有一定的繼承關(guān)系,Java支持Class的單繼承,從而使類之間的繼承關(guān)系更明確。繼承的結(jié)果產(chǎn)生類的多態(tài)性,類的多態(tài)本質(zhì)上講就是可以用父類的引用訪問繼承類的實(shí)現(xiàn)(子類對象),類的這種多態(tài)性最終形成了組件對象模型的基礎(chǔ),即通過接口(父類)訪問實(shí)現(xiàn)(子類)。

  三、Java中的I/O操作

  Java中以字節(jié)流(InputStream和OutputStream)、節(jié)符流(Reader和Writer)來分別讀寫二進(jìn)制數(shù)據(jù)和字符數(shù)據(jù),使用非常簡單有效。Java類庫中的File類不僅提供文件操作而且還包含文件夾操作,如下面這幾行代碼可以列出C盤根目錄下的所有文件:

  File f=new File("c://");
  String [] m_dir= f.list();
  for(int i=0;i
  System.out.println(m_dir[i]);

  四、Java中的圖形及事件處理

  可以用awt包或swing包的Java類來進(jìn)行大部分的Java圖形界面設(shè)計,下面的幾行代碼將產(chǎn)生一個200*200像素的窗體:

  Frame f=new Frame("Welcome");
  f.setSize(200,200);
  f.setVisible(true);

  默認(rèn)情況下,F(xiàn)rame窗體的關(guān)閉按鈕不起作用,這也是Java初學(xué)者迷惑的地方。為了使用戶按下關(guān)閉按鈕時能關(guān)閉Frame窗體,需要讓這個窗體響應(yīng)一個WindowEvent事件,具體的做法就是給這個窗體添加一個事件監(jiān)聽器對象,這個事件監(jiān)聽器就是WindowListener接口的實(shí)現(xiàn)。在上面的代碼中插入如下代碼就可以關(guān)閉窗體:

  f.addWindowListener(new WindowAdapter(){
 。爌ublic void windowClosing(WindowEvent e){
  System.exit(0);
 。}
  }

  這里用到一個無名內(nèi)部類,無名內(nèi)部類是Java中內(nèi)部類的一種靈活運(yùn)用方式。

  五、Java中線程及同步控制

  線程概念的引入是為了實(shí)現(xiàn)并行處理,從而提高程序的效率。Java中的線程實(shí)現(xiàn)非常簡單,可以用兩種方式來創(chuàng)建線程,一種是實(shí)現(xiàn)Runnable接口,另一種是繼承Thread類重寫run()方法。兩種方式唯一的不同就是前者保留了繼承一個類的可能(因?yàn)镴ava只支持類的單繼承,但接口沒有此限制)。

  永遠(yuǎn)都用start()方法來啟動一個線程,線程類中的run()可以被直接調(diào)用,但決不是啟動一個線程,二者有著本質(zhì)的區(qū)別。

  用同步控制關(guān)鍵字synchronized來保護(hù)線程敏感數(shù)據(jù),synchronized塊中的內(nèi)容可以保證同一時刻只能被一個線程訪問,所以其中的數(shù)據(jù)是線程安全的。

  用Object類中的wait()和notify()方法可以實(shí)現(xiàn)線程間交互,但要記住wait()和notify()方法只有發(fā)生在同一個對象上才能真正實(shí)現(xiàn)線程間交互。被某一對象wait()方法阻塞的線程需要另外一個調(diào)用了同一對象notify()的線程干預(yù)才能恢復(fù)運(yùn)行。notify()方法一次喚醒一個被wait()方法阻塞的線程,notifyAll()方法可以一次喚醒所有被wait()方法阻塞的線程。