美麗涵涵童裝店--說我博客名字,給你們打折!
          隨筆 - 82  文章 - 266  trackbacks - 0
          <2007年6月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          1234567


          點擊這里給楊愛友發消息
          美麗涵涵童裝店
          說我博客名字,給你們打折!

          常用鏈接

          留言簿(6)

          隨筆分類

          隨筆檔案

          文章檔案

          好友的BLOG

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          ----------------------------------------------------------------------------------------------------
          在Java語言中,判斷兩個對象是否相等有兩種方法:
          1.判斷兩個對象的內存地址是否相同;
          2.判斷兩個對象的值是否相同。
          ‘==’運算符就是判斷內存地址是否相同的;Object類中的equals()方法也是根據內存地址來判斷,所以說如果一個類沒有覆蓋Object類中的equals()方法,那么用‘==’和 equals()是等同的;但Java API中的一些類覆蓋了Object類的equals()方法,實現按‘值’進行比較。這些類包括:
          String、Date、Java所有包裝類(基本數據類型包裝類);
          ----------------------------------------------------------------------------------------------------
          Java集合類之Set集:

          它最像數學中的集合—無序的;不能有重復元素。它有兩個實現類:HashSet和TreeSet。
          HashSet類按照哈希酸法來存/取集合中的對象,存:根據對象的哈希碼類計算對象應該存放的位置。注意,HashSet集合里的元素如果覆蓋了Object類中的equals()方法,那么也應該覆蓋Object類中的HashCode()方法,否則兩個對象相等(用equals()方法判斷),卻有不同的哈希碼,從而把兩個對象存儲到集合的不同地方,是HashSet不能正常工作。換過來說,HashSet里添加的對象不能重復,依據是兩個對象的hashCode不同 。
          TreeSet類實現了SortedSet接口,能對集合中的對象排序。
          1.自然排序
          TreeSet調用ComparaTo()方法比較對象的大小,進行排序。
          向TreeSet里加入的對象必須滿足兩個前提:一,同類型,否則無法排序;二,實現了Comparable接口,否則無法調用ComparaTo()方法。有一條不滿足將會拋出ClassCastException。
          Set<Role> roleSet = new HashSet<Role>();
          for(int i = 0;i < roles.length;i++){
           Role role = new Role();
           role = (Role)session.get(Role.class,roles[i]);
           roleSet.add(role);//如果是TreeSet添加第二個對象時會出錯
          }
          開始我用的是TreeSet,用短點調試,每循環到第二次就會報錯-類型轉換異常,無意間換成了HashSet對了,但是不知道原因,查了些網站都是泛泛介紹下兩者的區別,一個有序,一個無序,但都沒深入的去介紹,知道今天看了孫衛琴‘孫衛琴精通Hibernate才豁然開朗。原因就是我的Role類沒有實現Comparable接口,不能進行對象的比較,無從排序。
          學習一個新知識,死記可以記住一周,看懂可以記得一月,而寫出來一年忘不了,及時進行總結,堅持寫blog是一個很好的習慣,深刻領悟到。
          2.客戶化排序
          用戶可以先創建一個實現了java.util.Comparator接口的類xxxComparator()來指定具體的排序方式,如下構造TreeSet實例:Set set = new TreeSet(new xxxComparator());可以實現按xxxComparator()中定義的排序方式排序。
          用Hibernate來做持久化框架時最好每個PO都重寫equals()和hashCode()方法,并且應該按照業務主鍵來比較/計算。為什么不按照主鍵來比較計算,請參考孫衛琴精通Hibernate第15.1節的介紹。

          Java集合類之List:
          list最大的特點對象以線性方式存儲,可以插人重復元素;他的實現類有ArrayList和LinkedList,ArrayList以大小可變的數組形式存儲對象,LinkedList以鏈表數據結構來存儲對象;還一個類似ArrayList的Vector,唯一的區別是Vector采用了同步機制?
          --------------------------------------------------------------------------------------------------
          AJAX不是一種新技術,而是一種新模式,是幾中技術的組合。它是異步JS+XML的組合。
          AJAX速度為什么會快?因為整個頁面不刷新,刷新的只是提交的表單范圍,其他范圍的數據不用重新去請求服務器。
          AJAX采用異步機制,當用戶發送http請求后,瀏覽器不會被掛起,等著服務器響應,而是繼續對用戶與頁面進行響應,并在服務器響應達到時進行處理。在服務器端,把對客戶端的響應序列化成XML,并把XML寫入HttpServletResponse。回到客戶端時,調用注冊在xmlHttpRequest上的回調函數,處理服務器返回的XML,最后,根據服務器返回的數據,用javaScript操縱頁面的HTML DOM,把用戶截面刷新。

          DWR簡單說就是一個引擎,他把服務器端JAVA對象中的方法公開給javascript,就好象在本地調用方法一樣快捷。有了DWR,系統中不必再出現AJAX請求-響應循環代碼,這意味著客戶端再也不需要處理XMLHttpRequest對象,不必處理服務器端的響應,不用編寫對象序列化代碼,不用自己編碼生成XML文件。
          ---------------------------------------------------------------------------------------------------
          jtds連接sqlserver時出現java.sql.SQLException: "Network error IOException: Connection refused: connect"異常,折騰了半天突然想起一個叫SPX的東西,找了個sp4裝上,再試,好了。哎,已經是第二次栽在這里了,也聽說過SP3 、SP4的重要性,但因為我第一次接觸數據庫、第一份工作沒有用到SP*之類的東西,經常忽視掉它,到現在依然不明白為什么我以前不裝SP*也能正常運行。
          又花了我倆小時時間。

          利用struts開發項目,報錯java.lang.IllegalArgumentException: Resources cannot be null.
          原因之一是因為找不到formBean里定義的form類,其一是路徑錯,其二是你的form類沒有繼承Struts的ActionForm,我屬于第二種情況,忘記寫上extends ActionForm。
          又花我倆小時。

          在eclipse里書寫代碼更容易發現錯誤,但它的速度實在慢,所以可以折中,對于一些重要的文件,比如xml,先在editPlus里編寫好,再從eclipse里打開,看看是否有錯誤。
          資源文件:不必要做國際化時是沒用的。
          盡量在高層捕獲異常,但這樣的話每個地方都要捕獲異常,如果在低層捕獲異常,那么調用它的每個地方都不用捕獲,使代碼簡潔易讀。到底哪種好呢?
          ---------------------------------------------------------------------------------------------------
          web.xml里的hibernateFilter段:

           <filter>
            <filter-name>hibernateFilter</filter-name>
            <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
            <init-param>
             <param-name>sessionFactoryBeanName</param-name>
             <param-value>sessionFactory</param-value>
            </init-param>
           </filter>
           <filter-mapping>
            <filter-name>hibernateFilter</filter-name>
            <url-pattern>*.do</url-pattern>
           </filter-mapping>
           <filter-mapping>
            <filter-name>hibernateFilter</filter-name>
            <servlet-name>dwr-invoker</servlet-name>
           </filter-mapping>
          作用:當用hibernate查詢時,查詢完畢后session關閉,此時在結果集里是沒有子表里的信息的,當取其結果集中子表信息時session再次被打開,查詢子表信息,此功能就由這一段來實現。

          加了這一段有時會出現以下異常:
           Write operations are not allowed in read-only mode (FlushMode.NEVER) - turn your Session into FlushMode.AUTO or remove 'readOnly' marker from transaction definition

          錯誤解決辦法:

           <init-param>
             <param-name>singleSession</param-name>
             <param-value>false</param-value>
            </init-param>
          不解是什么原理。
          只知道這樣可能會出現數據庫連接數過多異常。
          --------------------------------------------------------------------------------------------
          提問:
          1.Object類中hashCode()方法如何定義的呢,哈希碼如果計算的?
          --------------------------------------------------------------------------------------------------

          java中有自帶的正則表達式引擎,位于java.util.regex包。里面包括兩個類Pattern、Matcher。
          1.書寫用于匹配的表達式;
           String regEx="a|f";
          2.將正則表達式編譯為Pattern的實例,得到一個匹配模式。
           Pattern p=Pattern.compile(regEx);
          3.調用匹配模式的matcher(str)方法得到一個匹配器
           Matcher m=p.matcher(str);
          matcher只是得到了一個包含“正則表達式”和“字符串信息”匹配器的實例,并沒有進行任何的匹配、查找動作。而對字符串的匹配及其他操作都在此匹配器 m 上進行。
          使用舉例:
           boolean result=m.find();
          查找是否有匹配項;
           String newStr = m.replaceAll("p");
          將匹配子串都替換為"p";注意原來字符串的內容并沒有改變,因為字符串本身是不可邊量,所以字符串內容不會改變。
          ---------------------------------------------------------------------------------------------
          java中的流分為兩中:字節流、字符流。分別由四個抽象類來表示InputStream、outputStream、Reader和Writer,其他種類的流都是由他們派生出來的。
          其他類如:BufferedReader是Reader的一個子類,它具有緩沖的功能,避免頻繁得從物理設備中讀取信息;
          若目的地是文件需要用FileWriter來包裝,若要在寫過程緩沖需要用BufferedWriter包裝,若要格式化輸出需要再用PrintWriter包裝。
          最基本的方法有read和write,其他用得最多的是readLine()方法。

          posted on 2007-06-21 12:33 楊愛友 閱讀(518) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          美麗涵涵童裝店
          親,說我博客名字,給你們打折!
          主站蜘蛛池模板: 平舆县| 将乐县| 延津县| 平昌县| 乳山市| 罗田县| 高淳县| 旬邑县| 桐乡市| 儋州市| 小金县| 河东区| 康乐县| 苗栗市| 封丘县| 云南省| 台湾省| 云霄县| 五大连池市| 德保县| 潢川县| 和平县| 英德市| 嘉定区| 弋阳县| 闻喜县| 海原县| 白玉县| 利辛县| 玛多县| 沙雅县| 南京市| 织金县| 衡南县| 张家港市| 宣威市| 固原市| 宣化县| 贵溪市| 潢川县| 广丰县|