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

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

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

    posts - 6,  comments - 8,  trackbacks - 0
      2010年4月7日
    MVC模式,學了快半年了,終于領悟到它的內涵了。
    M-model  模型,V-view  視圖,C-controler控制器
       用戶訪問到的是視圖層,也就是頁面,jsp;把請求給servlet也就是控制層,控制層調用業務層來做出相應的處理,將信息返回給視圖層顯示出來。那么業務層怎么做呢,首先需要一個DAO也就是對數據庫進行操作,然后需要相應的Bean。這樣思路就清晰了多了,數據層DAO封裝對數據庫的操作,業務層做處理來訪問數據層,servlet層用來響應視圖層請求。
    在數據層和業務層中,每個類都配一個接口,這樣的話,有便于以后程序的擴展。
       最近在做一個web項目,老師只把我們領進了門,自己修行可真難啊
    posted @ 2010-04-25 17:23 張貝貝 閱讀(1556) | 評論 (3)編輯 收藏

    例如 String a=new String("a");
    String b="a";
    boolean c=(a==b);

    為什么c是false?

    String 類不是采用共享設計模式嗎。同樣的字符串應該引用的是同樣的地址。可為什么是false呢?

    如果是
     String a="a";
    String b="a";
    boolean c=(a==b);
    這個時候b就是true了

    java.lang.String類對大家來說最熟悉不過了,我們寫java程序很少能不用String的。本文講述如何正確的使用String,內容主要涉及初始化、串聯和比較等操作。

        首先我們必須清楚的一點是String類是final類型的,因此你不可以繼承這個類、不能修改這個類。我們使用String的時候非常簡單,通常都是 String s = "hello",但是Java API中同時提供了一個構造函數為String(String s),因此你也可以這樣使用String s = new String("hello"),對于后面這樣初始化一個String的方式是不推薦的,因為new操作符意味著將會在heap上生成一個新的對象,如果這樣的操作發生在一個循環中,那么代價是慘重的。比如
    for(int i = 0;i<1000;i++)
    {
        String s = new String("hello");
    }
        這將會創建1000個String類型的對象,由于String類是final的,因此這樣的操作事實上是每次都生成了一個新的String對象的。如果你使用String s = "hello";那么就可以實現復用了,為什么可以復用呢,下面會有解釋。

        當我們使用"+"實現串聯操作的時候,比如String s = "hello"+"world";其實是通過StringBuffer類的append()方法實現的,最后返回String給s。如果有興趣的話,你可以寫一個簡單的例子,然后用javap看看虛擬機是如何工作的。在使用串聯的時候我們同樣應該注意String是final類,如果你需要多次串聯比如:
    String sql = "xxx";
    sql = "xxxx";
    sql = "ssssss";
    那么為了提高效率節省空間,我們應該自己用StringBuffer來替代"+";

        通常對String的比較有兩種情況,一個是使用==,另一個是使用equals()方法,注意==是對對象的地址進行比較的,而String中的 equals()方法是覆蓋了Object類的方法,并且實現為對String對象的內容的比較。所以String s1 = new String("hello");String s2 = new String("hello"),我們對s1和s2進行上述比較的時候,前者應該返回false,因為使用new生成的是兩個不同的對象。后者應該返回 true因為他們的內容是一樣的,都是"hello"。那么如果我們還有一個String s3 = "hello";他和s1的比較應該是什么樣子的呢,答案是s1==s3為false,equals的比較位true。事實上String類是維持著一個 String池的,這個池初始化為空的,當我們String x = "hello"的時候,hello就會被放入這個池中,當我們再次String y = "hello"的時候,他首先去檢查池中是否存在一個和hello內容一樣的對象,如果存在的話就會把這個引用返回給y,如果不存在的話,就會創建一個并放入到池中。這樣就實現了復用。在String有一個方法intern()他可以把String的對象放入到池沖并返回池中的對象。如果我們對 s1(String s1 = new String("hello"))調用intern,s1 = s1.intern()這時候,我們再把s1和s3進行“==”的判斷,你會發現結果返回true!
        看下面的例子

    public class StringTest
    {

        public static void main(String[] args)
        {
            String s1 = "hello";
            String s2 = new String("hello");
            String s3 = new String("hello");
          
            testString(s1,s2,s3);
            s2 = s2.intern();
            System.out.println("after s2.intern");
            testString(s1,s2,s3);  

         }
           private static void testString(String s1,String s2,String s3)
        {
            System.out.println("s1 = s2 is "+(s1==s2));
            System.out.println("s2 = s3 is "+(s2==s3));
            System.out.println("s1.equals(s2) is "+s1.equals(s2));
            System.out.println("s2.equals(s3) is "+s2.equals(s3));
        }
    }
    輸出結果為
    s1 = s2 is false
    s2 = s3 is false
    s1.equals(s2) is true
    s2.equals(s3) is true
    after s2.intern
    s1 = s2 is true
    s2 = s3 is false
    s1.equals(s2) is true
    s2.equals(s3) is true

    posted @ 2010-04-07 22:34 張貝貝 閱讀(1023) | 評論 (1)編輯 收藏
    主站蜘蛛池模板: 国产精品久久久久影院免费| 丁香花在线观看免费观看| 一区国严二区亚洲三区| 亚洲av日韩av永久在线观看| 免费高清小黄站在线观看 | 亚洲另类激情综合偷自拍| 男人天堂免费视频| 亚洲AV无码成人专区片在线观看 | 国产精品免费无遮挡无码永久视频| 国内精品久久久久久久亚洲| 最新中文字幕免费视频| 久久久久se色偷偷亚洲精品av| 亚洲中文无码永久免费| 国产精品亚洲一区二区三区在线观看| 国产在线a不卡免费视频| 一区二区免费国产在线观看| 久久亚洲国产欧洲精品一| 一级毛片在线免费观看| 亚洲精品456人成在线| 国产精品无码免费视频二三区| 九九全国免费视频| 久久国产亚洲观看| 久久午夜免费视频| 青青免费在线视频| 亚洲AV无码一区二区乱子伦| 国产一卡2卡3卡4卡无卡免费视频 国产一卡二卡3卡四卡免费 | 亚洲精品理论电影在线观看| 亚洲AV无码一区二区三区在线观看| 9久热精品免费观看视频| 精品亚洲麻豆1区2区3区| 日本高清免费aaaaa大片视频| 国产精品hd免费观看| 亚洲日本在线免费观看| 日韩一级视频免费观看| 最新亚洲成av人免费看| 久久精品国产亚洲av麻豆图片| 亚洲AV无码一区二三区| 最近免费中文字幕大全免费版视频| 亚洲AV无码国产一区二区三区| 亚洲成AV人在线观看天堂无码| 午夜两性色视频免费网站|