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

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

          為什么c是false?

          String 類不是采用共享設(shè)計(jì)模式嗎。同樣的字符串應(yīng)該引用的是同樣的地址。可為什么是false呢?

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

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

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

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

              通常對(duì)String的比較有兩種情況,一個(gè)是使用==,另一個(gè)是使用equals()方法,注意==是對(duì)對(duì)象的地址進(jìn)行比較的,而String中的 equals()方法是覆蓋了Object類的方法,并且實(shí)現(xiàn)為對(duì)String對(duì)象的內(nèi)容的比較。所以String s1 = new String("hello");String s2 = new String("hello"),我們對(duì)s1和s2進(jìn)行上述比較的時(shí)候,前者應(yīng)該返回false,因?yàn)槭褂胣ew生成的是兩個(gè)不同的對(duì)象。后者應(yīng)該返回 true因?yàn)樗麄兊膬?nèi)容是一樣的,都是"hello"。那么如果我們還有一個(gè)String s3 = "hello";他和s1的比較應(yīng)該是什么樣子的呢,答案是s1==s3為false,equals的比較位true。事實(shí)上String類是維持著一個(gè) String池的,這個(gè)池初始化為空的,當(dāng)我們String x = "hello"的時(shí)候,hello就會(huì)被放入這個(gè)池中,當(dāng)我們?cè)俅蜸tring y = "hello"的時(shí)候,他首先去檢查池中是否存在一個(gè)和hello內(nèi)容一樣的對(duì)象,如果存在的話就會(huì)把這個(gè)引用返回給y,如果不存在的話,就會(huì)創(chuàng)建一個(gè)并放入到池中。這樣就實(shí)現(xiàn)了復(fù)用。在String有一個(gè)方法intern()他可以把String的對(duì)象放入到池沖并返回池中的對(duì)象。如果我們對(duì) s1(String s1 = new String("hello"))調(diào)用intern,s1 = s1.intern()這時(shí)候,我們?cè)侔裺1和s3進(jìn)行“==”的判斷,你會(huì)發(fā)現(xiàn)結(jié)果返回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));
              }
          }
          輸出結(jié)果為
          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 張貝貝 閱讀(1030) | 評(píng)論 (1)編輯 收藏

          環(huán)境變量配置
          JAVA_HOME=C:\soft\jdk1.6.0
          classpath=;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar;
          path=%JAVA_HOME%\bin;

          java 特點(diǎn)
          1.面向?qū)ο螅?可移植性,跨平臺(tái);3.支持分布式的網(wǎng)絡(luò)應(yīng)用,多線程;4.安全性和健壯性;
           一處編譯,處處運(yùn)行;

          名詞解析 JDK  java development kit
                   JavaEE-- java Enterprise Edition 企業(yè)版
                   JavaSE-- java Stand Edition 標(biāo)準(zhǔn)版 
                   JavaME-- java Micro Edition 微型版
              OCP--open(對(duì)擴(kuò)展開發(fā)),close(對(duì)修改關(guān)閉)
                SUN公司官方網(wǎng)站http://java.sun.com
               
                JDK的安裝及目錄結(jié)構(gòu) 
                -bin目錄:存放可執(zhí)行文件
                -lib目錄:存放JAVA的類庫文件;
                -include目錄:存放用于本地方法的文件;
                -demo目錄:存放演示程序;
                -jre目錄:存放Java運(yùn)行環(huán)境文件;

          2.    "System.out.println();"

          System為一個(gè)類(class),類字段和類方法前必須有static 修飾,并且該類不能被實(shí)例化,即不能被創(chuàng)建新對(duì)象;

          out為字段    靜態(tài)方法里不能用非靜態(tài)變量-----解決方案:將變量改為靜態(tài)變量或者聲明一個(gè)新對(duì)象再次調(diào)用變量

          3.  Eclipse 簡(jiǎn)單應(yīng)用
             建工作空間 → 建一個(gè)包 → 建類

          4.核心能力培養(yǎng)
              ①自學(xué)能力   主動(dòng)性、自我控制(EQ)
              ②獨(dú)立能力   事情==》獨(dú)立思考分析--》出現(xiàn)問題,解決問題,查資料--》
              ③團(tuán)隊(duì)合作能力 技術(shù)密集,溝通==》敢于,有效溝通
              ④英文閱讀能力  官方文檔(API 開發(fā)文檔,規(guī)范)
              ⑤高質(zhì)量編程能力   邏輯性  健壯性 可讀性 設(shè)計(jì)原則(輸入兩個(gè)數(shù)字A和B,“+”)  性能
          5.學(xué)習(xí)方法
           ①筆記
           ②記憶:大學(xué)的理解+中學(xué)的記憶
           ③學(xué)習(xí)時(shí)間:8點(diǎn)到十一點(diǎn)
           ④英文記憶
          6.語言的演變 
           ①需求的變化
           ②編程藝術(shù)
          7.設(shè)計(jì)新語言
          ①易用性
          ②安全性
          ③效率性高
          ④穩(wěn)定性
          ⑤可擴(kuò)展性
          8.數(shù)據(jù)運(yùn)算
             被除數(shù)除以除數(shù)   6/5=1;(取整)  5%6=5;(取余)
             a+=b;相當(dāng)于a=a+b;  依次類推,乘法,除法,減法

          閑著沒事干,把以前的東西寫寫

          posted @ 2010-03-20 16:17 張貝貝 閱讀(182) | 評(píng)論 (0)編輯 收藏

               對(duì)象流(對(duì)象序列化與反序列化)
                 ObjectOutputStream和ObjectInputStream  序列化:把對(duì)象寫到一個(gè)輸入流中;反序列化:從一個(gè)輸入流中讀取一個(gè)對(duì)象。Serializable序列化接口沒有方法或字段,僅用于標(biāo)識(shí)可序列化的語義。
               序列化步驟:
          1.創(chuàng)建一個(gè)對(duì)象輸出流,,該輸出流可以包裝其他類型輸出流
          2.通過這個(gè)類的writeObject()來寫對(duì)象

              反序列化:
          1.創(chuàng)建一個(gè)對(duì)象輸入流,它可以包裝其它類型的輸入流
          2.通過該對(duì)象輸入流的readObject()方法來讀取對(duì)象
               要序列化的對(duì)象要實(shí)現(xiàn)Serializable這個(gè)接口       要注意讀取的順序
               每個(gè)對(duì)象的hashcode是唯一的,也就是說內(nèi)存地址是唯一,直到被銷毀。
          在String“= =”比較的是地址,equals()比較的是內(nèi)容,在Object中,“==”比較的是地址,equals()比較的是地址(如果不重寫此方法),重寫后可比較內(nèi)容

            下面是部分可用代碼:
           1//存儲(chǔ)數(shù)據(jù),序列化對(duì)象數(shù)組
           2    public void ser(Object obj[]) throws Exception{
           3        OutputStream ops=new FileOutputStream("D:\\test\\objcetFile.txt");
           4        ObjectOutputStream out=new ObjectOutputStream(ops);
           5        
           6        out.writeObject(obj);
           7        out.close();
           8    }

           9    
          10    //讀取數(shù)據(jù),反序列化對(duì)象數(shù)組
          11    public Object[] dser() throws Exception{
          12        
          13
          14        InputStream ins=new FileInputStream("D:\\test\\objcetFile.txt");
          15        ObjectInputStream ois=new ObjectInputStream(ins);
          16        
          17        Object[] obj=(Object[])ois.readObject();
          18        ois.close();
          19            
          20        return obj;
          21
          22    }
          該代碼中存儲(chǔ)的是對(duì)象數(shù)組
          posted @ 2010-03-18 20:47 張貝貝 閱讀(1314) | 評(píng)論 (1)編輯 收藏
          主站蜘蛛池模板: 昭苏县| 新竹县| 博爱县| 阿拉尔市| 武邑县| 房产| 山东省| 靖宇县| 泽库县| 凤山市| 芜湖市| 无为县| 信阳市| 乌鲁木齐市| 湖北省| 丹东市| 泰安市| 仁化县| 綦江县| 武隆县| 城口县| 齐河县| 龙州县| 云浮市| 聊城市| 新闻| 垫江县| 克什克腾旗| 新民市| 宜君县| 潼关县| 延吉市| 绍兴市| 克什克腾旗| 岐山县| 科技| 茶陵县| 保山市| 宜兴市| 邹城市| 湘潭县|