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

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

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

    離弦之Ray

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      55 Posts :: 0 Stories :: 33 Comments :: 0 Trackbacks

    #

     

    基礎概念——Class Modeling

    OO的概念——這就不多說了


    三種模型

    class model——描述object的結構

    state model——描述單個object的行為

    interaction model——描述object之間的互動行為


    Class Model

    單個的class圖很簡單


    首先是類名、然后是屬性,最后是方法。

    前面的+表示public-表示private,#表示protected


    Association


    形式上Association就是一根線,表示兩個類之間的關系,線上可以標明Association的名字,兩端可以標上multiplicity1表示one,"1..*"表示one or more,"3..5"表示three to five

    "*"表示many

    兩個類之間可以有多于一個Association,但一般不常用


    Association End Names


    Association
    的兩端可以標上兩個類在這個關系中的角色

    這在兩個類的關系中作用可能不是特別明顯,但如果相關的雙方屬于同一個類


    Association兩端可以加很多限制



    等等,還有Bags對應于sequence,沒有先后次序。


    Qualified Association


    首先是沒有Qualified


    然后是Qualified



    N-ary Association


    Generalization

    具體在編程語言中,就是繼承關系


    很簡單不多說


    Association->Aggregation->Composition


    Aggregation表現的是一種part-whole的關系


    Composition


    Composition
    Aggregation的區別是part只能屬于一個Assembly

    可以說Association->Aggregation->Composition關系一層強過一層


    Abstract Class 類名用斜體字


    屬性有一種叫做Derived Data,它的意思是這個屬性是被其它屬性或類導出來的,被其它elements所決定,符號是在這個屬性前面加上斜杠


    如上圖中,agebirthdate currentDate所決定。

    最后一種圖示,就是package


    posted @ 2007-10-15 11:30 離弦之ray的技術天空 閱讀(711) | 評論 (0)編輯 收藏

     

    servlet 基本結構

    public class ServletClass extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpSevletResponse response)

    throws ServletException,IOException{

    //Use “request” to read incoming HTTP headers


    //Use “response” to specify the HTTP response status


    //use “out” to send content to browser

    PrintWriter out = response.getWriter();

    }

    }

    如果希望servletGETPOST請求采用同樣的行動,只需要讓doGet調用doPost,反之亦然。
    值得注意的是doGetdoPost都要接收以上兩種類型的參數。


    servlet 處理表單數據

    表單數據

    1)使用FORM來創建HTML表單

    <FORM ACTION="..."> 其中 "..."指的就是處理表單的servlet 或者JSP

    2)使用輸入元素收集用戶數據

    <INPUT TYPE="TEXT" NAME="...">

    3)在接近表單的尾部放置提交按鈕

    <INPUT TYPE="SUBMIT">

    讀取表單數據

    有三種情況:①request.getParameter②request.getParameterValues

    request.getParameterNames

    getParameter對應于單個值的讀取,如果有這個參數但沒值,那就返回空的String;如果沒有這個參數,則返回null

    getParameterValues對應于同一個參數的多個值,返回的是一個數組,是這個參數值的集合。如果不存在這個參數名,那就返回一個null;如果這個參數只有一個值,那就返回一個只有一個元素的數組。

    getParameterValues返回的是所有參數的一個Enumeration,如果沒有參數,那返回的就是一個空的Enumeration而不是null。同時這個Enumeration中的次序是亂序的。

    要對參數為null或者為空String的情況作出相應的處理

    if((param==null)||(param.trim().equals(""))){...}


    RequestDispatcher

    下面的代碼:

    RequestDispatcher dispatcher = request.getRequestDispathcer s(address);

    dispatcher.forward (request,response);



    JSP

    JSP直接插入表達式

    <%= Java Expression%> 比如:<%= new java.util.Date() %>

    其實,JSP在后臺都被轉化成servlet,所以servlet JSP沒有本質的區別。


    scriptlet

    說白了,就是直接在JSP頁面中插入java代碼,我不是很喜歡,太亂了。舉個例子:

    <% if(Math.random()<0.5) {%>

    <H1>Have a <I>nice</I> day!</H1>

    <% } else {%>

    <H1>Have a <I>lousy</I>day!</H1>

    <% } %>

    JSP page指令

    import 屬性

    <%@ import = "package.class"%>

    <%@ import = "package.class1,package.class2...package.classN"%>

    contentTypepageEncoding屬性

    <%@ page contentType = "someMimeType; charset = someCharacterSet"%>

    比如<%@ page contentType = "application/vnd.ms-excel"%>

    pageEncoding指的是字符集

    比如設置成日語:<%@ page pageEncoding="Shift_JIS"%>


    session屬性

    控制頁面是否參加HTTP會話

    <%@ page session = "true"%>


    isELIgnored屬性

    是否忽略JSP2.0表達式語言

    <%@ page isELIgnored = "ture"%>


    此外還有bufferautoFlush、errorPage、isErrorPageisThreadSafe、extends、language屬性


    JSP中使用JavaBean

    基本要掌握三個語句

    <jsp: useBean id="beanName" class="package.class"/>

    <jsp:getProperty name = "beanName" property="propertyName"/>

    <jsp:setProperty name ="beanName" property="propertyName" value="propertyValue"/>






    posted @ 2007-10-14 22:57 離弦之ray的技術天空 閱讀(619) | 評論 (0)編輯 收藏

     

    Java類型相關

    類型名

    大小

    取值范圍

    byte

    8 bits

    -128127

    short

    16 bits

    -32768~32767

    int

    32 bits

    long

    64 bits

    float

    32 bits

    double

    64 bits

    Java常量

    十進制不能以0打頭(數字0除外)

    十六進制必須以0x或者0X打頭

    八進制必須以0打頭

    長整型必須以L結尾

    小數常量默認為double型,如果要將小數賦值給float變量,數字后面要加f

    final關鍵字

    final 標記的類不能被繼承

    final 變量是常量,不能改變

    final 方法不能被子類重寫

    Java變量

    1)當發生隱式類型轉換時,目標類型取值范圍要大于源類型取值范圍

    2)字符串可以使用加號同其它的數據類型相連而形成一個新的字符串

    Example

    System.out.println(‘a’+1);    輸出的是98

    System.out.println(“”+’a’+1); 輸出的是”a1”

    3局部變量一定要進行初始化

            編譯的時候可能只是警告,但在使用時就會報錯

    Java運算

    (1)       整數之間做除法時,只保留整數部分而舍棄小數部分。

    (2)       養成這樣的習慣:把x==3 寫成 3==x

    (3)       &&&的區別

    &&稱為短路表達式,意思就是&不管兩邊是true或者false都會算一下,而&&如果算到前面的是false,它后面就不算了,反正綜合起來表達式肯定是false。

    (4)       位運算

    << 左移

    >> 右移

       如果最高位是0,左邊移空的高位就填0,如果最高位是1,左邊移空的高位就填入1

    >>> 無符號右移

       不管最高位是什么,移空的高位一律填入0

    右移n位就是除以2n次方

    左移n位就是乘以2n次方

    Java內存

    1Java內存分為兩種:

    棧內存:用于存放基本類型變量和對象的引用變量

    堆內存new創建的對象和數組

    2)當堆內存中的對象沒有引用指向它時,它就變成了垃圾,會被垃圾回收器回收。

    Java面向對象

    1= =常用來比較引用是否指向同一個地址

         equals()用來比較對象的內容是否一樣

         對于數組有Array.equals方法

    2finalize()方法,它相當于C++中的析構函數,但又和析構函數不一樣。因為Java里面已經有垃圾回收器了,所以finalize方法不是特別重要。另外,finalize是在對象被當成垃圾從內存中釋放前調用,而不是在對象變成垃圾前調用,垃圾回收器什么時候清理垃圾是不定時的,所以不要指望用finalize做什么必要的收尾工作,因為你根本無法確定它會趕在垃圾回收器之前執行。

    3System.gc()這個語句可以顯式地調用垃圾回收器回收垃圾。

    Java參數傳遞

    (1)       基本類型的變量作為實參傳遞,并不能改變這個變量的值

    舉個例子,就是main函數里面定義的一個變量,傳給一個方法,改下值,其實并沒有改變main函數里面那個變量而是改了那個方法自己內部的那個副本。

    (2)       那如果傳遞的是某個對象的引用呢?

    道理一樣,傳遞的是值,這個“值”就是引用的“值”,也就是對象的內存地址,方法通過這個地址對變量進行的修改,當然就是對main函數中定義的這個變量本身的修改了。

    Java內部類

    A類里面定義了B類,那么B就叫做內部類,A就叫做外部類。

    B可以直接訪問A類的所有變量和方法,反之不成立。

    B類保存了A類的this引用。

    內部類可以是static

    如果內部類被聲明為static,那么它可以包含static的變量,但不再能訪問外部類的非static變量。

    方法內定義的內部類,只能訪問方法中的final變量,而不能訪問臨時變量,但可以訪問外部類的變量。

    Java異常

    (1)       一個方法被覆蓋時,覆蓋它的方法必須拋出相同的異?;虍惓5淖宇?/span>

    (2)       如果父類拋出多個異常,那么覆蓋方法必須拋出那些異常的一個子集,也就是說,不能拋出新的異常。

    Java線程

    兩種實現多線程方式

    (1)       直接繼承Thread

    MyThread extends Thread

    然后

    MyThread t = new MyTread();

    t.start();

    t.start();

    值得注意的是,無論調用start多少遍只能啟動一個線程。

    要實現多個線程,只能生成多個對象,分別啟動線程,一個對象只能啟動一個線程

    (2)       實現Runnable接口

    MyThread implements Runnalbe

    然后

    new Thread(t).start();

    new Thread(t).start();

    這種方法就能實現多個線程。

    但這兩種方法啟動的多個線程又有不一樣的地方:

    第一種因為是生成了多個對象,所以類中聲明的一些資源,比如變量等等都是各不相關的。

    第二種對類中聲明的資源是多個線程共享的。

    所以要按需選擇。

    Java StringStringBuffer

    String 對象不能輕易被改變,經常用的“+”其實是新生成了一個String對象,平常感覺不大,但是真的在大型應用中,對效率影響非常嚴重。

    StringBuffer對象可以改動,一旦生成了不再變化的內容,就可以調用它的toString方法,把它轉化為String對象。

    posted @ 2007-10-10 10:51 離弦之ray的技術天空 閱讀(592) | 評論 (1)編輯 收藏

     

    Template method pattern

    從這個模式的名字就可以知道個大概,Template說明這個模式有一個模版,子類都要按照父類列出的大綱來干活。在這個模式中,父類通常是abstract的。為什么不用接口?因為對某些所有子類都要用到的方法,父類中就給出了代碼,而接口中是不能有具體實現代碼的。

    父類中有一個總的方法就是所謂的template method,這個方法通常被聲明為final,這樣子類就無法override它,保證了它的權威性。這個template method調用其它方法,這些“其它方法”包括了三個類型:

    第一種,是abstract類型,子類需要根據自己的情況實現這部分代碼;

    第二種,是final型的,這種方法父類把它寫死了,子類必須遵守;

    第三種,就是普通方法,是optional,子類可以延用父類的方法,也可以override掉它,寫自己的代碼,這種optional的方法給它一個名字叫做hook。

    這個父類通常是這種形勢。

    abstract class AbstractClass{

      final void templateMethod(){

          a();

          b();

          c();

          …

    }

        abstract void a();

        final void b(){}

        void c(){}

    }

    應該說這個模式既蘊含著權威性和自由性。

    Iterator and Composite Patterns

           這個模式的研究對象是Collection,包括ArrayList、Array甚至還有Hashmap等等一切java里面的集合對象。Iterator的理念是把集合對象中的遍歷等功能獨立抽取出來,實現一個Iterator的接口,主要實現next()hasNext()兩個方法,這些東西和數據結構里面的東西基本一樣。

    而以此為基礎的Composite Pattern其實就是數據結構里面樹的概念,所以這里的東西還是找本數據結構書看看更好。

    The State Pattern

           初看這個模式,發現里面有一個類似UML中狀態圖的東西,如其名字,這個模式主要描述如何處理應用中出現的“狀態”。

           解決方式是這樣的:

    .      第一步,創建一個叫做State的接口,里面包含什么東西呢?記得UML狀態圖中發生狀態轉換時箭頭上面那些改變的條件?把這些條件全部轉化為方法,表示當這個條件發生時,狀態該怎么變。

           第二步,每個具體的concreteState都要實現都要實現State這個接口。怎么實現?當然,state不是獨立出現的,總有一個把它作為參數的類,里面有個私有變量保存當前的狀態,暫且就把它稱作currentState吧。接口中定義的方法,在concreteState中這樣實現:每個方法根據條件定義,將currentState改成相應的狀態。

           以上其實就是State Pattern的精髓。

    posted @ 2007-09-22 13:51 離弦之ray的技術天空 閱讀(222) | 評論 (0)編輯 收藏

     

    Singleton Pattern

    針對一些在應用中只會有一個對象存在的類而總結的模式。

    令人意想不到的是,它是通過聲明該類的構造函數為私有這種方法來實現的。

    疑問就是,既然構造函數都成私有了,那怎么來創建這個類的對象呢?

    解答就是通過在類中聲明一個靜態方法,返回這個對象。

    典型的寫法是

    public static Singleton getInstance(){

     if(uniqueInstance==null){uniqueInstance = new Singleton();}

    return uniqueInstance;

    }

    這個模式的精髓就這么簡單,剩下的就是線程對對象的操作安全,要把這個方法加上synchronized關鍵字。

    Command Pattern

    書中是以餐館點菜作比來講述這個模式的。

    其中的對比概念如下

    Customer-------Client

    Order------------Command

    Waitress--------Invoker

    Cook------------Receiver

    Take order--------setCommand

    orderUp-----------excute

    怎么來解釋呢?說白了,就是把調用類要達成的操作封裝成一個Command對象,就像點菜那張單子一樣,當然這個Command要符合一定的規則實現Command接口,里面非常重要的一個方法就是execute

    setCommand方法相當于waitress把菜單遞給了廚師,在接收者方面他只管運行execute,具體做什么傳過來的command對象都已經設定好了。

    Adapter & Façade

    適配器模式其實沒什么多說的,就是要把傳過去的對象要實現接收者支持的格式,那個格式實際上就是一個接口。

    Façade模式是一種衍生物,它的目的是讓操作簡單化。將一系列不同對象中的操作整合,提供給其它類調用接口書上的例子是家庭影院,要看部電影,要開這個電器,開那個電器,通過Façade模式,將要看電影所必須的動作整合起來,一鍵搞定。明白了這點,也就理解了這個模式。

    posted @ 2007-09-18 15:48 離弦之ray的技術天空 閱讀(171) | 評論 (0)編輯 收藏

    僅列出標題
    共11頁: First 上一頁 3 4 5 6 7 8 9 10 11 下一頁 
    主站蜘蛛池模板: 亚洲一区二区三区香蕉| 久久久久se色偷偷亚洲精品av | 中文字幕精品无码亚洲字| 一个人看的www免费在线视频| 亚洲an天堂an在线观看| 在线观看免费高清视频| 国产成人高清精品免费观看| 亚洲五月激情综合图片区| 拍拍拍又黄又爽无挡视频免费| 丁香六月婷婷精品免费观看| 色婷婷六月亚洲婷婷丁香| 国产成人青青热久免费精品| 日本亚洲欧洲免费天堂午夜看片女人员 | 成人毛片手机版免费看| a在线视频免费观看在线视频三区| 在线免费观看亚洲| 亚洲成a人片在线观看老师| 91成人在线免费视频| 黄色a三级免费看| 亚洲a∨无码男人的天堂| 亚洲色婷婷综合久久| 免费黄色网址入口| 青青青国产手机频在线免费观看| 精品亚洲视频在线| 亚洲成人一级电影| 亚洲综合精品香蕉久久网| 色吊丝最新永久免费观看网站| 无码国产精品一区二区免费vr| 美女被暴羞羞免费视频| 亚洲资源最新版在线观看| 亚洲国产天堂在线观看| 亚洲日本中文字幕一区二区三区| 成年女人免费视频播放体验区| 美女视频黄a视频全免费网站色窝 美女被cao网站免费看在线看 | 五月天国产成人AV免费观看| 亚洲一卡二卡三卡| 久久久久亚洲AV成人无码网站| 亚洲VA综合VA国产产VA中| 67194成是人免费无码| 91精品国产免费久久国语蜜臀| 精品人妻系列无码人妻免费视频|