<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-61  評(píng)論-13  文章-19  trackbacks-0
    全面認(rèn)識(shí)JAVA
    作者:unknown 更新時(shí)間:2005-04-07 ?
    ?
    作SCJP培訓(xùn)已經(jīng)有一段時(shí)間了,到我這學(xué)習(xí)的有在校的大學(xué)生,也有在職的開(kāi)發(fā)人員。通常這些學(xué)員此前都對(duì)Java已有一些了解,但普遍對(duì)Java缺乏總體的認(rèn)識(shí)。于是學(xué)員總是問(wèn),Java應(yīng)該怎么學(xué)?Java能做什么?什么是Applet?什么是Servlet、Jsp、EJB?還有Webspere、Weblogic又是做什么的等等。之所以學(xué)員會(huì)有這些疑問(wèn),是因?yàn)榇蠹移毡閷?duì)Java相關(guān)概念聽(tīng)說(shuō)的太多而了解的又相對(duì)少的緣故。

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

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

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

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

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

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

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

      三、Java中的I/O操作

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

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

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

    可以用awt包或swing包的Java類來(lái)進(jìn)行大部分的Java圖形界面設(shè)計(jì),下面的幾行代碼將產(chǎn)生一個(gè)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)閉按鈕時(shí)能關(guān)閉Frame窗體,需要讓這個(gè)窗體響應(yīng)一個(gè)WindowEvent事件,具體的做法就是給這個(gè)窗體添加一個(gè)事件監(jiān)聽(tīng)器對(duì)象,這個(gè)事件監(jiān)聽(tīng)器就是WindowListener接口的實(shí)現(xiàn)。在上面的代碼中插入如下代碼就可以關(guān)閉窗體:

    f.addWindowListener(new WindowAdapter(){
    ??public void windowClosing(WindowEvent e){
    System.exit(0);
    ??}
    }

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

    五、Java中線程及同步控制

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

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

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

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

      六、Java本地方法(native方法)的實(shí)現(xiàn)

      Java不是完美的,Java的不足除了體現(xiàn)在運(yùn)行速度上要比傳統(tǒng)的C++慢許多之外,Java無(wú)法直接訪問(wèn)到操作系統(tǒng)底層(如系統(tǒng)硬件等),為此Java使用native方法來(lái)擴(kuò)展Java程序的功能。

      可以將native方法比作Java程序同C程序的接口,其實(shí)現(xiàn)步驟:

      1、在Java中聲明native()方法,然后編譯;
      2、用javah產(chǎn)生一個(gè).h文件;
      3、寫一個(gè).cpp文件實(shí)現(xiàn)native導(dǎo)出方法,其中需要包含第二步產(chǎn)生的.h文件(注意其中又包含了JDK帶的jni.h文件);
      4、將第三步的.cpp文件編譯成動(dòng)態(tài)鏈接庫(kù)文件;
      5、在Java中用System.loadLibrary()方法加載第四步產(chǎn)生的動(dòng)態(tài)鏈接庫(kù)文件,這個(gè)native()方法就可以在Java中被訪問(wèn)了。

      上述所提及的一些Java技術(shù)具有一定的普遍性,它們基本上是在Java各個(gè)方面的運(yùn)用中都需要掌握的術(shù)。實(shí)際上Java的運(yùn)用非常廣泛,而且每個(gè)方面都需要遵循不同的規(guī)范。以下是對(duì)Java應(yīng)用的簡(jiǎn)要介紹。

    (一)理解Java SDK的三個(gè)版本:

    Java SDK Micro Edition (J2ME)

    用于開(kāi)發(fā)掌上電腦、手機(jī)等移動(dòng)通信設(shè)備上使用的應(yīng)用程序。并不是所有的移動(dòng)設(shè)備都支持Java,只有具備J2ME運(yùn)行環(huán)境(JVM+J2ME API)的設(shè)備才能運(yùn)行Java程序。J2ME的集成開(kāi)發(fā)工具(通常都有帶有一些訪真器)有 Sun 的J2ME Wireless Toolkit 、IBM的Visul Age Micro Edition 等。

    Java SDK Standard Edition(J2SE)

    主要用于開(kāi)發(fā)一般臺(tái)式機(jī)應(yīng)用程序。我們平時(shí)所說(shuō)的JDK就指J2SE,而我們學(xué)Java就是從學(xué)習(xí)J2SE開(kāi)始的。

    Java SDK Enterprise Edition (J2EE)

    用于開(kāi)發(fā)分布式的企業(yè)級(jí)大型應(yīng)用程序。其中的核心是Entetprise Java Beans(EJB,分布式Java組件)的開(kāi)發(fā)。

    (二)Java小程序 (Applet)

    Java小程序是一個(gè)繼承了Applet類并重寫了init()、paint()、stop()等方法的的Java類,它被布署在Web服務(wù)器(如IIS)上,當(dāng)客戶端請(qǐng)求Web頁(yè)時(shí),瀏覽器從Web服務(wù)器上將其下載到本地客戶端,然后,瀏覽器創(chuàng)建該Applet類的實(shí)例并調(diào)用其init()方法,從安全角度考慮,Applet沒(méi)有訪問(wèn)本地文件的權(quán)限。由于Applet是被瀏覽器執(zhí)行的,所以Applet不需要一個(gè)main()方法。實(shí)際上,除了Java Application之外,所有其它Java應(yīng)用都不需要一個(gè)main()方法。

    (三)服務(wù)器端Java小程序 (Servlet)

    Servlet也是一個(gè)Java類,和Applet形成對(duì)比,Servlet是運(yùn)行于服務(wù)器端的Java小程序,而且Servlet需要一個(gè)單獨(dú)的Web服務(wù)器(如Tomcat)做容器。除此之外,Servlet中用到的一些類(如HttpServlet)并不包含在J2SE API中,所以需要將Servlet.jar(在Tomcat的common\lib文件夾下)加到環(huán)境變量中去。下面是一個(gè)簡(jiǎn)單的Servlet例子:

    public class Myservlet extends HttpServlet{

    ??public void doGet(HttpServletRequest request,HttpServletResponse response)
    {
    ??try{
    response.setContentType("text/html");
    PrintWriter out=response.getWriter();
    out.println("<html>");
    out.println("<body>");
    out.println("Hello world");
    out.println("</body>");
    out.println("</html>");
    ??}catch(IOException e){}
    }
    }

    將這個(gè)Class文件編譯后放至Tomcat\webapps\examples\WEB-INF\classes下,然后在瀏覽器地址欄里輸入http://127.0.0.1:8080/examples/servlet/Myservlet即可看到 Hello world出現(xiàn)在瀏覽器中。

    (四)Java Server Page (JSP)

    同Servlet相似的是,JSP運(yùn)行于Web服務(wù)器端,并且也需要Tomcat之類的容器。不同的是,由于JSP是將Java代碼嵌在html標(biāo)記里(同ASP一樣用<% ...%>),JSP的界面設(shè)計(jì)同后臺(tái)開(kāi)發(fā)人員的工作可以有效分離。可以想像讓開(kāi)發(fā)人員用Servlet寫一個(gè)花捎的Web頁(yè)面有多困難,所以JSP+Servlet混合Web應(yīng)用是比較理想的選擇。

    看起來(lái)JSP同ASP的實(shí)現(xiàn)機(jī)制大同小異,其實(shí)也存在著本質(zhì)的區(qū)別。所有的ASP頁(yè)面都是解釋運(yùn)行的,而JSP頁(yè)在第一次被請(qǐng)求時(shí)會(huì)被編譯,再以后的客戶請(qǐng)求都是直接運(yùn)行服務(wù)器上的.class文件(在Tomcat的Work文件夾下),所以JSP要比ASP速度上快許多。

    (五)Java Beans

    Java Bean 是可復(fù)用的組件,對(duì)Java Bean并沒(méi)有嚴(yán)格的規(guī)范,理論上講,任何一個(gè)Java類都可以是一個(gè)Bean。但通常情況下,由于Java Bean是被容器所創(chuàng)建(如Tomcat)的,所以Java Bean應(yīng)具有一個(gè)無(wú)參的構(gòu)造器,另外,通常Java Bean還要實(shí)現(xiàn)Serializable接口用于實(shí)現(xiàn)Bean的持久性。

    (六)Enterprise Java Beans (EJB)

    Java Bean實(shí)際上相當(dāng)于微軟COM模型中的本地進(jìn)程內(nèi)COM組件,它是不能被跨進(jìn)程訪問(wèn)的。Enterprise Java Bean 相當(dāng)于DCOM,即分布式組件。它是基于Java的遠(yuǎn)程方法調(diào)用(RMI)技術(shù)的,所以EJB可以被遠(yuǎn)程訪問(wèn)(跨進(jìn)程、跨計(jì)算機(jī))。但EJB必須被布署在諸如Webspere、WebLogic這樣的容器中,EJB客戶從不直接訪問(wèn)真正的EJB組件,而是通過(guò)其容器訪問(wèn)。EJB容器是EJB組件的代理,EJB組件由容器所創(chuàng)建和管理。客戶通過(guò)容器來(lái)訪問(wèn)真正的EJB組件。

    這種模型很像COM+管理器,其實(shí)EJB容器正是起到COM+管理器的作用,只是EJB組件相對(duì)COM組件來(lái)說(shuō)更易用、更安全。

    總的說(shuō)來(lái),Java作為面象對(duì)象技術(shù)的一個(gè)代表,在當(dāng)今商業(yè)應(yīng)用中更容易開(kāi)發(fā)出高效的、多層的分布式應(yīng)用程序,而且,由于Java技術(shù)有很強(qiáng)的健壯性和易用性,加上同UML應(yīng)用的結(jié)合,開(kāi)發(fā)一個(gè)商業(yè)應(yīng)用軟件的周期會(huì)大大縮短,所以Java會(huì)有不錯(cuò)的前景。
    posted on 2006-03-18 00:29 xnabx 閱讀(129) 評(píng)論(0)  編輯  收藏

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 久久成人永久免费播放| 亚洲 自拍 另类小说综合图区| 尤物视频在线免费观看| 亚洲国产成人精品青青草原| 亚洲综合伊人久久大杳蕉| 国产免费av片在线无码免费看| 免费黄色福利视频| 秋霞人成在线观看免费视频 | 亚洲精品国产免费| 成人毛片100免费观看| 美女扒开尿口给男人爽免费视频| 亚洲精品天堂在线观看| 亚洲日产2021三区在线| 亚洲成年人在线观看| 亚洲色婷婷六月亚洲婷婷6月| 亚洲国产成人久久一区WWW| 成年人免费视频观看| 91麻豆最新在线人成免费观看 | 久久青青草原亚洲av无码app | 亚洲国产成人精品久久| 亚洲av无码片在线播放| 亚洲精品无码鲁网中文电影| 亚洲精品97久久中文字幕无码| 国产午夜无码视频免费网站| 最近中文字幕无吗免费高清| 免费一本色道久久一区| 在线观看免费人成视频色| 日本免费xxxx| 久久久久久免费视频| 一本无码人妻在中文字幕免费 | 亚洲免费人成在线视频观看| 国产亚洲人成A在线V网站| 亚洲狠狠爱综合影院婷婷| 中文字幕亚洲一区二区三区| 亚洲亚洲人成综合网络| 国产亚洲精品影视在线产品| 亚洲精品国偷自产在线| 亚洲av不卡一区二区三区| 久久亚洲AV成人无码软件| 亚洲经典在线观看| 国产成人精品日本亚洲专区6|