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

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

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

    Java Home

    Java技術(shù)修煉中...
    posts - 20, comments - 22, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    2006年7月9日

    FreeMarker是一個(gè)模板引擎,一個(gè)基于模板生成文本輸出的通用工具,使用純Java編寫

    FreeMarker被設(shè)計(jì)用來生成HTML Web頁面,特別是基于MVC模式的應(yīng)用程序

    雖然FreeMarker具有一些編程的能力,但通常由Java程序準(zhǔn)備要顯示的數(shù)據(jù),由FreeMarker生成頁面,通過模板顯示準(zhǔn)備的數(shù)據(jù)

    FreeMarker不是一個(gè)Web應(yīng)用框架,而適合作為Web應(yīng)用框架一個(gè)組件

    FreeMarker與容器無關(guān),因?yàn)樗⒉恢繦TTP或Servlet;FreeMarker同樣可以應(yīng)用于非Web應(yīng)用程序環(huán)境

    FreeMarker更適合作為Model2框架(如Struts)的視圖組件,你也可以在模板中使用JSP標(biāo)記庫

    FreeMarker是免費(fèi)的

    1、通用目標(biāo)

    能夠生成各種文本:HTML、XML、RTF、Java源代碼等等

    易于嵌入到你的產(chǎn)品中:輕量級(jí);不需要Servlet環(huán)境

    插件式模板載入器:可以從任何源載入模板,如本地文件、數(shù)據(jù)庫等等

    你可以按你所需生成文本:保存到本地文件;作為Email發(fā)送;從Web應(yīng)用程序發(fā)送它返回給Web瀏覽器

    2、強(qiáng)大的模板語言

    所有常用的指令:include、if/elseif/else、循環(huán)結(jié)構(gòu)

    在模板中創(chuàng)建和改變變量

    幾乎在任何地方都可以使用復(fù)雜表達(dá)式來指定值

    命名的宏,可以具有位置參數(shù)和嵌套內(nèi)容

    名字空間有助于建立和維護(hù)可重用的宏庫,或者將一個(gè)大工程分成模塊,而不必?fù)?dān)心名字沖突

    輸出轉(zhuǎn)換塊:在嵌套模板片段生成輸出時(shí),轉(zhuǎn)換HTML轉(zhuǎn)義、壓縮、語法高亮等等;你可以定義自己的轉(zhuǎn)換

    3、通用數(shù)據(jù)模型

    FreeMarker不是直接反射到Java對(duì)象,Java對(duì)象通過插件式對(duì)象封裝,以變量方式在模板中顯示

    你可以使用抽象(接口)方式表示對(duì)象(JavaBean、XML文檔、SQL查詢結(jié)果集等等),告訴模板開發(fā)者使用方法,使其不受技術(shù)細(xì)節(jié)的打擾

    4、為Web準(zhǔn)備

    在模板語言中內(nèi)建處理典型Web相關(guān)任務(wù)(如HTML轉(zhuǎn)義)的結(jié)構(gòu)

    能夠集成到Model2 Web應(yīng)用框架中作為JSP的替代

    支持JSP標(biāo)記庫

    為MVC模式設(shè)計(jì):分離可視化設(shè)計(jì)和應(yīng)用程序邏輯;分離頁面設(shè)計(jì)員和程序員

    5、智能的國(guó)際化和本地化

    字符集智能化(內(nèi)部使用UNICODE)

    數(shù)字格式本地化敏感

    日期和時(shí)間格式本地化敏感

    非US字符集可以用作標(biāo)識(shí)(如變量名)

    多種不同語言的相同模板

    6、強(qiáng)大的XML處理能力

    <#recurse> 和<#visit>指令(2.3版本)用于遞歸遍歷XML樹

    在模板中清楚和直覺的訪問XML對(duì)象模型

    posted @ 2007-06-19 08:26 Yemoo'S Java Blog 閱讀(497) | 評(píng)論 (0)編輯 收藏

    當(dāng)jsp程序出現(xiàn)異常時(shí),往往是直接輸出到瀏覽器頁面上的,這樣以來,可能使最終用戶感到不知所措,也可能因?yàn)楸┞斗?wù)器某些信息而導(dǎo)致服務(wù)器的安全性問題。在jsp里我們可以通過制定errorPage="xxx"以使當(dāng)程序出現(xiàn)錯(cuò)誤時(shí)轉(zhuǎn)向指定的錯(cuò)誤頁面,但如果前期沒有考慮到這個(gè)辦法而在系統(tǒng)完成后再去這些工作則工作量可能會(huì)很大,好在jsp規(guī)范提供了一種簡(jiǎn)單的解決辦法,通過在web.xml中設(shè)定全局錯(cuò)誤處理頁面來對(duì)整個(gè)項(xiàng)目有效,web.xml中對(duì)于不同的http返回結(jié)果或異常類型可以有不同的處理方式。
    在xml中配置如下:
    <error-page>
    ???<error-code>500</error-code>
    ???<location>error.jsp</location>
    </error-page>
    <error-page>
    ???<error-code>404</error-code>
    ???<location>notfound.jsp</location>
    </error-page>

    通過以上配置,程序會(huì)自動(dòng)根據(jù)錯(cuò)誤類型轉(zhuǎn)向不同的錯(cuò)誤頁面。

    posted @ 2007-06-06 15:59 Yemoo'S Java Blog 閱讀(1759) | 評(píng)論 (0)編輯 收藏

    前段時(shí)間作了一個(gè)簡(jiǎn)單的系統(tǒng),其中涉及到后臺(tái)管理,當(dāng)然也就遇到了權(quán)限驗(yàn)證的問題,由于初次做J2EE項(xiàng)目,所有這些東西懂我來說都是個(gè)開始。
    對(duì)于權(quán)限驗(yàn)證,如果程序由目錄劃分,如管理員訪問的頁面都放在admin下,這樣我們可以寫一個(gè)權(quán)限驗(yàn)證的過濾器,然后配置admin目錄都要經(jīng)過這個(gè)過濾器即可。這樣對(duì)于jsp頁面的權(quán)限驗(yàn)證比較容易。但對(duì)于action(控制器類)就不好控制了,因?yàn)閍ction是沒有目錄概念的,如我們?cè)L問action的地址為:http://xxx/sample/ac1.action,同時(shí)如果使用http://xxx/sample/xx/xx/ac1.action同樣可以訪問,這是因?yàn)橹灰谶@個(gè)項(xiàng)目目錄下,訪問的頁面如果為action則struts就會(huì)去查詢這個(gè)action名字對(duì)應(yīng)的類,而不管前面的目錄結(jié)構(gòu)。因此我們不能再用過濾器對(duì)管理員部分的action進(jìn)行驗(yàn)證。經(jīng)過查看struts2的相關(guān)資料發(fā)現(xiàn)了攔截器這個(gè)有用的東西。通過struts2的配置文件的包管理功能和攔截器可以輕松的對(duì)指定的action做管理(攔截),如
    ===================================================
    <package name="user" extends="struts-default">
    ??<!-- 前臺(tái)用戶操作部分 -->
    ??<!-- 框架頁,顯示分類 -->
    ??<action name="queryCateForwardUI"
    ???class="com.topsoft.bookmanage.web.action.QueryCateForwardActionUI">
    ???<result>/mainPage.jsp</result>
    ??</action>
    ??? 。。。。。
    </package>
    <!-- 管理員操作部分 -->
    ?<package name="manager" extends="struts-default">
    ??<!-- 攔截器 -->
    ??<interceptors>
    ???<interceptor name="auth" class="com.topsoft.common.LogonInterceptor" />
    ???<interceptor-stack name="authStack">?
    ??????????????? <interceptor-ref name="auth"/>?
    ??????????????? <interceptor-ref name="paramsPrepareParamsStack"/>?
    ??????????? </interceptor-stack>?
    ??</interceptors>
    ??<!-- 默認(rèn)執(zhí)行的攔截器 -->
    ??<default-interceptor-ref name="authStack"/>
    ??<!-- 全局Action映射 -->
    ??<global-results>
    ???<result name="login" type="redirect">/managerLoginUI.action</result>
    ??</global-results>
    ??
    ??<!-- 后臺(tái)管理首頁面UI -->
    ??<action name="managerIndexUI"
    ???class="com.topsoft.bookmanage.web.action.ManagerIndexActionUI">
    ???<result>/admin/index.jsp</result>
    ??</action>
    ?。。。。。。
    </package>
    =================================================

    通過使用攔截器+過濾器可以完美解決權(quán)限驗(yàn)證的問題。

    posted @ 2007-06-06 15:17 Yemoo'S Java Blog 閱讀(4978) | 評(píng)論 (6)編輯 收藏

    struts.action.extension
    ????????? The URL extension to use to determine if the request is meant for a Struts action
    ?????????? 用URL擴(kuò)展名來確定是否這個(gè)請(qǐng)求是被用作Struts action,其實(shí)也就是設(shè)置 action的后綴,例如login.do的'do'字。

    struts.configuration
    ????????? The org.apache.struts2.config.Configuration implementation class
    ??????????? org.apache.struts2.config.Configuration接口名

    struts.configuration.files
    ????????? A list of configuration files automatically loaded by Struts
    ?????????? struts自動(dòng)加載的一個(gè)配置文件列表

    struts.configuration.xml.reload
    ????????? Whether to reload the XML configuration or not
    ?????????? 是否加載xml配置(true,false)

    struts.continuations.package
    ?????????? The package containing actions that use Rife continuations
    ?????????? 含有actions的完整連續(xù)的package名稱

    struts.custom.i18n.resources
    ????????? Location of additional localization properties files to load
    ?????????? 加載附加的國(guó)際化屬性文件(不包含.properties后綴)

    struts.custom.properties
    ????????? Location of additional configuration properties files to load
    ?????????? 加載附加的配置文件的位置


    struts.devMode
    ????????? Whether Struts is in development mode or not
    ?????????? 是否為struts開發(fā)模式

    struts.dispatcher.parametersWorkaround
    ????????? Whether to use a Servlet request parameter workaround necessary for some versions of WebLogic
    ??????????? (某些版本的weblogic專用)是否使用一個(gè)servlet請(qǐng)求參數(shù)工作區(qū)(PARAMETERSWORKAROUND)

    struts.enable.DynamicMethodInvocation
    ????????? Allows one to disable dynamic method invocation from the URL
    ??????????? 允許動(dòng)態(tài)方法調(diào)用

    struts.freemarker.manager.classname
    ????????? The org.apache.struts2.views.freemarker.FreemarkerManager implementation class
    ?????????? org.apache.struts2.views.freemarker.FreemarkerManager接口名

    struts.i18n.encoding
    ????????? The encoding to use for localization messages
    ?????????? 國(guó)際化信息內(nèi)碼

    struts.i18n.reload
    ????????? Whether the localization messages should automatically be reloaded
    ?????????? 是否國(guó)際化信息自動(dòng)加載

    struts.locale
    ????????? The default locale for the Struts application
    ?????????? 默認(rèn)的國(guó)際化地區(qū)信息

    struts.mapper.class
    ????????? The org.apache.struts2.dispatcher.mapper.ActionMapper implementation class
    ??????????? org.apache.struts2.dispatcher.mapper.ActionMapper接口

    struts.multipart.maxSize
    ????????? The maximize size of a multipart request (file upload)
    ?????????? multipart請(qǐng)求信息的最大尺寸(文件上傳用)

    struts.multipart.parser
    ????????? The org.apache.struts2.dispatcher.multipart.MultiPartRequest parser implementation for a multipart request (file upload)
    ????????? 專為multipart請(qǐng)求信息使用的org.apache.struts2.dispatcher.multipart.MultiPartRequest解析器接口(文件上傳用)


    struts.multipart.saveDir
    ????????? The directory to use for storing uploaded files
    ?????????? 設(shè)置存儲(chǔ)上傳文件的目錄夾

    struts.objectFactory
    ????????? The com.opensymphony.xwork2.ObjectFactory implementation class
    ?????????? com.opensymphony.xwork2.ObjectFactory接口(spring)

    struts.objectFactory.spring.autoWire
    ????????? Whether Spring should autoWire or not
    ?????????? 是否自動(dòng)綁定Spring

    struts.objectFactory.spring.useClassCache
    ????????? Whether Spring should use its class cache or not
    ?????????? 是否spring應(yīng)該使用自身的cache

    struts.objectTypeDeterminer
    ????????? The com.opensymphony.xwork2.util.ObjectTypeDeterminer implementation class
    ??????????? com.opensymphony.xwork2.util.ObjectTypeDeterminer接口

    struts.serve.static.browserCache
    ????????? If static content served by the Struts filter should set browser caching header properties or not
    ?????????? 是否struts過濾器中提供的靜態(tài)內(nèi)容應(yīng)該被瀏覽器緩存在頭部屬性中

    struts.serve.static
    ????????? Whether the Struts filter should serve static content or not
    ?????????? 是否struts過濾器應(yīng)該提供靜態(tài)內(nèi)容

    struts.tag.altSyntax
    ????????? Whether to use the alterative syntax for the tags or not
    ?????????? 是否可以用替代的語法替代tags

    struts.ui.templateDir
    ????????? The directory containing UI templates
    ?????????? UI templates的目錄夾

    struts.ui.theme
    ????????? The default UI template theme
    ?????????? 默認(rèn)的UI template主題

    struts.url.http.port
    ????????? The HTTP port used by Struts URLs
    ?????????? 設(shè)置http端口

    struts.url.https.port
    ????????? The HTTPS port used by Struts URLs
    ?????????? 設(shè)置https端口

    struts.url.includeParams
    ????????? The default includeParams method to generate Struts URLs
    ????????? 在url中產(chǎn)生 默認(rèn)的includeParams


    struts.velocity.configfile
    ????????? The Velocity configuration file path
    ?????????? velocity配置文件路徑

    struts.velocity.contexts
    ????????? List of Velocity context names
    ?????????? velocity的context列表


    struts.velocity.manager.classname
    ????????? org.apache.struts2.views.velocity.VelocityManager implementation class
    ?????????? org.apache.struts2.views.velocity.VelocityManager接口名

    struts.velocity.toolboxlocation
    ????????? The location of the Velocity toolbox
    ?????????? velocity工具盒的位置
    struts.xslt.nocache
    ????????? Whether or not XSLT templates should not be cached
    ?????????? 是否XSLT模版應(yīng)該被緩存

    posted @ 2007-05-20 19:05 Yemoo'S Java Blog 閱讀(543) | 評(píng)論 (0)編輯 收藏

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "

    <beans>

    ??建立一個(gè)數(shù)據(jù)源
    ?<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    ? <property name="driverClassName">
    ?? <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
    ? </property>
    ? <property name="url">
    ?? <value>jdbc:microsoft:sqlserver://192.168.0.6:1433</value>
    ? </property>
    ? <property name="username">
    ?? <value>sa</value>
    ? </property>
    ? <property name="password">
    ?? <value></value>
    ? </property>
    ?</bean>

    ? 建立會(huì)話工廠類,這個(gè)類使用spring專門為hibernate3提供LocalSessionFactoryBean
    ?
    ?<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    ? <property name="dataSource">
    ?? <ref local="dataSource" />? --引用上面的數(shù)據(jù)源
    ? </property>
    ? <property name="mappingResources">? --調(diào)入映射文檔
    ?? <list>
    ??? <value>com/yourcompany/User.hbm.xml</value>?
    ?? </list>
    ? </property>
    ? <property name="hibernateProperties">? --相關(guān)設(shè)置
    ?? <props>
    ??? <prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
    ??? <prop key="hibernate.show_sql">true</prop>
    ?? </props>
    ? </property>
    ?</bean>
    ??

    ??? 定義事務(wù)管理器,這個(gè)也是 spring專門為hibernate3提供的HibernateTransactionManager 事務(wù)管理器
    ?<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    ? <property name="sessionFactory">
    ?? <ref local="sessionFactory" />?? --引用會(huì)話工廠類
    ? </property>
    ?</bean>

    ?定義實(shí)體DAO
    ?<bean id="userDAO" class="com.yourcompany.UserDAOImp">
    ? <property name="sessionFactory">
    ?? <ref local="sessionFactory" />--引用會(huì)話工廠類
    ? </property>
    ?</bean>
    ?

    ?為上面的實(shí)體DAO定義一個(gè)代理(proxy)類,這是spring為解決事務(wù)問題而提供TransactionProxyFactoryBean動(dòng)態(tài)事務(wù)代理類
    ?<bean id="userDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    ? <property name="transactionManager">
    ?? <ref bean="transactionManager" />? --指定事務(wù)管理器(需要是spring專用的)
    ? </property>
    ? <property name="target"> --目標(biāo)實(shí)體DAO類
    ?? <ref local="userDAO" />
    ? </property>
    ? <property name="transactionAttributes"> --定義要使用事務(wù)的方法
    ?? <props>
    ??? <prop key="insert*">PROPAGATION_REQUIRED</prop>? --所有insert開頭的方法都使用事務(wù),出錯(cuò)要回滾
    ??? <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop> --所有g(shù)et開頭的方法都使用只讀事務(wù)
    ??? <prop key="is*">PROPAGATION_REQUIRED,readOnly</prop>--所有ist開頭的方法都使用只讀事務(wù)
    ?? </props>
    ? </property>
    ?</bean>

    ??為 path="/login"?的struts action 定義實(shí)際的action類,該action?已經(jīng)進(jìn)行?type="org.springframework.web.struts.DelegatingActionProxy"設(shè)置
    ? <bean name="/login" class="com.yourcompany.struts.action.LoginAction" singleton="false">
    ??? <property name="userDAO">
    ??? <ref bean="userDAOProxy" />? --注意,這里指定的userDAO是上面定義的代理類
    ? </property>
    ?</bean>
    </beans>?

    posted on 2006-12-05 15:40 kelven 閱讀(1

    posted @ 2007-05-15 08:21 Yemoo'S Java Blog 閱讀(417) | 評(píng)論 (0)編輯 收藏

    今天把jdk從1.6.0卸載后又安裝了1.5.04,然后發(fā)現(xiàn)netbeans無法啟動(dòng),提示“Cannot find java.exe...”,在網(wǎng)上看到很多人說要修改環(huán)境變量,但是偶的環(huán)境變量在安裝完jdk后就配置好了,沒有問題。
    于是又費(fèi)了老半天的力氣,終于解決了,辦法如下:
    1,啟動(dòng)jdk時(shí) --jdkhome參數(shù)指出jdk路徑
    2,修改netbean目錄下的/etc目錄下的netbeans.conf中的jdkhome的值為當(dāng)前jdk路徑

    使用上面方法中之一即可!

    posted @ 2007-03-11 16:54 Yemoo'S Java Blog 閱讀(4441) | 評(píng)論 (0)編輯 收藏

    /**
    ?*Description:greatest?common?divisor
    ?*Author:yemoo?2006.12.06
    ?
    */

    ?
    public ? class ?Pt32{
    ????
    // 思路:輾轉(zhuǎn)相除法
    ????? int ?divisor1( int ?m, int ?n){???? // 方法一:循環(huán)法
    ????????? int ?temp;
    ?????????
    if (m < n){???? // if?m<n,swap?m,n
    ?????????????temp = m;
    ?????????????m
    = n;
    ?????????????n
    = temp;
    ?????????}
    ?????????
    while (m % n != 0 ){
    ?????????????temp
    = n;
    ?????????????n
    = m % n;
    ?????????????m
    = temp;
    ?????????}
    ?????????
    return ?n;
    ?????}

    ?????
    int ?divisor2( int ?m, int ?n){???? // 方法二:遞歸法
    ????????? int ?temp;
    ?????????
    if (m < n){
    ?????????????temp
    = m;
    ?????????????m
    = n;
    ?????????????n
    = temp;
    ?????????}
    ?????????
    return ?divisor22(m,n);
    ?????}

    ????
    int ?divisor22( int ?m, int ?n){
    ????????
    if (m % n == 0 ){
    ????????????
    return ?n;
    ????????}
    else {
    ????????????
    return ?divisor22(n,m % n);
    ????????}
    ????}

    ?????
    public ? static ? void ?main(String?args[]){
    ?????????KeyboardInput?in
    = new ?KeyboardInput();
    ?????????Pt32?obj
    = new ?Pt32();
    ?????????System.out.println(
    " input?two?integer: " );
    ?????????
    int ?a = in.readInt();
    ?????????
    int ?b = in.readInt();
    ?????????System.out.println(a
    + " , " + b + " 's?greatest?common?divisor?is? " + obj.divisor2(a,b));
    ?????}

    ?}

    使用了輾轉(zhuǎn)相除法,分別使用循環(huán)和遞歸方法實(shí)現(xiàn)。

    吸取dreamstone大哥的程序?qū)懛?,發(fā)現(xiàn)判斷m、n大小的部分可以刪除,因?yàn)槿绻鹠<n求余部分會(huì)自動(dòng)交換兩個(gè)變量。

    改進(jìn)后程序代碼(精簡(jiǎn)了好多哦):
    /**
    ?*Description:greatest?common?divisor
    ?*Author:yemoo?2006.12.07?
    */

    ?
    public?class?Pt32{
    ????
    //思路:輾轉(zhuǎn)相除法
    ?????int?divisor1(int?m,int?n){????//方法一:循環(huán)法
    ?????????int?temp;
    ?????????
    while(m%n!=0){
    ?????????????temp
    =n;
    ?????????????n
    =m%n;
    ?????????????m
    =temp;
    ?????????}
    ?????????
    return?n;
    ?????}

    ?????
    int?divisor2(int?m,int?n){????//方法二:遞歸法
    ?????????if(m%n==0){
    ????????????
    return?n;
    ????????}
    else{
    ????????????
    return?divisor2(n,m%n);
    ????????}
    ?????}

    ?????
    public?static?void?main(String?args[]){
    ?????????KeyboardInput?in
    =new?KeyboardInput();
    ?????????Pt32?obj
    =new?Pt32();
    ?????????System.out.println(
    "input?two?integer:");
    ?????????
    int?a=in.readInt();
    ?????????
    int?b=in.readInt();
    ?????????System.out.println(a
    +","+b+"'s?greatest?common?divisor?is?"+obj.divisor2(a,b));
    ?????}

    ?}

    posted @ 2006-12-07 01:02 Yemoo'S Java Blog 閱讀(7759) | 評(píng)論 (4)編輯 收藏

    游戲產(chǎn)業(yè)的快速發(fā)展,帶動(dòng)了游戲人才需求的大幅攀升。昨日,北京一家游戲?qū)W院在武漢舉行首期培訓(xùn)班,專門培養(yǎng)游戲人才。

      據(jù)介紹,目前中國(guó)的網(wǎng)絡(luò)游戲玩家已經(jīng)達(dá)到2633萬人。中國(guó)出版工作者協(xié)會(huì)游戲工作委員會(huì)提供的數(shù)字表明,2004年,中國(guó)的網(wǎng)絡(luò)游戲僅銷售收入已經(jīng)上漲47.9%,達(dá)到24.7億元,并且該數(shù)字在2009年有望達(dá)到109.6億元。

      而據(jù)專家預(yù)測(cè),2006年中國(guó)網(wǎng)絡(luò)游戲市場(chǎng)將達(dá)93億元,中國(guó)手機(jī)游戲市場(chǎng)規(guī)模將達(dá)5億元。游戲行業(yè)的井噴式發(fā)展,引發(fā)了游戲?qū)I(yè)人才的極度匱乏。游戲研發(fā)人才匱乏,特別是中高級(jí)人才奇缺的情況,已成為嚴(yán)重制約產(chǎn)業(yè)持續(xù)發(fā)展的“瓶頸”。

      中華英才網(wǎng)近日公布的一項(xiàng)統(tǒng)計(jì)表明,從目前人才市場(chǎng)需求看,10類游戲人才最受企業(yè)歡迎,分別為:游戲美術(shù)設(shè)計(jì)師(2D/3D)、網(wǎng)游&#8226;客服、3D游戲設(shè)計(jì)高級(jí)講師、手機(jī)游戲設(shè)計(jì)高級(jí)講師、在線網(wǎng)絡(luò)游戲設(shè)計(jì)高級(jí)講師、手機(jī)游戲開發(fā)工程師、網(wǎng)絡(luò)游戲開發(fā)工程師、J2ME游戲軟件工程師、游戲策劃師、片區(qū)渠道經(jīng)理。

      職業(yè)指導(dǎo)師指出,游戲人才將會(huì)成為就業(yè)市場(chǎng)下一個(gè)新的亮點(diǎn)。

    posted @ 2006-12-05 20:44 Yemoo'S Java Blog 閱讀(401) | 評(píng)論 (0)編輯 收藏

    中國(guó)有很多精于編碼的人,但是中國(guó)軟件行業(yè),尤其是網(wǎng)絡(luò)應(yīng)用開發(fā)方面誤區(qū)很大,很難形成有規(guī)模的軟件開發(fā)力量和產(chǎn)品能力,不但比美國(guó)差距甚遠(yuǎn),和印度相比也是頗有不如。這些問題不是在于中國(guó)程序員的智商和工作努力狀況,也不是在于國(guó)家和民間對(duì)開發(fā)的投入程度,而是很大程度上,有一些對(duì)技術(shù),對(duì)程序開發(fā),對(duì)項(xiàng)目設(shè)計(jì)方面的思想誤區(qū),這些誤區(qū),導(dǎo)致了軟件行業(yè)的產(chǎn)品化能力不足,缺乏規(guī)?;痛笮蛷?fù)用系統(tǒng)研發(fā)能力,可以說,改變認(rèn)識(shí)誤區(qū),是解決軟件行業(yè)小作坊模式和個(gè)體英雄模式所帶來的局限性的重要工作。


    程序員是一種技術(shù)工作,在IT的發(fā)展中有相當(dāng)重要的地位,從底層硬件通訊協(xié)議的建立,到數(shù)據(jù)傳輸層的處理,到操作系統(tǒng)的建設(shè),到數(shù)據(jù)庫平臺(tái)的建設(shè),一直到應(yīng)用層上各種數(shù)據(jù)營(yíng)銷平臺(tái)的搭建,程序員在里面都扮演著舉足輕重的角色并為IT事業(yè)的發(fā)展做出了巨大的貢獻(xiàn)。

    中國(guó)有很多小朋友,他們18,9歲或21,2歲,通過自學(xué)也寫了不少代碼,他們有的代碼寫的很漂亮,一些技術(shù)細(xì)節(jié)相當(dāng)出眾,也很有鉆研精神,但是他們被一些錯(cuò)誤的認(rèn)識(shí)和觀點(diǎn)左右,缺乏對(duì)系統(tǒng),對(duì)程序的整體理解能力,這些人,一個(gè)網(wǎng)上的朋友說得很好,他們實(shí)際上只是一些Codingfans,壓根沒有資格稱為程序員,但是據(jù)我所知,不少小網(wǎng)絡(luò)公司的CTO就是這樣的codingfans,拿著嚇人的工資,做著嚇人的項(xiàng)目,項(xiàng)目的結(jié)局通常也很嚇人。
    程序員基本素質(zhì):

    作一個(gè)真正合格的程序員,或者說就是可以真正合格完成一些代碼工作的程序員,應(yīng)該具有的素質(zhì)。

    1:團(tuán)隊(duì)精神和協(xié)作能力
    把它作為基本素質(zhì),并不是不重要,恰恰相反,這是程序員應(yīng)該具備的最基本的,也是最重要的安身立命之本。把高水平程序員說成獨(dú)行俠的都是在囈語,任何個(gè)人的力量都是有限的,即便如linus這樣的天才,也需要通過組成強(qiáng)大的團(tuán)隊(duì)來創(chuàng)造奇跡,那些遍布全球的為linux寫核心的高手們,沒有協(xié)作精神是不可想象的。獨(dú)行俠可以作一些賺錢的小軟件發(fā)點(diǎn)小財(cái),但是一旦進(jìn)入一些大系統(tǒng)的研發(fā)團(tuán)隊(duì),進(jìn)入商業(yè)化和產(chǎn)品化的開發(fā)任務(wù),缺乏這種素質(zhì)的人就完全不合格了。

    2:文檔習(xí)慣
    說高水平程序員從來不寫文檔的肯定是乳臭未干的毛孩子,良好的文檔是正規(guī)研發(fā)流程中非常重要的環(huán)節(jié),作為代碼程序員,30%的工作時(shí)間寫技術(shù)文檔是很正常的,而作為高級(jí)程序員和系統(tǒng)分析員,這個(gè)比例還要高很多。缺乏文檔,一個(gè)軟件系統(tǒng)就缺乏生命力,在未來的查錯(cuò),升級(jí)以及模塊的復(fù)用時(shí)就都會(huì)遇到極大的麻煩。

    3:規(guī)范化,標(biāo)準(zhǔn)化的代碼編寫習(xí)慣
    作為一些外國(guó)知名軟件公司的規(guī)矩,代碼的變量命名,代碼內(nèi)注釋格式,甚至嵌套中行縮進(jìn)的長(zhǎng)度和函數(shù)間的空行數(shù)字都有明確規(guī)定,良好的編寫習(xí)慣,不但有助于代碼的移植和糾錯(cuò),也有助于不同技術(shù)人員之間的協(xié)作。
    有些codingfans叫囂高水平程序員寫的代碼旁人從來看不懂,這種叫囂只能證明他們自己壓根不配自稱程序員。代碼具有良好的可讀性,是程序員基本的素質(zhì)需求。
    再看看整個(gè)linux的搭建,沒有規(guī)范化和標(biāo)準(zhǔn)化的代碼習(xí)慣,全球的研發(fā)協(xié)作是絕對(duì)不可想象的。
    4:需求理解能力
    程序員需要理解一個(gè)模塊的需求,很多小朋友寫程序往往只關(guān)注一個(gè)功能需求,他們把性能指標(biāo)全部歸結(jié)到硬件,操作系統(tǒng)和開發(fā)環(huán)境上,而忽視了本身代碼的性能考慮,有人曾經(jīng)放言說寫一個(gè)廣告交換程序很簡(jiǎn)單,這種人從來不知道在百萬甚至千萬數(shù)量級(jí)的訪問情況下的性能指標(biāo)是如何實(shí)現(xiàn)的,對(duì)于這樣的程序員,你給他深藍(lán)那套系統(tǒng),他也做不出太極鏈的并訪能力。性能需求指標(biāo)中,穩(wěn)定性,并訪支撐能力以及安全性都很重要,作為程序員需要評(píng)估該模塊在系統(tǒng)運(yùn)營(yíng)中所處的環(huán)境,將要受到的負(fù)荷壓力以及各種潛在的危險(xiǎn)和惡意攻擊的可能性。就這一點(diǎn),一個(gè)成熟的程序員至少需要2到3年的項(xiàng)目研發(fā)和跟蹤經(jīng)驗(yàn)才有可能有心得。

    5:復(fù)用性,模塊化思維能力
    經(jīng)常可以聽到一些程序員有這樣的抱怨,寫了幾年程序,變成了熟練工,每天都是重復(fù)寫一些沒有任何新意的代碼,這其實(shí)是中國(guó)軟件人才最大浪費(fèi)的地方,一些重復(fù)性工作變成了熟練程序員的主要工作,而這些,其實(shí)是完全可以避免的。
    復(fù)用性設(shè)計(jì),模塊化思維就是要程序員在完成任何一個(gè)功能模塊或函數(shù)的時(shí)候,要多想一些,不要局限在完成當(dāng)前任務(wù)的簡(jiǎn)單思路上,想想看該模塊是否可以脫離這個(gè)系統(tǒng)存在,是否可以通過簡(jiǎn)單的修改參數(shù)的方式在其他系統(tǒng)和應(yīng)用環(huán)境下直接引用,這樣就能極大避免重復(fù)性的開發(fā)工作,如果一個(gè)軟件研發(fā)單位和工作組能夠在每一次研發(fā)過程中都考慮到這些問題,那么程序員就不會(huì)在重復(fù)性的工作中耽誤太多時(shí)間,就會(huì)有更多時(shí)間和精力投入到創(chuàng)新的代碼工作中去。
    一些好的程序模塊代碼,即便是70年代寫成的,拿到現(xiàn)在放到一些系統(tǒng)里面作為功能模塊都能適合的很好,而現(xiàn)在我看到的是,很多小公司軟件一升級(jí)或改進(jìn)就動(dòng)輒全部代碼重寫,大部分重復(fù)性工作無謂的浪費(fèi)了時(shí)間和精力。

    6:測(cè)試習(xí)慣
    作為一些商業(yè)化正規(guī)化的開發(fā)而言,專職的測(cè)試工程師是不可少的,但是并不是說有了專職的測(cè)試工程師程序員就可以不進(jìn)行自測(cè);軟件研發(fā)作為一項(xiàng)工程而言,一個(gè)很重要的特點(diǎn)就是問題發(fā)現(xiàn)的越早,解決的代價(jià)就越低,程序員在每段代碼,每個(gè)子模塊完成后進(jìn)行認(rèn)真的測(cè)試,就可以盡量將一些潛在的問題最早的發(fā)現(xiàn)和解決,這樣對(duì)整體系統(tǒng)建設(shè)的效率和可靠性就有了最大的保證。
    測(cè)試工作實(shí)際上需要考慮兩方面,一方面是正常調(diào)用的測(cè)試,也就是看程序是否能在正常調(diào)用下完成基本功能,這是最基本的測(cè)試職責(zé),可惜在很多公司這成了唯一的測(cè)試任務(wù),實(shí)際上還差的遠(yuǎn)那;第二方面就是異常調(diào)用的測(cè)試,比如高壓力負(fù)荷下的穩(wěn)定性測(cè)試,用戶潛在的異常輸入情況下的測(cè)試,整體系統(tǒng)局部故障情況下該模塊受影響狀況的測(cè)試,頻發(fā)的異常請(qǐng)求阻塞資源時(shí)的模塊穩(wěn)定測(cè)試等等。當(dāng)然并不是程序員要對(duì)自己的每段代碼都需要進(jìn)行這種完整測(cè)試,但是程序員必須清醒認(rèn)識(shí)自己的代碼任務(wù)在整體項(xiàng)目中的地位和各種性能需求,有針對(duì)性的進(jìn)行相關(guān)測(cè)試,并盡早發(fā)現(xiàn)和解決問題,當(dāng)然這需要上面提到的需求理解能力。

    7:學(xué)習(xí)和總結(jié)的能力
    程序員是人才很容易被淘汰,很容易落伍的職業(yè),因?yàn)橐环N技術(shù)可能僅僅在三兩年內(nèi)具有領(lǐng)先性,程序員如果想安身立命,就必須不斷跟進(jìn)新的技術(shù),學(xué)習(xí)新的技能。
    善于學(xué)習(xí),對(duì)于任何職業(yè)而言,都是前進(jìn)所必需的動(dòng)力,對(duì)于程序員,這種要求就更加高了。但是學(xué)習(xí)也要找對(duì)目標(biāo),一些小codingfans們,他們也津津樂道于他們的學(xué)習(xí)能力,一會(huì)學(xué)會(huì)了asp,一會(huì)兒學(xué)會(huì)了php,一會(huì)兒學(xué)會(huì)了jsp,他們把這個(gè)作為炫耀的資本,盲目的追逐一些膚淺的,表面的東西和名詞,做網(wǎng)絡(luò)程序不懂通訊傳輸協(xié)議,做應(yīng)用程序不懂中斷向量處理,這樣的技術(shù)人員,不管掌握了多少所謂的新語言,永遠(yuǎn)不會(huì)有質(zhì)的提高。
    善于總結(jié),也是學(xué)習(xí)能力的一種體現(xiàn),每次完成一個(gè)研發(fā)任務(wù),完成一段代碼,都應(yīng)當(dāng)有目的的跟蹤該程序的應(yīng)用狀況和用戶反饋,隨時(shí)總結(jié),找到自己的不足,這樣逐步提高,一個(gè)程序員才可能成長(zhǎng)起來。
    一個(gè)不具備成長(zhǎng)性的程序員,即便眼前看是個(gè)高手,建議也不要選用,因?yàn)樗湮榈臅r(shí)候馬上就到了。
    具備以上全部素質(zhì)的人,應(yīng)當(dāng)說是夠格的程序員了,請(qǐng)注意以上的各種素質(zhì)都不是由IQ決定的,也不是大學(xué)某些課本里可以學(xué)習(xí)到的,需要的僅僅是程序員對(duì)自己工作的認(rèn)識(shí),是一種意識(shí)上的問題。

    posted @ 2006-12-05 20:37 Yemoo'S Java Blog 閱讀(328) | 評(píng)論 (0)編輯 收藏

    /**
    ?*Description:convert?Oct?to?Dec
    ?*Author:yemoo?2006.12.05
    ?
    */

    ?
    public ? class ?P38{
    ?????
    int ?convertOct2Dec(String?Oct){
    ?????????
    int ?result = 0 ;
    ?????????
    int ?power = 1 ;
    ?????????
    for ( int ?i = Oct.length() - 1 ;i >= 0 ;i -- ,power *= 8 ){
    ?????????????
    char ?temp = Oct.charAt(i);
    ?????????????
    int ?intTemp = Character.getNumericValue(temp);
    ?????????????
    if (intTemp >= 0 && intTemp < 8 ){
    ?????????????????result
    += intTemp * power;
    ?????????????}
    else {
    ?????????????????
    if (temp == ' - ' && i == 0 ){
    ?????????????????????result
    =- result;
    ?????????????????}
    else {
    ?????????????????????
    return ?result;
    ?????????????????}
    ?????????????}
    ?????????}
    ?????????
    return ?result;
    ?????}

    ?????String?readInput(){
    ?????????KeyboardInput?in
    = new ?KeyboardInput();
    ?????????System.out.print(
    " Please?input?a?october?number: " );
    ?????????
    return ?in.readString();
    ?????}

    ?????
    public ? static ? void ?main(String?args[]){
    ?????????P38?obj
    = new ?P38();
    ?????????String?oct
    = obj.readInput();
    ?????????
    int ?value = obj.convertOct2Dec(oct);
    ?????????System.out.println(
    " Oct: " + oct + " ==Dec: " + value);
    ?????}
    ?}

    posted @ 2006-12-05 11:34 Yemoo'S Java Blog 閱讀(2034) | 評(píng)論 (0)編輯 收藏

    今天參考課本寫了一個(gè)關(guān)于二進(jìn)制與十進(jìn)制轉(zhuǎn)換的程序,程序算法不難,但寫完后測(cè)試發(fā)現(xiàn)不論是二轉(zhuǎn)十還是十轉(zhuǎn)二,對(duì)于大于21億即超過整數(shù)范圍的數(shù)不能很好的轉(zhuǎn)換。都會(huì)變成0.
    參考書籍發(fā)現(xiàn)使用使用BigInteger可以解決這個(gè)問題。
    于是查找了下JDK,然后測(cè)試幾次終于寫成功了!
    使用心得如下:

    1,BigInteger屬于java.math.BigInteger,因此在每次使用前都要import 這個(gè)類。偶開始就忘記import了,于是總提示找不到提示符。

    2,其構(gòu)造方法有很多,但現(xiàn)在偶用到的有:
    BigInteger(String?val)
    ??????????將 BigInteger 的十進(jìn)制字符串表示形式轉(zhuǎn)換為 BigInteger。
    BigInteger(String?val, int?radix)
    ??????????將指定基數(shù)的 BigInteger 的字符串表示形式轉(zhuǎn)換為 BigInteger。
    如要將int型的2轉(zhuǎn)換為BigInteger型,要寫為BigInteger two=new BigInteger("2"); //注意2雙引號(hào)不能省略

    3,BigInteger類模擬了所有的int型數(shù)學(xué)操作,如add()==“+”,divide()==“-”等,但注意其內(nèi)容進(jìn)行數(shù)學(xué)運(yùn)算時(shí)不能直接使用數(shù)學(xué)運(yùn)算符進(jìn)行運(yùn)算,必須使用其內(nèi)部方法。而且其操作數(shù)也必須為BigInteger型。
    如:two.add(2)就是一種錯(cuò)誤的操作,因?yàn)?沒有變?yōu)锽igInteger型。

    4,當(dāng)要把計(jì)算結(jié)果輸出時(shí)應(yīng)該使用.toString方法將其轉(zhuǎn)換為10進(jìn)制的字符串,詳細(xì)說明如下:
    ?StringtoString()
    ??????????返回此 BigInteger 的十進(jìn)制字符串表示形式。
    輸出方法:System.out.print(two.toString());

    5,另外說明三個(gè)個(gè)用到的函數(shù)。???
    ?BigIntegerremainder(BigInteger?val)
    ??????????返回其值為 (this % val) 的 BigInteger。
    ?BigIntegernegate()
    ??????????返回其值是 (-this) 的 BigInteger。
    ?int???????compareTo(BigInteger?val)
    ??????????將此 BigInteger 與指定的 BigInteger 進(jìn)行比較。
    remainder用來求余數(shù)。
    negate將操作數(shù)變?yōu)橄喾磾?shù)。
    compare的詳解如下:

    compareTo

    public int compareTo(BigInteger?val)
    將此 BigInteger 與指定的 BigInteger 進(jìn)行比較。對(duì)于針對(duì)六個(gè)布爾比較運(yùn)算符 (<, ==, >, >=, !=, <=) 中的每一個(gè)運(yùn)算符的各個(gè)方法,優(yōu)先提供此方法。執(zhí)行這些比較的建議語句是:(x.compareTo(y) <op> 0),其中 <op> 是六個(gè)比較運(yùn)算符之一。

    指定者:
    接口 Comparable<BigInteger> 中的 compareTo
    參數(shù):
    val - 將此 BigInteger 與之比較的 BigInteger。
    返回:
    當(dāng)此 BigInteger 在數(shù)值上小于、等于或大于 val 時(shí),返回 -1,0,或 1。

    posted @ 2006-12-05 10:20 Yemoo'S Java Blog 閱讀(16432) | 評(píng)論 (4)編輯 收藏

    ??? 前些時(shí)間總是感到迷茫,不知道該學(xué)什么,也許是快要畢業(yè)的原因吧,我也開始盲目的學(xué)習(xí)開了,看到社會(huì)招聘這個(gè)那個(gè),于是乎就什么都想一股腦學(xué)完,JAVA,JSP,PHP,JS,ASP.NET.Wap.....結(jié)果可想而知,如此只能是什么也學(xué)不成,痛惜過去,現(xiàn)在偶完全確定了今后的學(xué)習(xí)方向---JAVA-->J2EE/ORACLE.
    ??? 從今天偶會(huì)經(jīng)常到這里來寫下偶的學(xué)習(xí)心的,痛補(bǔ)以前的過失。各位監(jiān)視偶啊!
    ??? 這里將見證偶從菜鳥變成老鳥的歷史過程!
    ??? 偶的目標(biāo)---第一流的JAVA程序員!?。?-(人首先要自信,堅(jiān)定信念,才能成功?。?/p>

    posted @ 2006-12-05 09:39 Yemoo'S Java Blog 閱讀(1100) | 評(píng)論 (3)編輯 收藏

    這兩天看了java面向?qū)ο缶幊滩糠值脙?nèi)容,感覺有不少需要注意得地方:
    重要知識(shí)點(diǎn)總結(jié)如下:
    1,抽象,封裝,繼承,多態(tài)是面向?qū)ο蟪绦蛟O(shè)計(jì)中得四個(gè)特點(diǎn).
    2,面向?qū)ο蟮密浖_發(fā)大體分為:面向?qū)ο蟮姆治?面向?qū)ο蟮脑O(shè)計(jì),面向?qū)ο蟮膶?shí)現(xiàn).
    ?? 可概括為如下過程:分析用戶需求,從問題中抽取對(duì)象模型;細(xì)化模型,設(shè)計(jì)類,包括類的屬性和類間的
    ???相互關(guān)系,同時(shí)觀察是否有可以直接引用的已有類或部件;選定一種面向?qū)ο蟮木幊陶Z言,具體編碼實(shí)現(xiàn)
    ??上一階段類的設(shè)計(jì),并在開發(fā)過程中引入測(cè)試,完善整個(gè)解決方案.
    3,面向?qū)ο蟪绦蛟O(shè)計(jì)方法的優(yōu)點(diǎn)是:可重用性,可擴(kuò)展性,可管理性.
    4,類的定義:class前的修飾符分為訪問控制符和非訪問控制符兩大類.訪問控制符包括public和private.
    ?? 非訪問控制符包括abstract(抽象),final(最終).
    5,final類是最終類,是不能有子類的類.abstract和final不能同時(shí)修飾一個(gè)類,因?yàn)槌橄箢惐旧頉]有具體對(duì)象,
    ??? 需要派生出子類后在創(chuàng)建子類的對(duì)象.而最終類不可能有子類.
    6,創(chuàng)建對(duì)象的格式為: 類名 對(duì)象名=new 構(gòu)造方法(參數(shù));注意前面是類名后面是構(gòu)造方法.
    ??? 注意構(gòu)造方法沒有返回類型,也不能寫void,主要用于完成類對(duì)象的初始化工作,一般不能直接由編程
    ??? 直接調(diào)用,而是用new運(yùn)算符來調(diào)用.
    7,如果class前面由public修飾符,則默認(rèn)構(gòu)造方法的前面也應(yīng)該有public修飾符.
    8,類中有static修飾的域或方法,可用類名或?qū)ο竺L問,否則只能用對(duì)象名訪問.
    9,修飾域的訪問控制符可以是:public,private,protected,private protected.非訪問控制符可以是:
    ??? static,final,volatile(易失域)
    10,類變量的最本質(zhì)的特點(diǎn)是:他們是類的域,不屬于任何一個(gè)類的具體對(duì)象實(shí)例.不是保存在某個(gè)對(duì)象實(shí)例的內(nèi)存空間中,而是保存在類的內(nèi)存區(qū)域的公共存儲(chǔ)單元中.
    11,局部變量是在方法體內(nèi)聲明的,只有當(dāng)方法被調(diào)用時(shí)他們才存在,因而只能在本方法內(nèi)使用,不存在訪問控制符,也不能聲明為靜態(tài)變量(static),但可以聲明為final變量.局部變量必須初始化.
    12,修飾方法的訪問控制符可以是:public,private,protected,private protected,修飾方法的非訪問控制符可以是:static,final,abstract,native(本地方法),synchronized(同步方法)。
    13,用static修飾的變量或方法都為類成員,類成員可以用類名或?qū)嵗L問,實(shí)例成員只能用實(shí)例名來訪問。
    14,如果一個(gè)類中含有抽象方法,則此類必須為抽象類,如果抽象類的子類不為抽象類,則子類必須實(shí)現(xiàn)父類的所有抽象方法。抽象方法不能用靜態(tài)方法和最終方法。抽想方法只有函數(shù)頭的聲明,而用分號(hào)來替代方法體,沒有大括號(hào)。如abstract void abstractmethod();
    15,this變量用在一個(gè)方法的內(nèi)部,指向當(dāng)前
    對(duì)象,當(dāng)前對(duì)象指的是調(diào)用當(dāng)前正在執(zhí)行的方法的那個(gè)對(duì)象。super變量是直接指向父類的構(gòu)造方法,用來引用父類種的變量和方法。(由于他們指的是對(duì)象,所以不能通過它來引用類變量和類方法)
    16,如果要引用一個(gè)包中的多個(gè)類,可以用星號(hào)來代替。使用星號(hào)只能表示本層次的所有類,而不包括子層次下的類。所以經(jīng)常需要用兩條語句來引入兩個(gè)層次的類:import java.awt.*;import java.awt.event.*;
    17,訪問修飾符:
    --類中限定為public的成員可以被所有的類訪問。
    --類中先定位private的成員只能被這個(gè)類本身訪問。同一個(gè)類的不同對(duì)象可以訪問對(duì)方的private域變量或調(diào)用對(duì)方的域方法,這是因?yàn)樵L問保護(hù)控制在類的級(jí)別上,而不是對(duì)象的級(jí)別上。
    --類中限定為protected的成員可以被這個(gè)類本身,它的子類(包括同一個(gè)包中和不同包中的子類),以及同一個(gè)包中的其他類訪問。
    --用private protected修飾的成員可以被該類本身訪問,也可以被該類的所有子類訪問。
    --默認(rèn)訪問控制符規(guī)定只能被同一個(gè)包中的類訪問和引用,而不能被其他包的類訪問。即他的訪問權(quán)限是friendly。
    18,注意:
    ----abstract和private,static,final,native不能并列修飾同一個(gè)方法。
    ----abstract類中不能有private修飾的域和方法
    ----static方法不能處理非static的域。
    19,重載方法的參數(shù)必須不同,或者是參數(shù)個(gè)數(shù)不同,或者是參數(shù)類型不同。重載的多個(gè)方法必須返回
    相同的數(shù)據(jù)類型。
    20,在java中,一個(gè)類獲取某一接口定義的功能并不是通過直接繼承這個(gè)接口的屬性和方法來實(shí)現(xiàn)的。因?yàn)榻涌谥械膶傩远际浅A?,接口的方法都是沒有方法體的抽象方法,沒有具體定義操作。

    posted @ 2006-07-22 23:55 Yemoo'S Java Blog 閱讀(365) | 評(píng)論 (0)編輯 收藏

    java支持在命令行下后面直接跟參數(shù):類似 程序名稱 參數(shù)1 [參數(shù)2] ....
    對(duì)于此類的程序,要注意的問題就是判斷后面參數(shù)個(gè)數(shù)和類型是否合法.如果程序需要的參數(shù)個(gè)數(shù)至少是兩個(gè),當(dāng)程序并沒有對(duì)參數(shù)長(zhǎng)度進(jìn)行判斷時(shí)如果用戶值輸入一個(gè)參數(shù),則程序運(yùn)行會(huì)返回錯(cuò)誤!因此應(yīng)該加以判斷:方法如下:
    if(args.length<2){
    ???System.out.println("Usage: String1 String2");
    ?? System.exit(0);
    }else{
    ???........
    }

    posted @ 2006-07-21 22:08 Yemoo'S Java Blog 閱讀(503) | 評(píng)論 (0)編輯 收藏

    通過做本章最后得習(xí)題,發(fā)現(xiàn)如下問題需要偶以后注意:
    1,注意用戶輸入數(shù)據(jù)得合法性.
    ???如需要輸入一個(gè)正整數(shù)才有效,如果對(duì)用戶輸入不加判斷,當(dāng)用戶輸入一個(gè)負(fù)數(shù)時(shí)則會(huì)產(chǎn)生錯(cuò)誤得結(jié)果.因此應(yīng)該進(jìn)行簡(jiǎn)單的判斷.
    int n=0;
    ?? while(n<1)
    ?????????n=讀取用戶輸入的值
    這樣即可保證用戶輸入得時(shí)一個(gè)正整數(shù).
    2,圖形界面中setText()得內(nèi)容必須時(shí)字符串型,因此在輸出一個(gè)數(shù)字型時(shí)應(yīng)該將其轉(zhuǎn)換成字符串型.
    ? 用Integer.toString(),Double.toString()方法即可.
    ? 例,int x=1;aa.setText(Integer.toString(x));
    3,圖形界面中捕獲哪個(gè)按鈕被按下得方法.
    ? 當(dāng)存在多個(gè)button按鈕時(shí),我們都用actionListener(this)來監(jiān)聽.那么如何判斷用戶點(diǎn)擊了哪個(gè)按鈕呢?
    ??
    用getSource()方法
    ?
    例:btn1.addActionListener(this);btn2.addActionListener(this);
    ????? public void actionPerformed(ActionEvent e){
    ????????????if(e.getSource()==btn1)
    ??????????????????//do anything
    ??????????? else if(e.getSource==btn2)
    ???????????????? //do other things
    ????? }

    posted @ 2006-07-21 18:56 Yemoo'S Java Blog 閱讀(328) | 評(píng)論 (0)編輯 收藏

    java數(shù)組對(duì)象有一個(gè)很重要的方法getChars();其方法描述為:

    public void getChars(int srcBegin,int srcEnd,char dst[],int dstBegin);? 將當(dāng)前字符串的部分字符復(fù)制到目標(biāo)自負(fù)數(shù)組dst中,從srcBegin(包含在內(nèi))到srcEnd(不包含在內(nèi))之間的字符復(fù)制到目標(biāo)字符數(shù)組中的字符從dstBegin位置開始存放.

    使用實(shí)例:
    String?ss="Visual?Basic";
    char?dst[]={'a','b','c','d'};

    ss.getChars(
    4,6,dst,2);
    System.out.println(dst);
    輸出結(jié)果為abal;

    注意數(shù)組參數(shù)只要寫入數(shù)組名即可,不要帶[],輸出可以直接用數(shù)組名輸出全部?jī)?nèi)容.

    posted @ 2006-07-12 10:41 Yemoo'S Java Blog 閱讀(3101) | 評(píng)論 (2)編輯 收藏

    今天看了書本上的楊歸三角程序?qū)懛ê?自己試著去寫,但寫完后編譯總是出現(xiàn)一個(gè)錯(cuò)誤.
    先看代碼:
    ?1?public?class?YangHui{
    ?2?????public?static?void?main(String?args[]){
    ?3?????????final?int?max=10;
    ?4?????????int?a[][]=new?int[max][];
    ?5?????????for(int?i=0;i<a.length;i++){
    ?6?????????????int?a[i]=new?int[i+1];
    ?7?????????}
    ?8?????????a[0][0]=1;
    ?9?????????for(int?i=1;i<a.length;i++){
    10?????????????a[i][0]=1;
    11?????????????a[i][a[i].length-1]=1;
    12?????????????for(int?j=1;j<a[i-1].length;j++){
    13?????????????????a[i][j]=a[i-1][j-1]+a[i-1][j];
    14?????????????}
    15?????????}
    16?????????
    17?????????for(int?i=0;i<a.length;i++){
    18?????????????for(int?j=0;j<a[i].length;j++)
    19?????????????????System.out.print(a[i][j]+"\t");
    20?????????????System.out.println();
    21?????????}
    22?????}
    23?}

    JCreator返回如下錯(cuò)誤信息:
    --------------------------------------------------
    D:\Java\JCreator\YangHui.java:6: 需要 ']'
    ??????????? int a[i]=new int[i+1];
    ????????????????? ^
    1 錯(cuò)誤

    處理已完成。
    ---------------------------------------------------
    開始怎么都看不出第六行有什么錯(cuò)誤,郁悶半天之后看了課本,發(fā)現(xiàn)原來多了一個(gè)int.突然醒悟這個(gè)數(shù)組已經(jīng)在前面聲明過了,在這里寫int不是重復(fù)聲明嗎?......真是太粗心了,不過給偶一個(gè)深刻的教訓(xùn),一定注意不要范重復(fù)聲明數(shù)組的錯(cuò)誤.
    刪掉int之后編譯通過,正確的程序是這樣的:

    public?class?YangHui{
    ????
    public?static?void?main(String?args[]){
    ????????
    final?int?max=10;
    ????????
    int?a[][]=new?int[max][];
    ????????
    for(int?i=0;i<a.length;i++){
    ????????????a[i]
    =new?int[i+1];
    ????????}
    ????????a[
    0][0]=1;
    ????????
    for(int?i=1;i<a.length;i++){
    ????????????a[i][
    0]=1;
    ????????????a[i][a[i].length
    -1]=1;
    ????????????
    for(int?j=1;j<a[i-1].length;j++){
    ????????????????a[i][j]
    =a[i-1][j-1]+a[i-1][j];
    ????????????}
    ????????}
    ????????
    ????????
    for(int?i=0;i<a.length;i++){
    ????????????
    for(int?j=0;j<a[i].length;j++)
    ????????????????System.out.print(a[i][j]
    +"\t");
    ????????????System.out.println();
    ????????}
    ????}
    }


    ?

    posted @ 2006-07-12 01:04 Yemoo'S Java Blog 閱讀(346) | 評(píng)論 (0)編輯 收藏

    這算是一個(gè)很簡(jiǎn)單的程序,但還是值得我這樣的初學(xué)者去總結(jié)一下,畢竟applet不同于application程序:
    import?java.applet.*;
    import?java.awt.*;
    import?java.awt.event.*;

    public?class?LeapyearTest?extends?Applet?implements?ActionListener{
    ????Label?result;???
    //定義一個(gè)輸出結(jié)果的標(biāo)簽對(duì)象
    ????TextField?t1;???//定義一個(gè)用于輸入年份的文本框
    ????Button?btn;?//定義一個(gè)button對(duì)象
    ????
    ????
    int?year;
    ????
    boolean?leap;
    ????
    ????
    public?void?init(){
    ????????result
    =new?Label("請(qǐng)輸入要判斷的年份:");
    ????????t1
    =new?TextField(5);
    ????????btn
    =new?Button("判斷");
    ????????
    ????????add(t1);
    ????????add(btn);
    ????????add(result);
    ????????
    ????????btn.addActionListener(
    this);????//為按鈕注冊(cè)事件,事件的監(jiān)聽者為當(dāng)前類的對(duì)象this
    ????}
    ????
    ????
    public?void?actionPerformed(ActionEvent?e){
    ????????year
    =Integer.parseInt(t1.getText());
    ????????
    ????????
    if((year%4==0)&&(year%100!=0)){
    ????????????leap
    =true;
    ????????}
    else?if(year%400==0){
    ????????????leap
    =true;
    ????????}
    else{
    ????????????leap
    =false;
    ????????}
    ????????
    ????????
    if(leap==true){
    ????????????result.setText(
    "你輸入的年份為閏年!");
    ????????}
    else{
    ????????????result.setText(
    "你輸入的年份不是閏年!");
    ????????}
    ????????
    ????????t1.setText(
    "");
    ????}
    }

    這里有幾點(diǎn)需要說明的:
    1,applet程序必須引入java.applet.*;
    2,使用文本框,按鈕等控件需要引入java.awt.*;
    3,有事件發(fā)生則要引入java.awt.event.*;
    4,在類名后加上extends Applet Implements ActionListener
    5,添加事件后,當(dāng)事件被激活后會(huì)自動(dòng)調(diào)用actionPerformed函數(shù)執(zhí)行.因此應(yīng)該為事件寫該函數(shù).

    posted @ 2006-07-09 23:49 Yemoo'S Java Blog 閱讀(1835) | 評(píng)論 (2)編輯 收藏

    偶是一個(gè)java初學(xué)者,看了樹上一個(gè)簡(jiǎn)單例子,然后自己試著寫了下,卻發(fā)現(xiàn)了很多問題....
    例子是一個(gè)判斷用戶輸入字母是大寫還是小寫的.
    偶開始這樣寫:

    import ?java.io. * ;

    public ? class ?UpLow{
    ????
    public ? static ? void ?main(String?args[])? {
    ????????C
    har ?x;
    ????????System.out.println(
    " 請(qǐng)輸入一個(gè)字母: " );
    ????????x
    = (C har )System.in.read();
    ????????
    if (Character.isUpperCase(x)){
    ????????????System.out.println(
    " 你輸入了一個(gè)大寫字母! " );
    ????????}
    ????????
    if (Character.isLowerCase(x)){
    ????????????System.out.println(
    " 你輸入了一個(gè)小寫字母! " );
    ????????}
    ????}
    }
    運(yùn)行調(diào)試先后發(fā)現(xiàn)如下問題:
    1,Char x和(Char)System.in.read()中的Char中c應(yīng)該小寫.
    2,由于用到system.in.read()所以應(yīng)該加上throws IOException.

    這么簡(jiǎn)單一程序就遇到這么多問題...崩潰...
    不過這樣就給了俺比較深刻的印象,以后一定不會(huì)范這些錯(cuò)誤了.

    用到輸出語句"System.in.read()"要在main()中加上throws IOException 語句來拋出異常.

    posted @ 2006-07-09 23:16 Yemoo'S Java Blog 閱讀(251) | 評(píng)論 (0)編輯 收藏

    主站蜘蛛池模板: 亚洲午夜无码久久| 全黄a免费一级毛片人人爱| 国产亚洲大尺度无码无码专线| MM1313亚洲精品无码久久| 黄色片在线免费观看| 亚洲中文字幕在线无码一区二区| 免费A级毛片无码A∨中文字幕下载| 亚洲国产精品无码久久一区二区| 国产午夜无码片免费| 久久国产亚洲电影天堂| 久久精品免费一区二区三区| 亚洲国产精品国自产拍电影| 8x8×在线永久免费视频| 亚洲视频在线一区二区三区| 久久久久久精品免费看SSS | 国产情侣久久久久aⅴ免费| 久久国产亚洲精品麻豆| 久9热免费精品视频在线观看| 亚洲高清在线视频| 67pao强力打造高清免费| 亚洲av无码久久忘忧草| 免费无码一区二区三区蜜桃大| 国产AV日韩A∨亚洲AV电影| 伊人亚洲综合青草青草久热| 在线人成免费视频69国产| 久久久亚洲欧洲日产国码是AV| 青草草色A免费观看在线| 亚洲AV无码AV日韩AV网站| 亚洲男女内射在线播放| 91精品国产免费久久国语蜜臀| 国产精品亚洲精品青青青 | 亚洲性日韩精品国产一区二区| 东北美女野外bbwbbw免费| 亚洲大尺码专区影院| 国产一区视频在线免费观看| 久久九九久精品国产免费直播| 亚洲综合小说久久另类区| 日韩精品视频免费观看| 成人无码视频97免费| 亚洲影视自拍揄拍愉拍| 亚洲国产主播精品极品网红 |