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

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

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

    posts - 6,  comments - 7,  trackbacks - 0
      2008年3月4日
     1 package cn.com.gentek.imatrix.test;
     2 
     3 public class tesRef {
     4     private DataItem item1;
     5     private DataItem item2;
     6 
     7     public tesRef() {
     8         item1 = new DataItem();
     9         item2 = item1;
    10     }
    11 
    12     public void newItem1() {
    13         item1 = new DataItem();
    14     }
    15 
    16     public void print() {
    17         System.out.println("item1: " + item1.toString());
    18         System.out.println("item2: " + item2.toString());
    19     }
    20 
    21     public static void main(String[] args) {
    22         tesRef tr = new tesRef();
    23         tr.print();
    24         tr.newItem1();
    25         tr.print();
    26     }
    27 }
    28 


        以上一段很簡單的代碼,很容易看懂。它的運行結果如下:
    item1: cn.com.gentek.imatrix.test.DataItem@c17164
    item2: cn.com.gentek.imatrix.test.DataItem@c17164
    item1: cn.com.gentek.imatrix.test.DataItem@1fb8ee3
    item2: cn.com.gentek.imatrix.test.DataItem@c17164

        toString()的結果格式為類名@對象的16進制Hash表示。這里我們可以如此理解,是一個指向DataItem類實例化時,在內存中開辟的一塊空間的地址標識。
        在調用函數tr.newItem1()(24行)之前,item1和item2所指向的內存空間是相同的。所以在改變item1的同時item2的值勢必更這一起改變,同理改變item2的內容,item1的內容也會做出相同的改變。item1.toString()和item2.toString()的結果正可以說明這一點。這也說明了,item1和item2存儲的都是一個內存地址。
        當調用
    tr.newItem1(),重新實例化item1,之后item1指向的另一塊內存空間,而item2保持不變,指向最初那塊內存空間。此時,item1和和item2的內容將是毫不相關的。

    posted @ 2008-03-04 17:33 zhan 閱讀(1589) | 評論 (2)編輯 收藏
      2008年3月3日

    1.       HTML代碼

    最終實現的效果代碼,如下所示:

    <select>

    <option selected="selected" value="Monitor">Monitor</option>

    <option value="VCR">VCR</option>

    <option value="Standard Device">Standard Device</option>

    <option value="Smart Device">Smart Device</option>

    <option value="Trunk">Trunk</option>

    <option value="Standby VCR">Standby VCR</option>

    </select>

    2.       enum代碼

    publicenum DeviceType {

        @XmlEnumValue("Monitor")

        MONITOR("Monitor"),

        VCR("VCR"),

        @XmlEnumValue("Standard Device")

        STANDARD_DEVICE("Standard Device"),

        @XmlEnumValue("Smart Device")

        SMART_DEVICE("Smart Device"),

        @XmlEnumValue("Trunk")

        TRUNK("Trunk"),

        @XmlEnumValue("Standby VCR")

        STANDBY_VCR("Standby VCR");

        privatefinal String value;

        DeviceType(String v) {

            value = v;

        }

        public String value() {

            returnvalue;

        }

        publicstatic DeviceType fromValue(String v) {

            for (DeviceType c: DeviceType.values()) {

                if (c.value.equals(v)) {

                    return c;

                }

            }

            thrownew IllegalArgumentException(v);

        }

    }

    3.       JSF標簽:

    <h:selectOneMenu value="#{voutputType.DEVICETYPE}" converter="voutputDeviceTypeConverter">

    <f:selectItems value="#{voutput.deviceTypeList}"/>

    </h:selectOneMenu>

    主要有三個部分組成

    (a)     value="#{voutputType.DEVICETYPE}"

    javabean ,voutputType中的DEVICETYPE屬性,確定html代碼中<option selected="selected" value="Monitor">項的值

    voutputType配置信息在"WebRoot"WEB-INF"faces-config.xml

    <managed-bean>

           <managed-bean-name>voutputType</managed-bean-name>

           <managed-bean-class>

               cn.com.gentek.imatrix.xml.jaxb.voutput.ObjVOutputType

           </managed-bean-class>

           <managed-bean-scope>session</managed-bean-scope>

    </managed-bean>

        其中DEVICETYPE屬性對應的變量是枚舉DeviceType的一個實例。

    (b)    converter="voutputDeviceTypeConverter"

    類型轉換器,在在"WebRoot"WEB-INF"faces-config.xml配置如下:

    <converter>

        <converter-id>voutputDeviceTypeConverter</converter-id>

        <converter-class>

           cn.com.gentek.imatrix.ui.VoutDeviceTypeConverter

        </converter-class>

    </converter>

    cn.com.gentek.imatrix.ui.VoutDeviceTypeConverter代碼如下:

    (實現< select><option>String類型值,與DeviceType類型之間的轉換)

    publicclass VoutDeviceTypeConverter implements Converter {

        public Object getAsObject(FacesContext context, UIComponent component, String value) {

           DeviceType result = null;

           if (value == null || value.length() < 1) {

               result = null;

           } else

               result = DeviceType.fromValue(value);

           returnresult;

        }

        public String getAsString(FacesContext context, UIComponent component, Object value) {

           String result = null;

           if (value != null) {

               if (value instanceof DeviceType) {

                  DeviceType temp = (DeviceType) value;

                  result = temp.value();

               }

           }

           return result;

        }

    }

    (c)      <f:selectItems value="#{voutput.deviceTypeList}"/>(重點)

    由于deviceTypeList對應變量必須是SelectItemjavax.faces.model.SelectItem)列表,所以有必要將DeviceType類型實例的值和對應String類型值,封裝在一個SelectItem實例中。實現代碼如下:

    ArrayList<SelectItem> deviceTypeList = new ArrayList<SelectItem>();

    for (int i = 0; i < DeviceType.values().length; i++) {

        deviceTypeList.add(new SelectItem(DeviceType.values()[i],

               DeviceType.values()[i].value()));

    }

    posted @ 2008-03-03 16:15 zhan 閱讀(2125) | 評論 (3)編輯 收藏
      2008年2月29日

    使用JSF編寫web程序的時候,JavaBean無法直接通過相對路徑來訪問文件。經過一天的研究主要發現兩類解決方案,一是,通過FacesContext,二是,通過ClassLoader

    下面通過實例來說明。

    首先是介紹web程序目錄的大致結構:

    D:"......"Tomcat 6.0"webapps"imatrixb ------> 程序的更目錄

             --META-INF

             --WEB-INF

             ---------------classess

             ---------------------------cn

             ----------------------------------com

             --------------------------------------------……                        ----------->class 文件

             ---------------------------XmlData

             ---------------------------------path-config.xml           1

                      --------------- path-config.xml                                           2

    …….

    Index.jsp

    一:FacesContext

    獲得(2)號path-config.xml文件信息,

    代碼如下:

    String partPath=”/ WEB-INF/ path-config.xml”;

    1. getRealPath():

    FacesContext context = FacesContext.getCurrentInstance();
    HttpServletRequest rst = (HttpServletRequest)context.getExternalContext().getRequest();
    String fullPath=rst.getRealPath(xmlfile); //
    獲得xml文件的系統路徑,xmlfile為相對路徑

             采用這個方法存在一些隱患:比方說對一個打包的應用來說,是沒有RealPath的概念的,調用getRealPath只會簡單地返回null

             2. getResourceAsStream():

    FacesContext context = FacesContext.getCurrentInstance();

    InputStream xmlStream = context.getExternalContext()

                  .getResourceAsStream(xmlfile);

        用于只讀的形式。

        二:ClassLoader

    獲得(1)號path-config.xml文件信息,

    代碼如下:

    String partPath =”/XmlData/path-config.xml”;

    String fullPath=this.getClass().getClassLoader().getResource(partPath).getPath();

    //使用的時候還是存在一些問題,無法正常使用,暫時沒有發現解決的辦法

    InputStream xmlStream=this.getClass().getClassLoader().getResourceAsStream(partPath);

             //用于只讀的形式下,通過測試能夠正常的使用

    posted @ 2008-02-29 17:36 zhan 閱讀(2100) | 評論 (2)編輯 收藏
      2008年2月26日

    1.2 反射

    1.2.1 學習筆記

    參考資料:Java 2 核心技術I:基礎知識(第7版) 5.5 反射

    (1) Class

        在程序運行期間,Java運行時系統始終為所有對象的維護一個被稱為運行時的類型標識。這個信息保存著每一個對象所有屬性的類足跡。虛擬機利用運行信息選擇相應的方法執行。

    獲取Class類對象的三種方法

    (a)     getClass()

             Employee e;

             …

             Class cl=e.getClass();

             System.out.println(cl.getName()+“  ” +e.getName());

     Result:

             Employee Harry

    (b)    forName()

    String className= “java.util.Date ”;

    Class cl=Class.forName(className);

    (c)    .class

      Class cl1=Date.class;

     Class cl2=int.class;

    (2) 反射的分析能力

     示例:

    Employee.java:

    publicclass Employee {

        private String name;

        privateintage;

        public String getName() {

            returnname;

        }

        publicvoid setName(String name) {

            this.name = name;

        }

        publicint getSalary() {

            returnage;

        }

        publicvoid setSalary(int salary) {

            this.age = salary;

        }

        public Employee(String name, int salary) {

            this.name = name;

            this.age = salary;

        }

    }

    Test.java

    import java.lang.reflect.Field;

    publicclass test {

             publicstaticvoid main(String[] args) throws SecurityException,

                                NoSuchFieldException, IllegalArgumentException,

                                IllegalAccessException {

                       Employee zhanjh = new Employee("zhan jh", 1000);

                       Class<?> cl = zhanjh.getClass();

                       Field f = cl.getDeclaredField("name"); // 返回名稱為“name”的私有或公有成員(域)

                       f.setAccessible(true); // 非常重要,否則無法調用f.get(zhanjh)方法

                       Object v = f.get(zhanjh);// 返回zhanjh對象中 name成員(域)的值

                       System.out.println(v.toString());

             }

    }

    /*

     * 運行結果: zhan jh

     */

    posted @ 2008-02-26 17:09 zhan 閱讀(156) | 評論 (0)編輯 收藏
      2008年2月25日
         摘要: 從去年12月份還是學習Java到現在已經將近3個月了,現在已經很有必要對以前所學的知識進行一次系統的復習。而重新復習最好的辦法就是將最近剛完成,但不完善的Xml數據配置的Web程序,進行一次重構。 其中需要重新復習的知識主要內容如下: 1.             ...  閱讀全文
    posted @ 2008-02-25 17:09 zhan 閱讀(1105) | 評論 (0)編輯 收藏
      2007年12月26日
    interfaces

    上午完成thinking Java中關于Interfaces章節的內容。下面是該章節中關于"Interfaces and factories"的例子
    package com.zhanjh.thinkingjava.interfaces;

    interface Service{
        void method1();
        void method2();
    }

    interface ServiceFactory{
        Service getService();
    }

    class Implementation1 implements Service{
        public Implementation1() {
            // TODO Auto-generated constructor stub
        }
       
        public void method1(){
            System.out.println("Implementation1 method1");
        }
        public void method2(){
            System.out.println("Implementation1 method2");
        }
    }

    class Implementation1Factory implements ServiceFactory{
        public Service getService(){
            return new Implementation1();
        }
    }

    class Implementation2 implements Service{
        public Implementation2() {
            // TODO Auto-generated constructor stub
        }
       
        public void method1(){
            System.out.println("Implementation2 method1");
        }
        public void method2(){
            System.out.println("Implementation2 method2");
        }
    }

    class Implementation2Factory implements ServiceFactory{
        public Service getService(){
            return new Implementation2();
        }
    }

    public class Factories{
        public static void serviceConsumer(ServiceFactory fact){
            Service s=fact.getService();
            s.method1();
            s.method2();
        }
        public static void main(String[] args){
            serviceConsumer(new Implementation1Factory());
            serviceConsumer(new Implementation2Factory());
        }
    }
    總結:abstract class和interface是Java語言中對于抽象類定義進行支持的兩種機制,abstract class和interface之間在對于抽象類定義的支持方面具有很大的相似性。目前我對他們區分的方法大致如下:
    1)interface可以多重實現,而abstract class只能單一繼承
    2)abstract class不一定只有抽象的方法(abstract method),它也可以包含具體的方法(concrete method)。而interface不能包含方法的實現(implementation)。所以在程序設計的時候,能用inteface的時候盡量不要用abstract class。

    下午
         查找關于EJB的資料,沒頭緒。
         jaxb入門學習。
         xjc(將xsd文件轉換為Java的小工具)工具的使用。可以創建一個bat文件處理下面的命令:
        xjc -d "D:"eclipse"workspace"JaxbTest"src" -p "edu.jlu.xml" "D:"eclipse"workspace"JaxbTest"schema"messages.xsd"
    其中D:"eclipse"workspace"JaxbTest"src為原文件的目錄,edu.jlu.xml為生成Java類的包名,D:" eclipse"workspace"JaxbTest"schema"messages.xsd為xml schema文件的路徑。

    posted @ 2007-12-26 19:07 zhan 閱讀(220) | 評論 (0)編輯 收藏
    僅列出標題  
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(1)

    隨筆檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 精品97国产免费人成视频 | 亚洲大尺度无码无码专区| 东方aⅴ免费观看久久av | 国产乱妇高清无乱码免费| 亚洲爱情岛论坛永久| 日韩一区二区a片免费观看 | 色播亚洲视频在线观看| 天天天欲色欲色WWW免费| 一级毛片a免费播放王色| 久久亚洲AV无码精品色午夜麻豆| 四虎免费在线观看| 在线观看免费无码专区| 亚洲一区二区三区在线观看网站| 国产亚洲精品无码拍拍拍色欲 | 三上悠亚亚洲一区高清| 无人在线直播免费观看| 一个人晚上在线观看的免费视频| 亚洲日产2021三区在线 | 亚洲五月丁香综合视频| 亚洲熟妇无码AV在线播放| 国内免费高清在线观看| 3344在线看片免费| 国产成人亚洲毛片| 亚洲国产精品成人综合色在线婷婷 | 亚洲尹人九九大色香蕉网站| 在线视频免费国产成人| 91福利免费视频| 日本中文字幕免费看| 丁香婷婷亚洲六月综合色| 日韩亚洲人成在线综合日本| 四虎永久免费地址在线网站| 91精品国产免费网站| 国产精品美女久久久免费| 亚洲国产成人精品无码区花野真一 | 最近中文字幕免费mv视频7| 国产精品免费高清在线观看| 日本一区二区三区在线视频观看免费 | 亚洲精品视频在线观看免费| aaa毛片免费观看| 黄色免费在线观看网址| 亚洲人成色4444在线观看|