離弦之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的技術天空 閱讀(712) | 評論 (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"%>


          此外還有bufferautoFlusherrorPageisErrorPageisThreadSafeextendslanguage屬性


          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的技術天空 閱讀(621) | 評論 (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)       一個方法被覆蓋時,覆蓋它的方法必須拋出相同的異常或異常的子類

          (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,包括ArrayListArray甚至還有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的技術天空 閱讀(225) | 評論 (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的技術天空 閱讀(173) | 評論 (0)編輯 收藏

          僅列出標題
          共11頁: First 上一頁 3 4 5 6 7 8 9 10 11 下一頁 
          主站蜘蛛池模板: 巴南区| 新蔡县| 龙州县| 佛坪县| 凉城县| 武汉市| 上蔡县| 名山县| 嵩明县| 石门县| 友谊县| 玉龙| 疏附县| 安岳县| 霍州市| 榆中县| 蒙阴县| 柯坪县| 来宾市| 鹿泉市| 长寿区| 和林格尔县| 保山市| 高阳县| 鄢陵县| 汾阳市| 平定县| 松溪县| 清流县| 项城市| 栾川县| 湘潭县| 丰顺县| 潼南县| 汉寿县| 枞阳县| 井陉县| 盐池县| 东莞市| 龙游县| 永宁县|