??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美亚洲第一区,亚洲欧美日本免费,亚洲日本久久http://www.aygfsteel.com/drecry/archive/2010/07/02/325045.htmldrecrydrecryFri, 02 Jul 2010 02:34:00 GMThttp://www.aygfsteel.com/drecry/archive/2010/07/02/325045.htmlhttp://www.aygfsteel.com/drecry/comments/325045.htmlhttp://www.aygfsteel.com/drecry/archive/2010/07/02/325045.html#Feedback0http://www.aygfsteel.com/drecry/comments/commentRss/325045.htmlhttp://www.aygfsteel.com/drecry/services/trackbacks/325045.htmlJsp面在URL中传递参C出现q可以采用以下Ҏ解决Q一、用更改Tomcat的方法。二、用JSP的scriptLet view plaincopy to clipboardprint?三、用自定义JSTL?

Jsp面在URL中传递参C出现q

解决Ҏ如下Q?/font>

一、用更改Tomcat的方法?/strong>q个Ҏ单,但是需要改动的地方是服务器软gU别的,如果E微变动pȝ无法正{码,UL性不高?/font>

1、来到tomcat目录Q找到conf目录下的server.xml问hQ打开Q找?lt;Connector>标签Q在最后添加URIEncoding=’GBK’Q效果如下:

view plaincopy to clipboardprint?

<Connector

port="8080"maxThreads="150"minSpareThreads="25"maxSpareThreads="75"

enableLookups="false"redirectPort="8443"acceptCount="100"

debug="0"connectionTimeout="20000"

disableUploadTimeout="true"URIEncoding=″GBK″/>

<Connectorport="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"enableLookups="false" redirectPort="8443" acceptCount="100"debug="0" connectionTimeout="20000"disableUploadTimeout="true" URIEncoding=″GBK″/>

q种Ҏ对getq个Ҏ试成功?/font>

2、在每个Jsp面d如下代码

view plaincopy to clipboardprint?

<%@pagepageEncoding=”gb2312″%>

<%@pagecontentType=”text/html;charset=gb2312″%>

<%request.setCharacterEncoding(”gb2312″);%>

<%@ page pageEncoding=”gb2312″%><%@ page contentType=”text/html;charset=gb2312″%><%request.setCharacterEncoding(”gb2312″);%>

~码方式也可以改成GBKQ支持繁体中文。重启TomcatQ这一步很重要Q否则可能看不到效果?/font>

q种Ҏ对post试成功。徏议两U同步用?/font>

二、用JSP的scriptLet

view plaincopy to clipboardprint?

<%=newString(elValue.getBytes("iso-8859-1"),"GBK")%>

<%=new String(elValue.getBytes("iso-8859-1"),"GBK")%>

三、用自定义JSTL

q是我们的重Ҏ?q里要详l说?

W一,~写自定义标{?/font>

W二~写tag文g

W三部vtag文g

W四使用?)很简单的.



drecry 2010-07-02 10:34 发表评论
]]>
(转)Ҏ重蝲与方法覆盖(重写Q?/title><link>http://www.aygfsteel.com/drecry/archive/2010/06/11/323381.html</link><dc:creator>drecry</dc:creator><author>drecry</author><pubDate>Fri, 11 Jun 2010 13:35:00 GMT</pubDate><guid>http://www.aygfsteel.com/drecry/archive/2010/06/11/323381.html</guid><wfw:comment>http://www.aygfsteel.com/drecry/comments/323381.html</wfw:comment><comments>http://www.aygfsteel.com/drecry/archive/2010/06/11/323381.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/drecry/comments/commentRss/323381.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/drecry/services/trackbacks/323381.html</trackback:ping><description><![CDATA[<pre>Ҏ覆盖必须满下列条g (1) 子类的方法的名称及参数必d所覆盖的方法相? (2) 子类的方法返回类型必d所覆盖的方法相? (3) 子类Ҏ不能~小所覆盖Ҏ的访问权? (4) 子类Ҏ不能抛出比所覆盖Ҏ更多的异? 重蝲Ҏ必须满下列条g (1) Ҏ名必ȝ? (2) Ҏ的参数签名必ȝ? (3) Ҏ的返回类型和Ҏ的修饰符可以不相? Z说说Ҏ覆盖和重载的区别 初次见到q两个单词ƈ没有什么特别的感觉Q但是时间长了,却发C上一会儿用overrideQ一会儿又用overloadQ搞得我的迷qL。于是就做了个ȝQ希望能对和我一样对q两个概忉|p不清的|友有一个帮助? override可以译盖,从字面就可以知道Q它是覆盖了一个方法ƈ且对光写,以求辑ֈ不同的作用。对我们来说最熟悉的覆盖就是对接口Ҏ的实玎ͼ在接口中一般只是对Ҏq行了声明,而我们在实现Ӟ需要实现接口声明的所有方法。除了这个典型的用法以外Q我们在l承中也可能会在子类覆盖父类中的Ҏ。在覆盖要注意以下的几点Q? 1、覆盖的Ҏ的标志必要和被覆盖的方法的标志完全匚wQ才能达到覆盖的效果Q? 2、覆盖的Ҏ的返回值必d被覆盖的Ҏ的返回一_ 3、覆盖的Ҏ所抛出的异常必d被覆盖方法的所抛出的异怸_或者是其子c; 4、被覆盖的方法不能ؓprivateQ否则在其子cM只是新定义了一个方法,q没有对其进行覆盖? overloadҎ们来说可能比较熟悉,可以译为重载,它是指我们可以定义一些名U相同的ҎQ通过定义不同的输入参数来区分q些ҎQ然后再调用ӞVM׃Ҏ不同的参数样式,来选择合适的Ҏ执行。在使用重蝲要注意以下的几点Q? 1、在使用重蝲时只能通过不同的参数样式。例如,不同的参数类型,不同的参C敎ͼ不同的参数顺序(当然Q同一Ҏ内的几个参数cd必须不一P例如可以是fun(int,float)Q但是不能ؓfun(int,int)Q; 2、不能通过讉K权限、返回类型、抛出的异常q行重蝲Q? 3、方法的异常cd和数目不会对重蝲造成影响Q? 4、对于承来_如果某一Ҏ在父cM是访问权限是priavteQ那么就不能在子cd其进行重载,如果定义的话Q也只是定义了一个新ҎQ而不会达到重载的效果? 下面是对override和overload的测试程序,其中注释中的内容都是会生编译错误的代码Q我们将注释LQ看看在~译时会产生什么效果? //对overload试的文ӞOverloadTest.java publicnewOverrideTest1(); try{ test.fun(); test.fun1(); }catch(Exceptione){} } } classOverrideTest1extendsOverrideTest{ //以下正常Override publicvoidfun()throwsTestException2{ System.out.println("funinOverrideTest1"); } //不能Override父类中的ҎQ因为它定义了不同的异常cd? //q回倹{? //publicintfun()throwsTestException1{ //System.out.println("methodfuninTest"); //return1; //} //不能Override父类中的ҎQ因为它抛出了比父类中非法范? //更大的异常? //publicvoidfun()throwsException{ //System.out.println("funinOverrideTest1"); //} //q个Ҏq没有Override父类中的fun1ҎQ因个方法在 //父类是privatecdQ所以这里只是相当于定义了一个新Ҏ? publicvoidfun1(){ System.out.println("methodfun1inTest"); } } classTestExceptionextendsException{ publicTestException(Stringmsg){ super(msg); } } classTestException1extendsTestException{ publicTestException1(Stringmsg){ super(msg); } } classTestException2extendsTestException{ publicTestException2(Stringmsg){ super(msg); } } </pre> </ca><br /> <span id="wmqeeuq" class="answerRef" id="ref383043400" rel="best">参考资料:<a target="_blank">http://zhidao.baidu.com/question/1996221.html</a></span> <div id="wmqeeuq" class="pj_div" title="回答很有帮助Q谢?"> </div> <img src ="http://www.aygfsteel.com/drecry/aggbug/323381.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/drecry/" target="_blank">drecry</a> 2010-06-11 21:35 <a href="http://www.aygfsteel.com/drecry/archive/2010/06/11/323381.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA面试??http://www.aygfsteel.com/drecry/archive/2010/03/25/316589.htmldrecrydrecryThu, 25 Mar 2010 13:40:00 GMThttp://www.aygfsteel.com/drecry/archive/2010/03/25/316589.htmlhttp://www.aygfsteel.com/drecry/comments/316589.htmlhttp://www.aygfsteel.com/drecry/archive/2010/03/25/316589.html#Feedback0http://www.aygfsteel.com/drecry/comments/commentRss/316589.htmlhttp://www.aygfsteel.com/drecry/services/trackbacks/316589.html    StringcLfinalcL不可以ѝ?/p>

    5.2  swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?

    switchQexpr1Q中Qexpr1是一个整数表辑ּ。因此传递给 switch ?case 语句的参数应该是 int?short?char 或?byte.longQstring 都不能作用于swtich.

    5.3  try {}里有一个return语句Q那么紧跟在q个try后的finally {}里的code会不会被执行Q什么时候被执行Q在return前还是后Q?/strong>

    会执行,在return前执行?/p>

    5.4  ~程题: 用最有效率的Ҏ出2乘以8{於几?

    2 << 3

    5.5  两个对象值相同(x.equalsQyQ?== trueQ,但却可有不同的hash codeQ这句话对不对?

    不对Q有相同的hash code.

    5.6  当一个对象被当作参数传递到一个方法后Q此Ҏ可改变这个对象的属性,q可q回变化后的l果Q那么这里到底是g递还是引用传递?

    是g递?a target="_blank">Java ~程语言只有g递参数。当一个对象实例作Z个参数被传递到Ҏ中时Q参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变Q但对象的引用是永远不会改变的?/p>

    5.7  当一个线E进入一个对象的一个synchronizedҎ后,其它U程是否可进入此对象的其它方法?

    不能Q一个对象的一个synchronizedҎ只能׃个线E访问?/p>

    Q这个有点疑问:问的是这个对象的其他ҎQ而非synchonizedҎ。)

    5.8  ~程题: 写一个Singleton出来?/strong>

    Singleton模式主要作用是保证在Java应用E序中,一个类Class只有一个实例存在?/p>

    一般Singleton模式通常有几U种形式Q?/p>

    W一UŞ式: 定义一个类Q它的构造函Cؓprivate的,它有一个static的private的该cd量,在类初始化时实例话,通过一个public的getInstanceҎ获取对它的引用,l而调用其中的Ҏ?/p>

package test;

public class Singleton {

         private Singleton() {

         }

         // 在自己内部定义自׃个实例,是不是很奇怪?

         // 注意q是private 只供内部调用

         private static Singleton instance = new Singleton();

         // q里提供了一个供外部讉K?/span>class的静态方法,可以直接讉K

         public static Singleton getInstance() {

                   return instance;

         }

}


    W二UŞ式:

package test;

public class Singleton {

         private static Singleton instance = null;

         public static synchronized Singleton getInstance() {

                   // q个Ҏ比上面有所改进Q不用每ơ都q行生成对象Q只是第一?/span>

                   // 使用时生成实例,提高了效率!

                   if (instance == null)

                            instance = new Singleton();

                   return instance;

         }

}

    其他形式Q?/p>

    定义一个类Q它的构造函Cؓprivate的,所有方法ؓstatic的?/p>

    一般认为第一UŞ式要更加安全?/p>

    5.9  Java的接口和C++的虚cȝ相同和不同处?/strong>

    ׃Java不支持多l承Q而有可能某个cL对象要用分别在几个cL对象里面的方法或属性,现有的单l承机制׃能满求。与l承相比Q接口有更高的灵zL,因ؓ接口中没有Q何实C码。当一个类实现了接口以后,该类要实现接口里面所有的Ҏ和属性,q且接口里面的属性在默认状态下面都是public staticQ所有方法默认情况下是public.一个类可以实现多个接口?/p>

    5.10  Java中的异常处理机制的简单原理和应用?/strong>

    当JavaE序q反了Java的语义规则时QJava虚拟机就会将发生的错误表CZؓ一个异常。违反语义规则包?U情c一U是Javacd内置的语义检查。例如数l下标越界,会引发IndexOutOfBoundsExceptionQ访问null的对象时会引发NullPointerException.另一U情况就是Java允许E序员扩展这U语义检查,E序员可以创q异常Qƈ自由选择在何时用throw关键字引发异常。所有的异常都是java.lang.Thowable的子cR?/p>

drecry 2010-03-25 21:40 发表评论
]]>
JAVA面试题四(?http://www.aygfsteel.com/drecry/archive/2010/03/25/316588.htmldrecrydrecryThu, 25 Mar 2010 13:39:00 GMThttp://www.aygfsteel.com/drecry/archive/2010/03/25/316588.htmlhttp://www.aygfsteel.com/drecry/comments/316588.htmlhttp://www.aygfsteel.com/drecry/archive/2010/03/25/316588.html#Feedback0http://www.aygfsteel.com/drecry/comments/commentRss/316588.htmlhttp://www.aygfsteel.com/drecry/services/trackbacks/316588.html    SessionBeanQStateless Session Bean 的生命周期是由容器决定的Q当客户机发求要建立一个Bean的实例时QEJB容器不一定要创徏一个新的Bean的实例供客户用,而是随便找一个现有的实例提供l客h。当客户机第一ơ调用一个Stateful Session Bean Ӟ容器必须立即?a class="channel_keylink" target="_blank">服务?/a>中创Z个新的Bean实例Qƈ兌到客h上,以后此客h调用Stateful Session Bean 的方法时容器会把调用分派C此客h相关联的Bean实例?/p>

    EntityBeanQEntity Beans能存zȝ对较长的旉Qƈ且状态是持箋的。只要数据库中的数据存在QEntity beans׃直存zR而不是按照应用程序或者服务进E来说的。即使EJB容器崩溃了,Entity beans也是存活的。Entity Beans生命周期能够被容器或?Beans自己理?/p>

    EJB通过以下技术管理事务:对象理l织QOMGQ的对象事务服务QOTSQ,Sun Microsystems的Transaction ServiceQJTSQ?a class="channel_keylink" target="_blank">Java Transaction APIQJTAQ,开发组QX/OpenQ的XA接口?/p>

    4.2  应用服务?/a>有那些?

    BEA WebLogic ServerQIBM WebSphere Application ServerQ?a class="channel_keylink" target="_blank">Oracle9i Application ServerQjBossQTomcat

    4.3  l我一个你最常见到的runtime exception.

    ArithmeticExceptionQ?ArrayStoreExceptionQ?BufferOverflowExceptionQ?BufferUnderflowExceptionQ?CannotRedoExceptionQ?CannotUndoExceptionQ?ClassCastExceptionQ?CMMExceptionQ?ConcurrentModificationExceptionQ?DOMExceptionQ?EmptyStackExceptionQ?IllegalArgumentExceptionQ?IllegalMonitorStateExceptionQ?IllegalPathStateExceptionQ?IllegalStateExceptionQ?ImagingOpExceptionQ?IndexOutOfBoundsExceptionQ?MissingResourceExceptionQ?NegativeArraySizeExceptionQ?NoSuchElementExceptionQ?NullPointerExceptionQ?ProfileDataExceptionQ?ProviderExceptionQ?RasterFormatExceptionQ?SecurityExceptionQ?SystemExceptionQ?UndeclaredThrowableExceptionQ?UnmodifiableSetExceptionQ?UnsupportedOperationException.

    4.4  接口是否可承接口? 抽象cL否可实现QimplementsQ接口? 抽象cL否可l承实体c(concrete classQ?

    接口可以l承接口。抽象类可以实现QimplementsQ接口,抽象cL否可l承实体c,但前提是实体cdL明确的构造函数?/p>

    4.5  ListQ?SetQ?Map是否l承自Collection接口Q?/strong>

    ListQSet是,Map不是

    4.6  说出数据q接池的工作机制是什么?

    J2EE服务器启动时会徏立一定数量的池连接,q一直维持不于此数目的池连接。客LE序需要连接时Q池驱动E序会返回一个未使用的池q接q将其表Cؓ忙。如果当前没有空闲连接,池驱动程序就新徏一定数量的q接Q新接的数量有配|参数决定。当使用的池q接调用完成后,池驱动程序将此连接表CؓI闲Q其他调用就可以使用q个q接?/p>

    4.7  abstract的method是否可同时是staticQ是否可同时是nativeQ是否可同时是synchronizedQ?/strong>

    都不?/p>

    4.8  数组有没有lengthQ)q个ҎQ?String有没有lengthQ)q个ҎQ?/strong>

    数组没有lengthQ)q个ҎQ有length的属性。String有有lengthQ)q个Ҏ?/p>

    4.9  Set里的元素是不能重复的Q那么用什么方法来区分重复与否呢? 是用==q是equalsQ)Q?它们有何区别Q?/strong>

    Set里的元素是不能重复的Q那么用iteratorQ)Ҏ来区分重复与否。equalsQ)是判M个Set是否相等?/p>

    equalsQ)?=Ҏ军_引用值是否指向同一对象equalsQ)在类中被覆盖Qؓ的是当两个分ȝ对象的内容和cd盔R的话Q返回真倹{?/p>

    4.10  构造器Constructor是否可被overrideQ?/strong>

    构造器Constructor不能被承,因此不能重写OverridingQ但可以被重载Overloading.



drecry 2010-03-25 21:39 发表评论
]]>
java 面试题三(?http://www.aygfsteel.com/drecry/archive/2010/03/25/316587.htmldrecrydrecryThu, 25 Mar 2010 13:38:00 GMThttp://www.aygfsteel.com/drecry/archive/2010/03/25/316587.htmlhttp://www.aygfsteel.com/drecry/comments/316587.htmlhttp://www.aygfsteel.com/drecry/archive/2010/03/25/316587.html#Feedback0http://www.aygfsteel.com/drecry/comments/commentRss/316587.htmlhttp://www.aygfsteel.com/drecry/services/trackbacks/316587.html    Static Nested Class是被声明为静态(staticQ的内部c,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部cd例化后才能实例化?/p>

    3.2  JSP中动态INCLUDE与静态INCLUDE的区别?

    动态INCLUDE用jspQinclude动作实现 <jspQinclude page="included.jsp" flush="true" />它L会检查所含文件中的变化,适合用于包含动态页面,q且可以带参数?/p>

    静态INCLUDE用include伪码实现Q定不会查所含文件的变化Q适用于包含静态页?lt;%@ include file="included.htm" %>

    3.3  什么时候用assert.

    assertionQ断aQ在软g开发中是一U常用的调试方式Q很多开发语a中都支持q种机制。在实现中,assertion是在程序中的一条语句,它对一个boolean表达式进行检查,一个正程序必M证这个boolean表达式的gؓtrueQ如果该gؓfalseQ说明程序已l处于不正确的状态下Q系l将l出警告或退出。一般来_assertion用于保证E序最基本、关键的正确性。assertion查通常在开发和时开启。ؓ了提高性能Q在软g发布后,assertion查通常是关闭的?/p>

    3.4  GC是什么? Z么要有GCQ?/strong>

    GC是垃圾收集的意思(Gabage CollectionQ,内存处理是编Eh员容易出现问题的地方Q忘记或者错误的内存回收会导致程序或pȝ的不E_甚至崩溃Q?a target="_blank">Java提供的GC功能可以自动监测对象是否过作用域从而达到自动回收内存的目的Q?a target="_blank">Java语言没有提供释放已分配内存的昄操作Ҏ?/p>

    3.5  short s1 = 1Q?s1 = s1 + 1Q有什么错Q?short s1 = 1Q?s1 += 1Q有什么错Q?/strong>

    short s1 = 1Q?s1 = s1 + 1Q?Qs1+1q算l果是int型,需要强制{换类型)

    short s1 = 1Q?s1 += 1Q(可以正确~译Q?/p>

    3.6  Math.roundQ?1.5Q等於多? Math.roundQ?11.5Q等於多?

    Math.roundQ?1.5Q?=12

    Math.roundQ?11.5Q?=-11

    roundҎq回与参数最接近的长整数Q参数加1/2后求其floor.

    3.7  String s = new StringQ?xyz"Q;创徏了几个String ObjectQ?/strong>

    两个

    3.8  设计4个线E,其中两个U程每次对j增加1Q另外两个线E对j每次减少1.写出E序?/strong>

    以下E序使用内部cd现线E,对j增减的时候没有考虑序问题?/p>

package test;

public class ThreadTest1 {

         private int j;

         public static void main(String args[]) {

                   ThreadTest1 tt = new ThreadTest1();

                   Inc inc = tt.new Inc();

                   Dec dec = tt.new Dec();

                   for (int i = 0; i < 2; i++) {

                            Thread t = new Thread(inc);

                            t.start();

                            t = new Thread(dec);

                            t.start();

                   }

         }

         private synchronized void inc() {

                   j++;

                   System.out.println(Thread.currentThread().getName() + "-inc:" + j);

         }

         private synchronized void dec() {

                   j--;

                   System.out.println(Thread.currentThread().getName() + "-dec:" + j);

         }

         class Inc implements Runnable {

                   public void run() {

                            for (int i = 0; i < 3; i++) {

                                     inc();

                            }

                   }

         }

         class Dec implements Runnable {

                   public void run() {

                            for (int i = 0; i < 3; i++) {

                                     dec();

                            }

                   }

         }

}

    3.9  Java有没有gotoQ?/strong>

    Java中的保留字,现在没有在Java中用?/p>

    3.10  启动一个线E是用runQ)q是startQ)Q?/strong>

    启动一个线E是调用startQ)ҎQɾU程所代表的虚拟处理机处于可运行状态,q意味着它可以由JVM调度q执行。这q不意味着U程׃立即q行。runQ)Ҏ可以产生必须退出的标志来停止一个线E?/p>

drecry 2010-03-25 21:38 发表评论
]]>
java 面试题二(?http://www.aygfsteel.com/drecry/archive/2010/03/25/316586.htmldrecrydrecryThu, 25 Mar 2010 13:37:00 GMThttp://www.aygfsteel.com/drecry/archive/2010/03/25/316586.htmlhttp://www.aygfsteel.com/drecry/comments/316586.htmlhttp://www.aygfsteel.com/drecry/archive/2010/03/25/316586.html#Feedback0http://www.aygfsteel.com/drecry/comments/commentRss/316586.htmlhttp://www.aygfsteel.com/drecry/services/trackbacks/316586.html    HashMap是Hashtable的轻量实现Q非U程安全的实玎ͼQ他们都完成了Map接口Q主要区别在于HashMap允许I(nullQ键|keyQ,׃非线E?a class="channel_keylink" target="_blank">安全Q效率上可能高于Hashtable.

    HashMap允许null作ؓ一个entry的key或者valueQ而Hashtable不允许?/p>

    HashMap把Hashtable的containsҎL了,Ҏcontainsvalue和containsKey.因ؓcontainsҎҎ让h引v误解?/p>

    Hashtablel承自Dictionaryc,而HashMap?a class="channel_keylink" target="_blank">Java1.2引进的Map interface的一个实现?/p>

    最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是Q在多个U程讉KHashtableӞ不需要自׃ؓ它的Ҏ实现同步Q而HashMap 必Mؓ之提供外同步。Hashtable和HashMap采用的hash/rehash法都大概一P所以性能不会有很大的差异?/p>

    2.2  finalQ?finallyQ?finalize的区别?/strong>

    final 用于声明属性,Ҏ和类Q分别表C属性不可变Q方法不可覆盖,cM可ѝ?/p>

    finally是异常处理语句结构的一部分Q表CL执行?/p>

    finalize是Objectcȝ一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回Ӟ例如关闭文g{?/p>

    2.3  sleepQ) ?waitQ) 有什么区别?

    sleep是线E类QThreadQ的ҎQ导致此U程暂停执行指定旉Q给执行Zl其他线E,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁?/p>

    wait是ObjectcȝҎQ对此对象调用waitҎD本线E放弃对象锁Q进入等待此对象的等待锁定池Q只有针Ҏ对象发出notifyҎQ或notifyAllQ后本线E才q入对象锁定池准备获得对象锁q入q行状态?/p>

    2.4  Overload和Override的区别。Overloaded的方法是否可以改变返回值的cdQ?/strong>

    Ҏ的重写Overriding和重载Overloading?a class="channel_keylink" target="_blank">Java多态性的不同表现。重写Overriding是父cM子类之间多态性的一U表玎ͼ重蝲Overloading是一个类中多态性的一U表现。如果在子类中定义某Ҏ与其父类有相同的名称和参敎ͼ我们说该Ҏ被重?QOverridingQ。子cȝ对象使用q个ҎӞ调用子cM的定义,对它而言Q父cM的定义如同被"屏蔽"了。如果在一个类中定义了多个同名的方法,它们或有不同的参C数或有不同的参数cdQ则UCؓҎ的重载(OverloadingQ。Overloaded的方法是可以改变q回值的cd?/p>

    2.5  error和exception有什么区别?

    error 表示恢复不是不可能但很困隄情况下的一U严重问题。比如说内存溢出。不可能指望E序能处理这L情况?/p>

    exception 表示一U设计或实现问题。也是_它表C如果程序运行正常,从不会发生的情况?/p>

    2.6  同步和异步有何异同,在什么情况下分别使用他们QD例说明?/strong>

    如果数据在U程间共享。例如正在写的数据以后可能被另一个线E读刎ͼ或者正在读的数据可能已l被另一个线E写q了Q那么这些数据就是共享数据,必须q行同步存取?/p>

    当应用程序在对象上调用了一个需要花费很长时间来执行的方法,q且不希望让E序{待Ҏ的返回时Q就应该使用异步~程Q在很多情况下采用异步途径往往更有效率?/p>

    2.7  abstract class和interface有什么区别?

    声明Ҏ的存在而不d现它的类被叫做抽象类Qabstract classQ,它用于要创徏一个体现某些基本行为的c,qؓ该类声明ҎQ但不能在该cM实现该类的情c不能创建abstract cȝ实例。然而可以创Z个变量,其类型是一个抽象类Qƈ让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract cȝ子类为它们父cM的所有抽象方法提供实玎ͼ否则它们也是抽象cMؓ。取而代之,在子cM实现该方法。知道其行ؓ的其它类可以在类中实现这些方法?/p>

    接口QinterfaceQ是抽象cȝ变体。在接口中,所有方法都是抽象的。多l承性可通过实现q样的接口而获得。接口中的所有方法都是抽象的Q没有一个有E序体。接口只可以定义static final成员变量。接口的实现与子cȝ|除了该实现类不能从接口定义中l承行ؓ。当cd现特D接口时Q它定义Q即程序体l予Q所有这U接口的Ҏ。然后,它可以在实现了该接口的类的Q何对象上调用接口的方法。由于有抽象c,它允怋用接口名作ؓ引用变量的类型。通常的动态联~将生效。引用可以{换到接口cd或从接口cd转换Qinstanceof q算W可以用来决定某对象的类是否实现了接口?/p>

    2.8  heap和stack有什么区别?/strong>

    栈是一U线形集合,其添加和删除元素的操作应在同一D完成。栈按照后进先出的方式进行处理?/p>

    堆是栈的一个组成元素?/p>

    2.9  forward 和redirect的区?/strong>

    forward?a class="channel_keylink" target="_blank">服务?/a>h资源Q?a class="channel_keylink" target="_blank">服务?/a>直接讉K目标地址的URLQ把那个URL的响应内容读取过来,然后把这些内容再发给览器,览器根本不知道服务器发送的内容是从哪儿来的Q所以它的地址栏中q是原来的地址?/p>

    redirect是服务端根据逻辑Q发送一个状态码Q告诉浏览器重新去请求那个地址Q一般来说浏览器会用刚才h的所有参数重新请求,所以sessionQrequest参数都可以获取?/p>

    2.10  EJB与Java Bean的区别?

    Java Bean 是可复用的组Ӟ对Java Beanq没有严格的规范Q理ZԌM一个Javac都可以是一个Bean.但通常情况下,׃Java Bean是被容器所创徏Q如TomcatQ的Q所以Java Bean应具有一个无参的构造器Q另外,通常Java Beanq要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微YCOM模型中的本地q程内COMlgQ它是不能被跨进E访问的。Enterprise Java Bean 相当于DCOMQ即分布式组件。它是基于Java的远E方法调用(RMIQ技术的Q所以EJB可以被远E访问(跨进E、跨计算机)。但EJB必须被布|在诸如Webspere、WebLogicq样的容器中QEJB客户从不直接讉K真正的EJBlgQ而是通过其容器访问。EJB容器是EJBlg的代理,EJBlg由容器所创徏和管理。客户通过容器来访问真正的EJBlg?/p>

drecry 2010-03-25 21:37 发表评论
]]>
java 面试题一(?http://www.aygfsteel.com/drecry/archive/2010/03/25/316585.htmldrecrydrecryThu, 25 Mar 2010 13:35:00 GMThttp://www.aygfsteel.com/drecry/archive/2010/03/25/316585.htmlhttp://www.aygfsteel.com/drecry/comments/316585.htmlhttp://www.aygfsteel.com/drecry/archive/2010/03/25/316585.html#Feedback0http://www.aygfsteel.com/drecry/comments/commentRss/316585.htmlhttp://www.aygfsteel.com/drecry/services/trackbacks/316585.html    1.抽象Q?/strong>

    抽象是忽略一个主题中与当前目标无关的那些斚wQ以便更充分地注意与当前目标有关的方面。抽象ƈ不打了解全部问题,而只是选择其中的一部分Q暂时不用部分细节。抽象包括两个方面,一是过E抽象,二是数据抽象?/p>

    2.l承Q?/strong>

    l承是一U联l类的层ơ模型,q且允许和鼓q的重用,它提供了一U明表q共性的Ҏ。对象的一个新cd以从现有的类中派生,q个q程UCؓcȝѝ新cȝ承了原始cȝҎ,新类UCؓ原始cȝzc(子类Q,而原始类UCؓ新类的基c(父类Q。派生类可以从它的基c那里承方法和实例变量Qƈ且类可以修改或增加新的方法之更适合Ҏ的需要?/p>

    3.装Q?/strong>

    装是把q程和数据包围v来,Ҏ据的讉K只能通过已定义的界面。面向对象计始于这个基本概念,即现实世界可以被描绘成一pd完全自治、封装的对象Q这些对象通过一个受保护的接口访问其他对象?/p>

    4.多态性:

    多态性是指允怸同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语ah灉|、抽象、行为共享、代码共享的优势Q很好的解决了应用程序函数同名问题?/p>

    二、String是最基本的数据类型吗Q?/strong>

    基本数据cd包括byte、int、char、long、float、double、boolean和short.  java.lang.StringcLfinalcd的,因此不可以承这个类、不能修改这个类。ؓ了提高效率节省空_我们应该用StringBuffercR?/p>

    三、int ?Integer 有什么区别?

    Java 提供两种不同的类型:引用cd和原始类型(或内|类型)。int?a class="channel_keylink" target="_blank">Java的原始数据类型,Integer是Java为int提供的封装类。Java为每个原始类型提供了装cR?/p>

    原始cd装c?/p>

    boolean Boolean

    char Character

    byte Byte

    short Short

    int Integer

    long Long

    float Float

    double Double

    引用cd和原始类型的行ؓ完全不同Qƈ且它们具有不同的语义。引用类型和原始cdh不同的特征和用法Q它们包括:大小和速度问题Q这U类型以哪种cd的数据结?a class="channel_keylink" target="_blank">存储Q当引用cd和原始类型用作某个类的实例数据时所指定的缺省倹{对象引用实例变量的~省gؓ nullQ而原始类型实例变量的~省g它们的类型有兟?/p>

    四、String 和StringBuffer的区别?

    Javaq_提供了两个类QString和StringBufferQ它们可以储存和操作字符Ԍ卛_含多个字W的字符数据。这个StringcL供了数g可改变的字符丌Ӏ而这个StringBuffercL供的字符串进行修攏V当你知道字W数据要改变的时候你可以用StringBuffer.典型圎ͼ你可以用StringBuffer来动态构造字W数据?/p>

    五、运行时异常与一般异常有何异同?

    异常表示E序q行q程中可能出现的非正常状态,q行时异常表C拟机的通常操作中可能遇到的异常Q是一U常见运行错误。Java~译器要求方法必d明抛出可能发生的非运行时异常Q但是ƈ不要求必d明抛出未被捕Lq行时异常?/p>      六、说出Servlet的生命周期,q说出Servlet和CGI的区别?

    Servlet?a class="channel_keylink" target="_blank">服务?/a>实例化后Q容器运行其initҎQ请求到达时q行其serviceҎQserviceҎ自动zNq行与请求对应的doXXXҎQdoGetQdoPostQ等Q当服务?/a>军_实例销毁的时候调用其destroyҎ?/p>

    与CGI的区别在于Servlet处于服务器进E中Q它通过多线E方式运行其serviceҎQ一个实例可以服务于多个hQƈ且其实例一般不会销毁,而CGIҎ个请求都产生新的q程Q服务完成后销毁,所以效率上低于CGI.

    七、说出ArrayListQVectorQ?LinkedList?a class="channel_keylink" target="_blank">存储性能和特?/strong>

    ArrayList和Vector都是使用数组方式存储数据Q此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素Q但是插入元素要涉及数组元素Ud{内存操作,所以烦引数据快而插入数据慢QVector׃使用了synchronizedҎQ线E?a class="channel_keylink" target="_blank">安全Q,通常性能上较ArrayList差,而LinkedList使用双向链表实现存储Q按序号索引数据需要进行前向或后向遍历Q但是插入数据时只需要记录本的前后即可,所以插入速度较快?/p>

    八、EJB是基于哪些技术实现的Qƈ说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别?/strong>

    EJB包括Session Bean、Entity Bean、Message Driven BeanQ基于JNDI、RMI、JAT{技术实现?/p>

    SessionBean在J2EE应用E序中被用来完成一些服务器端的业务操作Q例如访问数据库、调用其他EJBlg。EntityBean被用来代表应用系l中用到的数据?/p>

    对于客户机,SessionBean是一U非持久性对象,它实现某些在服务器上q行的业务逻辑?/p>

    对于客户机,EntityBean是一U持久性对象,它代表一个存储在持久性存储器中的实体的对象视图,或是一个由现有企业应用E序实现的实体?/p>

    Session Bean q可以再l分?Stateful Session Bean ?Stateless Session Bean Q这两种?Session Bean都可以将pȝ逻辑攑֜ method之中执行Q不同的?Stateful Session Bean 可以记录呼叫者的状态,因此通常来说Q一个用者会有一个相对应?Stateful Session Bean 的实体。Stateless Session Bean 虽然也是逻辑lgQ但是他却不负责记录使用者状态,也就是说当用者呼?Stateless Session Bean 的时候,EJB Container q不会找ȝ定的 Stateless Session Bean 的实体来执行q个 method.换言之,很可能数个用者在执行某个 Stateless Session Bean ?methods Ӟ会是同一?Bean ?Instance 在执行。从内存斚w来看Q?Stateful Session Bean ?Stateless Session Bean 比较Q?Stateful Session Bean 会消?J2EE Server 较多的内存,然?Stateful Session Bean 的优势却在于他可以维持用者的状态?/p>

    九、Collection ?Collections的区别?/strong>

    Collection是集合类的上U接口,l承与他的接口主要有Set 和List.

    Collections是针寚w合类的一个帮助类Q他提供一pd静态方法实现对各种集合的搜索、排序、线E?a class="channel_keylink" target="_blank">安全化等操作?/p>

    十?amp;?amp;&的区别?/strong>

    &是位q算W,表示按位与运,&&是逻辑q算W,表示逻辑与(andQ?/p>

drecry 2010-03-25 21:35 发表评论
]]>
JVM,JRE,JDK到底是个什么样的关p??http://www.aygfsteel.com/drecry/archive/2010/03/25/316583.htmldrecrydrecryThu, 25 Mar 2010 13:13:00 GMThttp://www.aygfsteel.com/drecry/archive/2010/03/25/316583.htmlhttp://www.aygfsteel.com/drecry/comments/316583.htmlhttp://www.aygfsteel.com/drecry/archive/2010/03/25/316583.html#Feedback0http://www.aygfsteel.com/drecry/comments/commentRss/316583.htmlhttp://www.aygfsteel.com/drecry/services/trackbacks/316583.html  我们在安装好JDK后就可以惌成我们已l买了一台安装好软g的新的电脑?/p>

  JVM : Java Virtual Machine(Java虚拟? 。所?#8220;虚拟?#8221;֐思义是模拟出来的东ѝ就像是我们在用电脑看电视,但是电脑里ƈ没有像电视机里面一Lg支持Q但是我们仍然可以从电脑里接受电视台的节目。那是因为我们编写了一个可以模拟电视机g工作的Y件运行在电脑的^C面的原因。同样JVM是模拟了电脑的gQ它同样有着像CPU一样可以执行代码的功能。它的实现具体有Q指令集 寄存器组 cL件格??垃圾攉?内存区。可以把它理解成是专门用来执行JavaE序的一台机器。也是说JVM提供了Java执行的硬件^台。JVM上执行的代码都存攑֜ .CLASS 文g中。JVM只执行字节码文g?/p>

  JRE : Java Runtime Environment(Javaq行环境)。就是可以运行JavaE序的地斏V就像是我们要在电脑上运行一个视频Y件的时候必dWindos或者是Linux{操作系l上一栗那我们可以把它看做是一个操作系l。也是说JRE提供了Java执行的Y件^台。在q行Java的过E中除了需要有JVM执行Java代码q个动作外,q需要Java API(Application Programming Interface,应用~程接口)说简单的是“cd”。JavaE序在运行中没有q些API是不行的Q所以JRE包含JVM?/p>

  JDK : Java Development ToolKit(Java开发工具包)。我们有了硬件和软g两个q_后就可以做我们自己想做的事情了。JDK是我们用来做事情的工具Q它包括JREq有其他工具。我们所说版本的不同Q也是说它里面的工h差异。就像是你不同的工具里攄不同的工具一栗D个例子:最常用的一个就是javac,它是?java的文件翻译成.class文g的工兗然后让JVM来执?class文g中的字节码?像电脑的CPU只认??的道?

  如果一台计机的需求只是运行JavaE序Q而不是去~写JavaE序的时候,它只需要安装JRE可以了。现在大家知道JVM JRE JDKQ这些东西到底是什么了吧?/p>

drecry 2010-03-25 21:13 发表评论
]]>
java 异常处理Q{Q?/title><link>http://www.aygfsteel.com/drecry/archive/2010/03/20/316020.html</link><dc:creator>drecry</dc:creator><author>drecry</author><pubDate>Sat, 20 Mar 2010 08:12:00 GMT</pubDate><guid>http://www.aygfsteel.com/drecry/archive/2010/03/20/316020.html</guid><wfw:comment>http://www.aygfsteel.com/drecry/comments/316020.html</wfw:comment><comments>http://www.aygfsteel.com/drecry/archive/2010/03/20/316020.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/drecry/comments/commentRss/316020.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/drecry/services/trackbacks/316020.html</trackback:ping><description><![CDATA[    摘要Q本文从<a class="channel_keylink" target="_blank">Java</a>异常最基本的概c语法开始讲qC<a class="channel_keylink" target="_blank">Java</a>异常处理的基本知识,分析了Java异常体系l构Q对比Spring的异常处理框Ӟ阐述了异常处理的基本原则。ƈ且作者提Z自己处理一个大型应用系l异常的思想Qƈ通过设计一个异常处理的框架来论q此思想?br /> <br />      <strong><font color="#0000ff">一?nbsp;异常的概念和Java异常体系l构</font></strong> <p>    异常是程序运行过E中出现的错误。本文主要讲授的是Java语言的异常处理。Java语言的异常处理框Ӟ是Java语言健壮性的一个重要体现?/p> <p>    Java把异常当作对象来处理Qƈ定义一个基cjava.lang.Throwable作ؓ所有异常的类。在Java API中已l定义了许多异常c,q些异常cdZ大类Q错误Error和异常Exception。Java异常体系l构呈树Ӟ其层ơ结构图如图 1所C:</p> <p> </p> <p align="center"><img src="http://java.chinaitlab.com/UploadFiles_8734/200806/20080602165248596.jpg" alt="" /></p> <br />  ThorwablecL有异常和错误的超c,有两个子cError和ExceptionQ分别表C错误和异常。其中异常类Exception又分行时异常(RuntimeException)和非q行时异常,q两U异常有很大的区别,也称之ؓ不检查异常(Unchecked ExceptionQ和查异常(Checked ExceptionQ。下面将详细讲述q些异常之间的区别与联系Q? <p>    <strong>1、Error与Exception</strong></p> <p>    Error是程序无法处理的错误Q比如OutOfMemoryError、ThreadDeath{。这些异常发生时QJava虚拟机(JVMQ一般会选择U程l止?/p> <p>    Exception是程序本w可以处理的异常Q这U异常分两大c运行时异常和非q行时异常。程序中应当可能去处理q些异常?/p> <p>   <strong> 2、运行时异常和非q行时异?/strong></p> <p>    q行时异帔R是RuntimeExceptioncd其子cd常,如NullPointerException、IndexOutOfBoundsException{,q些异常是不查异常,E序中可以选择捕获处理Q也可以不处理。这些异怸般是q序逻辑错误引v的,E序应该从逻辑角度可能避免这cd常的发生?/p> <p>    非运行时异常是RuntimeException以外的异常,cd上都属于Exceptioncd其子cR从E序语法角度讲是必须q行处理的异常,如果不处理,E序׃能编译通过。如IOException、SQLException{以及用戯定义的Exception异常Q一般情况下不自定义查异常?br />  二?nbsp;异常的捕获和处理 </p> <p>    Java异常的捕获和处理是一个不Ҏ把握的事情,如果处理不当Q不但会让程序代码的可读性大大降低,而且Dpȝ性能低下Q甚臛_发一些难以发现的错误?/p> <p>    Java异常处理涉及C个关键字Q分别是Qtry、catch、finally、throw、throws。下面将骤一介绍Q通过认识q五个关键字Q掌握基本异常处理知识?/p> <p> <strong>   1?nbsp;异常处理的基本语?br /> </strong>    在java中,异常处理的完整语法是Q?br />     <table bordercolor="#cccccc" cellspacing="0" cellpadding="1" width="80%" align="center" bgcolor="#ffffff" border="1" heihgt=""> <tbody> <tr> <td> try{<br />       //Q尝试运行的Q程序代?br />     }catch(异常cd 异常的变量名){<br />       //异常处理代码<br />     }finally{<br />       //异常发生Q方法返回之前,L要执行的代码<br />     }</td> </tr> </tbody> </table> </p> <p>    以上语法有三个代码块Q?br />     try语句块,表示要尝试运行代码,try语句块中代码受异常监控,其中代码发生异常Ӟ会抛出异常对象?/p> <p>    catch语句块会捕获try代码块中发生的异常ƈ在其代码块中做异常处理,catch语句带一个Throwablecd的参敎ͼ表示可捕获异常类型。当try中出现异常时Qcatch会捕获到发生的异常,q和自己的异常类型匹配,若匹配,则执行catch块中代码Qƈcatch块参数指向所抛的异常对象。catch语句可以有多个,用来匚w多个中的一个异常,一旦匹配上后,׃再尝试匹配别的catch块了。通过异常对象可以获取异常发生时完整的JVM堆栈信息Q以及异怿息和异常发生的原因等?/p> <p>    finally语句块是紧跟catch语句后的语句块,q个语句块L会在Ҏq回前执行,而不是否try语句块是否发生异常。ƈ且这个语句块L在方法返回前执行。目的是l程序一个补救的Z。这样做也体CJava语言的健壮性?/p> <p>  <strong>  2?nbsp;try、catch、finally三个语句块应注意的问?br /> </strong>    W一、try、catch、finally三个语句块均不能单独使用Q三者可以组?try...catch...finally、try...catch、try...finally三种l构Qcatch语句可以有一个或多个Qfinally语句最多一个?br />     W二、try、catch、finally三个代码块中变量的作用域Z码块内部Q分别独立而不能相互访问。如果要在三个块中都可以讉KQ则需要将变量定义到这些块的外面?br />     W三、多个catch块时候,只会匚w其中一个异常类q执行catch块代码,而不会再执行别的catch块,q且匚wcatch语句的顺序是׃C?/p> <p>    <strong>3、throw、throws关键?br /> </strong>    throw关键字是用于Ҏ体内部,用来抛出一个Throwablecd的异常。如果抛Z查异常,则还应该在方法头部声明方法可能抛出的异常cd。该Ҏ的调用者也必须查处理抛出的异常。如果所有方法都层层上抛获取的异常,最lJVM会进行处理,处理也很单,是打印异常消息和堆栈信息。如果抛出的是Error或RuntimeExceptionQ则该方法的调用者可选择处理该异常。有兛_常的转译会在下面说明?/p> <p>    throws关键字用于方法体外部的方法声明部分,用来声明Ҏ可能会抛出某些异常。仅当抛Z查异常,该方法的调用者才必须处理或者重新抛异常。当Ҏ的调用者无力处理该异常的时候,应该l箋抛出Q而不是囫囵吞枣一般在catch块中打印一下堆栈信息做个勉强处理。下面给Z个简单例子,看看如何使用q两个关键字Q?br />         <table bordercolor="#cccccc" cellspacing="0" cellpadding="1" width="80%" align="center" bgcolor="#ffffff" border="1" heihgt=""> <tbody> <tr> <td> public static void test3() throws Exception{<br />       //抛出一个检查异?br />             throw new Exception("Ҏtest3中的Exception");<br />         } <p>    3?nbsp;ThrowablecM的常用方?br />     getCause()Q返回抛出异常的原因。如?cause 不存在或未知Q则q回 null?br />     getMessage()Q返回异常的消息信息?br />     printStackTrace()Q对象的堆栈跟踪输出至错误输出流Q作为字D?System.err 的倹{?/p> </td> </tr> </tbody> </table> </p> <p><br />  三?nbsp;异常处理的一般原?</p> <p>    1?nbsp;能处理就早处理,抛出不去q不能处理的想法消化掉或者{换ؓRuntimeException处理。因为对于一个应用系l来_抛出大量异常是有问题的,应该从程序开发角度尽可能的控制异常发生的可能?br />     2?nbsp;对于查异常,如果不能行之有效的处理,q不如{换ؓRuntimeException抛出。这样也让上层的代码有选择的余地――可处理也可不处理?br />     3?nbsp;对于一个应用系l来_应该有自q一套异常处理框Ӟq样当异常发生时Q也能得到统一的处理风|优雅的异常信息反馈l用戗?/p> <p>    <strong><font color="#0000ff">四?nbsp;异常的{译与异常?/font></strong></p> <p>    <strong>1、异常{译的原理</strong></p> <p>    所谓的异常转译是一U异常{换另一U新的异常,也许q种新的异常更能准确表达E序发生异常?/p> <p>    在Java中有个概念就是异常原因,异常原因D当前抛出异常的那个异常对象,几乎所有带异常原因的异常构造方法都使用Throwablecd做参敎ͼq也׃ؓ异常的{译提供了直接的支持,因ؓM形式的异常和错误都是Throwable的子cR比如将SQLException转换为另外一个新的异常DAOExceptionQ可以这么写Q?/p> <p>    先自定义一个异常DAOExceptionQ?/p> <p>     <table bordercolor="#cccccc" cellspacing="0" cellpadding="1" width="80%" align="center" bgcolor="#ffffff" border="1" heihgt=""> <tbody> <tr> <td> public class DAOException extends RuntimeException {<br />      //(省略了部分代?<br />         public DAOException(String message, Throwable cause) {<br />             super(message, cause);<br />         }<br />     }</td> </tr> </tbody> </table>     比如有一个SQLExceptioncd的异常对象eQ要转换为DAOExceptionQ可以这么写Q?/p> <p>    DAOException daoEx = new DAOException ( "SQL异常", e);</p> <p>    异常转译是针Ҏ有承Throwable类的类而言的,从编E的语法角度Ԍ其子cM间都可以怺转换。但是,从合理性和pȝ设计角度考虑Q可异常分Zc:Error、Exception、RuntimeExceptionQ笔者认为,合理的{译关pd应该如图 2Q?/p> <p>   </p> <p align="center"><img onmousewheel="return bbimg(this)" height="222" src="http://java.chinaitlab.com/UploadFiles_8734/200806/20080602165616877.jpg" width="337" onload="javascript:resizepic(this)" border="0" alt="" /></p> <p class="MsoCaption" style="margin: 0cm 0cm 0pt; text-align: center" align="center"><a name="_Ref197949474"><font size="2"><span style="font-family: 黑体; mso-ascii-font-family: Arial">?/span><font face="Arial"> </font></font></a><font size="2"><font face="Arial"><span style="mso-bookmark: _Ref197949474"><span lang="EN-US"><span style="mso-no-proof: yes">2</span></span></span><span lang="EN-US"> </span></font><span style="font-family: 黑体; mso-ascii-font-family: Arial">异常转译</span></font></p> <p>    Z么要q么做呢Q笔者认为,异常的处理存在着一套哲学思想Q?strong>对于一个应用系l来_pȝ所发生的Q何异常或者错误对操作用户来说都是pȝ"q行?异常Q都是这个应用系l内部的异常。这也是异常转译和应用系l异常框架设计的指导原则?/strong>在系l中大量处理非检查异常的负面影响很多Q最重要的一个方面就是代码可L降低,E序~写复杂Q异常处理的代码也很苍白无力。因此,很有必要这些检查异常Exception和错误Error转换为RuntimeException异常Q让E序员根据情冉|军_是否捕获和处理所发生的异常?/p> <p>  <strong>  图中的三条线标识转换的方向,分三U情况:</strong></p> <p>    ①:Error到ExceptionQ将错误转换为异常,ql抛出。例如Spring WEB框架中,org.springframework.web.servlet.DispatcherServlet的doDispatch()Ҏ中,捕L错误转译Z个NestedServletException异常。这样做的目的是Z最大限度挽回因错误发生带来的负面媄响。因Z个Error常常是很严重的错误,可能会引Ll挂赗?/p> <p>    ②:Exception到RuntimeExceptionQ将查异常{换ؓRuntimeException可以让程序代码变得更优雅Q让开发h员集中经理设计更合理的程序代码,反过来也增加了系l发生异常的可能性?/p> <p>    ③:Error到RuntimeExceptionQ目的还是一L。把所有的异常和错误{译ؓ不检查异常,q样可以让代码更为简z,q有利于寚w误和异常信息的统一处理?/p> <p>    <strong>1?nbsp;异常?/strong></p> <p>    异常N名思义是异常发生的原因一个传一个串hQ即把底层的异常信息传给上层Q这样逐层抛出。Java API文档中给Z一个简单的模型Q?/p> <p>    <table bordercolor="#cccccc" cellspacing="0" cellpadding="1" width="80%" align="center" bgcolor="#ffffff" border="1" heihgt=""> <tbody> <tr> <td> try {<br />      lowLevelOp();<br />     } catch (LowLevelException le) {<br />      throw (HighLevelException)<br />       new HighLevelException().initCause(le);<br />     }</td> </tr> </tbody> </table> </p> <p>    当程序捕获到了一个底层异常leQ在处理部分选择了l抛Z个更高别的新异常给此方法的调用者。这样异常的原因׃逐层传递。这P位于高层的异帔R归调用getCause()ҎQ就可以遍历各层的异常原因。这是Java异常铄原理。异帔R的实际应用很,发生异常时候逐层上抛不是个好注意Q上层拿到这些异常又能奈之何Q而且异常逐层上抛会消耗大量资源,因ؓ要保存一个完整的异常链信?/p> <p><br /> <strong><font color="#0033ff">  五?nbsp;设计一个高效合理的异常处理框架</font></strong> </p> <p>    对于一个应用系l来_发生所有异常在用户看来都是应用pȝ内部的异常。因此应该设计一套应用系l的异常框架Q以处理pȝq行q程中的所有异常?/p> <p>    Zq种观点Q可以设计一个应用系l的异常比如叫做AppException。ƈ且对用户来说Q这些异帔R是运行应用系l运行时发生的,因此AppException应该l承RuntimeExceptionQ这Ll中所有的其他异常都{译ؓAppExceptionQ当异常发生的时候,前端接收到AppExcetpionq做l一的处理。画出异常处理框架如?3 Q?/p> <p>   </p> <p align="center"><img src="http://java.chinaitlab.com/UploadFiles_8734/200806/20080602165812436.jpg" alt="" /></p> <p class="MsoCaption" style="margin: 0cm 0cm 0pt; text-align: center" align="center"><a name="_Ref197949559"><font size="2"><span style="font-family: 黑体; mso-ascii-font-family: Arial">?/span><font face="Arial"> </font></font></a><font size="2"><font face="Arial"><span style="mso-bookmark: _Ref197949559"><span lang="EN-US"><span style="mso-no-proof: yes">3</span></span></span><span style="mso-bookmark: _Ref197949559"><span lang="EN-US"> </span></span></font><span style="mso-bookmark: _Ref197949559"><span style="font-family: 黑体; mso-ascii-font-family: Arial">一个应用系l的异常处理框架</span></span></font></p> <p>    在这个设计图中,AppRuntimeException是系l异常的基类Q对外只抛出q个异常Q这个异常可以由前端Q客LQ接收处理,当异常发生时Q客L的相关组件捕获ƈ处理q些异常Q将"友好"的信息展C给客户?/p> <p>    在AppRuntimeException下层Q有各种各样的异常和错误Q最l都转译为AppRuntimeExceptionQAppRuntimeException下面q可以设计一些别的子cd常,比如AppDAOException、OtherException{,q些都根据实际需要灵zd理。在往下就是如何将捕获的原始异常比如SQLException、HibernateException转换为更高一点AppDAOException?/p> <p>    有关异常框架设计q方面公认比较好的就是SpringQSpring中的所有异帔R可以用org.springframework.core.NestedRuntimeException来表C,q且该基cȝ承的是RuntimeException。Spring框架很庞大,因此设计了很多NestedRuntimeException的子c,q有异常转换的工Pq些都是非常优秀的设计思想?/p> <p><strong><font color="#0000ff">    六?nbsp;Java异常处理ȝ</font></strong></p> <p>    <strong>回顾全文Qȝ一下Java异常处理的要点:</strong></p> <p>    1?nbsp;异常是程序运行过E过E出现的错误Q在Java中用cL描述Q用对象来表C具体的异常。Java其区分为Error与ExceptionQError是程序无力处理的错误QException是程序可以处理的错误。异常处理是ZE序的健壮性?br />     2?nbsp;Java异常cL自于Java API定义和用h展。通过l承Java API异常cd以实现异常的转译?br />     3?nbsp;异常能处理就处理Q不能处理就抛出Q最l没有处理的异常JVM会进行处理?br />     4?nbsp;异常可以传播Q也可以怺转译Q但应该Ҏ需要选择合理的异常{译的方向?br />     5?nbsp;对于一个应用系l,设计一套良好的异常处理体系很重要。这一点在pȝ设计的时候就应该考虑到?br /> </p> <img src ="http://www.aygfsteel.com/drecry/aggbug/316020.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/drecry/" target="_blank">drecry</a> 2010-03-20 16:12 <a href="http://www.aygfsteel.com/drecry/archive/2010/03/20/316020.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Q{Qjava 学习Q,从入门到_N?/title><link>http://www.aygfsteel.com/drecry/archive/2009/06/01/279447.html</link><dc:creator>drecry</dc:creator><author>drecry</author><pubDate>Mon, 01 Jun 2009 11:10:00 GMT</pubDate><guid>http://www.aygfsteel.com/drecry/archive/2009/06/01/279447.html</guid><wfw:comment>http://www.aygfsteel.com/drecry/comments/279447.html</wfw:comment><comments>http://www.aygfsteel.com/drecry/archive/2009/06/01/279447.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/drecry/comments/commentRss/279447.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/drecry/services/trackbacks/279447.html</trackback:ping><description><![CDATA[<div class="wmqeeuq" id="message1200013" class="t_msgfont">转自:http://forum.hibernate.org.cn<br /> 作?robbin<br /> Java Learning Path Q一Q、工L <br /> 一?JDK (Java Development Kit) <br /> <br /> JDK是整个Java的核心,包括了Javaq行环境QJava Runtime EnvirnmentQ,一堆Java工具和Java基础的类?rt.jar)。不Z么Java应用服务器实质都是内|了某个版本的JDK。因此掌? JDK是学好Java的第一步。最L的JDK是Sun公司发布的JDKQ除了Sun之外Q还有很多公司和l织都开发了自己的JDKQ例如IBM公司开? 的JDKQBEA公司的JrocketQ还有GNUl织开发的JDK{等。其中IBM的JDK包含的JVMQJava Virtual MachineQ运行效率要比Sun JDK包含的JVM高出许多。而专门运行在x86q_的Jrocket在服务端q行效率也要比Sun JDK好很多。但不管怎么_我们q是需要先把Sun JDK掌握好?<br /> <br /> 1?JDK的下载和安装 <br /> JDK又叫做J2SEQJava2 SDK Standard EditionQ,可以从Sun的Java|站上下载到Qhttp://java.sun.com/j2se/downloads.html QJDK当前最新的版本是J2SDK1.4.2Q徏议下载该版本的JDKQ下载页面在q里Qhttp://java.sun.com/j2se /1.4.2/download.html?<br /> <br /> 下蝲好的JDK是一个可执行安装E序Q默认安装完毕后会在C:\Program Files\Java\目录下安装一套JREQ供览器来使用Q,在C:\j2sdk1.4.2下安装一套JDKQ也包括一套JREQ。然后我们需要在? 境变量PATH的最前面增加java的\径C:\j2sdk1.4.2\bin。这样JDK安装好了?<br /> <br /> 2?JDK的命令工?<br /> JDK的最重要命o行工P <br /> javaQ?启动JVM执行class <br /> javacQ?Java~译?<br /> jarQ?Java打包工具 <br /> javadocQ?Java文档生成?<br /> q些命o行必要非常非常熟悉Q对于每个参数都要很_N才行。对于这些命令的学习QJDK Documentation上有详细的文档?<br /> <br /> <br /> 二?JDK Documentation <br /> <br /> Documentation在JDK的下载页面也有下载连接,同时下蝲Documentation。Documentation是最最重要的编E手 册,늛了整个Java所有方面的内容的描q。可以这栯Q学习Java~程Q大部分旉都是花在看这个Documentation上面的。我是随w携? 的,写Java代码的时候,随时查看Q须臾不L?<br /> <br /> <br /> 三?应用服务?App Server) <br /> <br /> App Server是运行Java企业lg的^収ͼ构成了应用Y件的主要q行环境。当前主的App Server是BEA公司的Weblogic Server和IBM公司的Websphere以及免费的JbossQ选择其中一个进行学习就可以了,个h推荐WeblogicQ因为它的体pȝ构更加干 净Q开发和部v更加方便Q是Java企业软g开发h员首选的开发^台。下面简要介l几U常用的App ServerQ?<br /> <br /> 1?Tomcat <br /> Tomcat严格意义上ƈ不是一个真正的App ServerQ它只是一个可以支持运行Serlvet/JSP的Web容器Q不qTomcat也扩展了一些App Server的功能,如JNDIQ数据库q接池,用户事务处理{等。Tomcat被非常广泛的应用在中规模的Java Web应用中,因此本文做一点下载、安装和配置Tomcat的介l: <br /> <br /> Tomcat是Apachel织下Jakarta目下的一个子目Q它的主|站是:http://jakarta.apache.org/tomcat / QTomcat最新版本是Tomcat4.1.27QY件下载的q接是:http://www.apache.org/dist/jakarta /tomcat-4/binaries/ ?<br /> <br /> 下蝲Tomcat既可以直接下载zip包,也可以下载exe安装包(个hzip更干净些)Q不哪U情况,下蝲完毕安装好以后(zip直接解压~就可以了)。需要设|两个环境变量: <br /> <br /> JAVA_HOME=C:\j2sdk1.4.2 <br /> CATALINA_HOME=D:\tomcat4 (你的Tomcat安装目录) <br /> <br /> q样安装好了,启动Tomcatq行CATALINA_HOME\bin\startup.batQ关闭Tomcatq行shutdown.bat? 本。Tomcat启动以后Q默认?080端口Q因此可以用览器访问http://localhost:8080来测试Tomcat是否正常启动? <br /> <br /> Tomcat提供了两个Web界面的管理工PURL分别是: <br /> http://localhost:8080/admin/index.jsp <br /> http://localhost:8080/manager/html <br /> 在启用这两个理工具之前Q先需要手工配|一下管理员用户和口令。用一个文本工h开CATALINA_HOME\conf\tomcat-users.xmlq个文gQ加入如下几行: <br /> <br /> <role rolename="manager"/>; <br /> <role rolename="admin"/>; <br /> <user username="robbin" password="12345678" roles="admin,manager,tomcat"/>; <br /> <br /> q样用户“robbin”具备了񔽎理员权限。重新启动Tomcat以后Q你可以用该用户来登陆如上的两个理工具Q通过Web方式q行Tomcat的配|和理了?<br /> <br /> 2?BEA Weblogic <br /> Weblogic可以到BEA的网站上免费注册之后下蝲到最新的Weblogic8.1企业版,License可以免费使用1q时_其实q已l完全? 了。Weblogic的下载连接:http://commerce.bea.com/index.jspQWeblogic的在U文档:http: //edocs.bea.com/ ?<br /> <br /> 3?IBM Webshpere <br /> Websphere同样可以下蝲到免费的试用版本Q到IBM的developerWorks|站可以看到Websphere试用产品的下载和相关? Websphere的资料,developerWorks中文|站的连接是Qhttp://www-900.ibm.com /developerWorks/cn/wsdd/ QWebsphere的下载连接:http://www7b.software.ibm.com/wsdd/downloads /WASsupport.html ?<br /> <br /> 4?Jboss <br /> Jboss是免费开源的App ServerQ可以免费的从Jboss|站下蝲Qhttp://www.jboss.org/index.htmlQ然而Jboss的文档是不免费,需? 花钱购买Q所以ؓ我们学习Jboss讄了一定的障碍。在Jdon上有几篇不错的Jboss配置文档Q可以用来参 考:http://www.jdon.com/idea.html <br /> <br /> <br /> 四?Java应用的运行环?<br /> <br /> Java的应用可以简单分Z下几个方面: <br /> <br /> 1?Java的桌面应?<br /> 桌面应用一般仅仅需要JRE的支持就_了?<br /> <br /> 2?Java Web应用 <br /> Java的Web应用臛_需要安装JDK和一个web容器Q例如TomcatQ,以及一个多用户数据库,Web应用臛_分ؓ三层Q?<br /> Browser层:览器显C用户页?<br /> Web层:q行Servlet/JSP <br /> DB层:后端数据库,向JavaE序提供数据讉K服务 <br /> <br /> 3?Java企业U应?<br /> 企业U应用比较复杂,可以扩展到n层,最单情况会分ؓ4层: <br /> Browser层:览器显C用户页?<br /> Client层:Java客户端图形程序(或者嵌入式讑֤的程序)直接和Web层或者EJB层交?<br /> Web层:q行Servlet/JSP <br /> EJB层:q行EJBQ完成业务逻辑q算 <br /> DB层:后端数据库,向JavaE序提供数据讉K服务 <br /> <br /> 4?Java嵌入式应?<br /> Java嵌入式应用是一个方兴未艄领域Q从事嵌入式开发,需要从Sun下蝲J2ME开发包QJ2ME包含了嵌入式讑֤专用虚拟机KVMQ和普通的JDK中包含的JVM有所不同。另外还需要到特定的嵌入式厂商那里下蝲模拟器?<br /> <br /> <br /> Java Learning PathQ二Q、书c篇 <br /> <br /> 学习一门新的知识,不可能指望只看一本,或者两本书p够完全掌握。需要有一个@序渐q的阅读q程。我推荐Oreilly出版的Javapd书籍?<br /> <br /> 在这里我只想补充一点看法,很多人学习Java是从《Thinking in Java》这本书入手的,但是我认本书是不适合初学者的。我认ؓ正确的用这本书的方法应该是作ؓ辅助的读物。《Thinking in Java》ƈ不是在完整的介绍Java的整个体p,而是一U蟩跃式的写作方法,是一U类似tips的方法来对Java很多知识点进行了深入的分析和解释? <br /> <br /> 对于初学者来_最好是找一本Java入门的书c,但是比较完整的@序的介绍Java的语法,面向对象的特性,核心cd{等Q在看这本书的同Ӟ 可以同步来看《Thinking in Java》,来加深对Java的理解和原理的运用,同时又可以完整的了解Java的整个体pR?<br /> <br /> 对于Java的入门书c,蔡学镛推荐的是Oreilly的《Exploring Java, 2nd Edition?或者《Java in a Nutshell,2nd EditionQ针对C++背景Q》,我ƈ没有看过q两本书。其实我觉得电子工业出版C《Java 2~程详解》或者《Java 2从入门到_N》就很不错?<br /> <br /> 在所有的Java书籍当中Q其实最最有用的,q不是O'reilly?Java SerialsQ真正最最有用处是JDK的DocumentationQ几乎你惌得的所有的知识在Documentation里面全部都有Q其中最主要 的部分当然是Java基础cd的API文档Q是按照package来组l的Q对于每一个class都有详细的解释,它的l承关系Q是否实C某个接口Q? 常用在哪些场合,q可以查到它所有的public的属性和ҎQ每个属性的解释Q意义,每个Ҏ的用途,调用的参敎ͼ参数的意义,q回值的cdQ以及方? 可能抛出的异常等{。可以这h_所有关于Java~程斚w的书c其实都不过是在用比较通俗易懂的语aQ和良好的组l方式来介绍 Documentation里面的某个package里面包含的一些类的用法而已。所以万变不d宗,如果你有_的能力来直接通过 Documentation来学习Java的类库,那么基本上就不需要看其他的书c了。除此之外,Documentation也是~程必备的手册,我的? 面上有三个Documentation的快h式,分别是J2SDK1.4.1的DocumentationQServlet2.3? Documentation和J2SDKEE1.3.1的Documentation。有了这个三个DocumentationQ什么其他的书籍都不需? 了?<br /> <br /> 对于Java Web ~程来说Q最核心的是要熟悉和掌握HTTP协议Q这个就和Java无关了,在熟悉HTTP协议之后Q就需要熟悉Java的实现HTTP协议的类库,也就? Servlet APIQ所以最重要的东西就是Servlet API。当然对于初学者而言Q直接通过Servlet API来学习Web~程有很大的隑ֺQ我推荐O'reilly的《Java Server Pages 》这本书来学习Web ~程?<br /> <br /> EJB的书c当中,《Enterprise JavaBeans, 2nd Edition》是一本很不错的书Q? EJB的学习门槛是比较高,入门很难Q但是这本书完全降低了学习的隑ֺQ特别重要的一ҎQEJB的学习需要结合一UApp Server的具体实玎ͼ所以在学习EJB的同Ӟ必须同步的学习某UApp ServerQ而这本书相关的出了三本书Q分别是Weblogic6.1QWebsphere4.0和JBoss3.0上面部v书中例子的实做。真是既? 理论Q又有实c在学习EJB的同Ӟ可以边看边做QEJB的学习会变得很轻松?<br /> <br /> 但是q本书也有一个问题,是版本比较旧,主要讲EJB1.1规范和部分EJB2.0的规范。而Ed Roman写的《Mastering EJB 2.0》这本书完全是根据EJB2.0规范写的Q深入浅出,覆盖了EJB~程的各个方面,q且q有很多~程l验tipsQ也是学习EJB非常推荐的书c之 一?<br /> <br /> 如果是结合Weblogic来学习J2EE的话Q《J2EE应用与BEA Weblogic Server》绝Ҏ首选读物,虽然是讲q的Weblogic6.0Q仍然值得购买Q这本书是BEA官方推荐的教材,作者也是BEA公司的工E师。现在中 文版已经随处可见了。这本书l合Weblogic介绍了J2EE各个斚w的技术在Weblogicq_上的开发和部vQ实跉|导意义非常强?<br /> <br /> 在掌握了Javaq_基础知识和J2EE斚w的知识以后,更进一步的是学习如何运用OO的方法进行Y件的设计Q那么就一定要学习“设计模式”。Sun公司 出版了一本《J2EE核心模式》,是每个开发Java企业q_软g的架构师必备的书c。这本书全面的介l了J2EE体系架构的各U设计模式,是设计师的必 Mc?<br /> <br /> Java Learning PathQ三Q过E篇 <br /> <br /> 每个人的学习Ҏ是不同的Q一个h的方法不见得适合另一个hQ我只能是谈自己的学习方法。因为我学习Java是完全自学的Q从来没有问q别人,所以学习的q程基本上完全是自己摸烦出来的。我也不知道q种Ҏ是否是比较好的方法,只能l大家提供一点参考了?<br /> <br /> 学习Java的第一步是安装好JDKQ写一个Hello WorldQ 其实JDK的学习没有那么简单,关于JDK有两个问题是很容易一直困扰JavaE序员的地方Q一个是CLASSPATH的问题,其实从原理上来说Q是要搞 清楚JRE的ClassLoader是如何加载Class的;另一个问题是package和import问题Q如何来Lcȝ路径问题。把q两个问题摸? 清楚了,扫除了学习Java和用JDK的最大障。推荐看一下王的《Java深度历险》,对这两个问题q行了深入的探讨?<br /> <br /> W二步是学习Java的语法。Java的语法是cC++的,基本上主的~程语言不是cCQ就是类C++的,没有什么新东西Q所以语法的学习Q大概就是半 天的旉_了。唯一需要注意的是有几个不容易搞清楚的关键字的用法,publicQprotectedQprivateQstaticQ什么时候用Qؓ 什么要用,怎么用,q可能需要有人来指点一下,我当初是完全自己琢磨出来的,׃很久的时间。不q后来我看到《Thinking in Java》这本书上面是讲了这些概늚?<br /> <br /> W三步是学习Java的面向对象的~程语言的特性的地方。比如承,构造器Q抽象类Q接口,Ҏ的多态,重蝲Q覆盖,Java的异常处理机制。对于一个没 有面向对象语a背景的h来说Q我觉得q个q程需要花很长很长旉Q因为学习Java之前没有C++的经验,只有C的经验,我是大概׃一个月左右吧,才彻 底把q些概念都搞清楚Q把书上面的例子反复的揣摩,修改Q尝试,把那几章内容反复的看q来Q看q去Q看了不?遍,才彻底领悟了。不q我惛_果有C++l? 验的话,应该一两天旉_了。那么在q个q程中,可以多看看《Thinking in Java》这本书Q对面向对象的讲解非帔R彻。可惜的是我学习的时候,q没有看到这本书Q所以自p了大量的旉Q通过自己的尝试和揣摩来学会的?<br /> <br /> W四步就是开始熟悉Java的类库。Java的基cd其实是JDK安装目录下面jre\lib\rt.jarq个包。学习基cd是学习rt.jar。基cd里面的类非常非常多。据说有3000多个Q我没有l计q。但是真正对于我们来说最核心的只?个,分别?<br /> java.lang.*; <br /> java.io.*; <br /> java.util.*; <br /> java.sql.*; <br /> <br /> q四个包的学习,每个包的学习都可以写成一本厚厚的教材Q而O'reilly也确实是q样做的。我觉得如果旉比较紧,是不可能通过d本书来学习。我觉得比较好的学习Ҏ是这LQ?<br /> 首先要通读整个package的框Ӟ了解整个package的classQinterfaceQexception的构成,最好是能够扑ֈ介绍整个包框架的文章。这些专门介l包的书c的前几章应该就是这些M的框架内容介l?<br /> <br /> 对包整体框架的把握ƈ不是要熟悉每个类的用法,C它有哪些属性,Ҏ。想CC住的。而是要知道包有哪些方面的cL成的Q这些类的用途是什么,最核心 的几个类分别是完成什么功能的。我在给人培训的时候一般是一ơ课讲一个包Q所以不可能详细的介l每个类的用法,但是我反复强调,我给你们讲这些包的不是要 告诉你们cȝҎ是怎么调用的,也不要求你们CcȝҎ调用Q而是要你们了解,Javal我们提供了哪些c,每个cL用在什么场合,当我遇到问题的时 候,我知道哪个类Q或者哪几个cȝl合可以解决我的问题QThat'allQ,当我们具体写E序的时候,只要你知道该用哪个类来完成你的工作就_了。编 码的时候,具体的方法调用,是边写代码,ҎDocumentationQ所有的东西都在Documentation里面Q不要求你一定记住,实际你也? 不住3000多个cȝd近10万个Ҏ调用。所以对每个包的M框架的把握就变得极ؓ重要?<br /> <br /> W五步,通过上面的学习,如果学的比较扎实的话Q就打好了Java的基了,剩下要做的工作是扫清Documentation里面除了上面4个包之外的其 他一些比较有用处的类。相信进展到q一步,Java的自学能力已l被培养出来了,可以C直接学习Documentation的水q了。除了要做GUI~? E之外,JDK里面其他会有用处的包是这些: <br /> java.text.*; <br /> java.net.*; <br /> javax.naming.*; <br /> q些包里面真正用的比较多的类其实很少Q只有几个,所以不需要花很多旉?<br /> <br /> W六步,Java Web ~程 <br /> Web~程的核心是HTTP协议QHTTP协议和Java无关Q如果不熟悉HTTP协议的话Q虽然也可以学好Servlet/JSP~程Q但是达不到举一 反三Q一通百通的境界。所以HTTP协议的学习是必备的。如果熟悉了HTTP协议的话Q又有了Java~程的良好的基础Q学习Servlet/JSP? 易如反掌Q我学习Servlet/JSPq了不C周的旉Q然后就开始用JSP来做目了?<br /> <br /> 在Servlet/JSP的学习中Q重头仍然是Servlet Documentation。Servlet API最常用的类很少Q花比较的旉可以掌握了。把q些c都看一遍,多写几个例子试试。Servlet/JSP~程本质是在反复调用这些类来通过 HTTP协议在Web Server和Brower之间交谈。另外对JSPQ还需要熟悉几个常用JSP的标讎ͼ具体的写法记不住的话Q时查是了?<br /> <br /> 此外Java Web~程学习的重点要攑֜Web Application的设计模式上Q如何进行业务逻辑的分析,q且q行合理的设计,按照MVC设计模式的要求,q用Servlet和JSP分别完成不同 的逻辑层,掌握如何在Servlet和JSP之间q行程的控制和数据的共享,以及Web Application应该如何配置和部|Ӏ?<br /> <br /> W七步,J2EE~程 <br /> 以上的学习过E如果是比较利的话Q进行到q一步,隑ֺ又陡然提高。因Z面的知识内容都是只涉及一个方面,而像EJBQJMSQJTA{核心的J2EE规范往往是几UJava技术的l合q用的结Ӟ所以掌握v来难度比较大?<br /> <br /> 首先一定要学习好JNDIQJNDI是App Server定位服务器资源(EJBlgQDatasouceQJMSQ查找方法,如果对JNDI不熟悉的话,EJBQJMSq些东西几乎学不下去? JNDI其实是javax.naming.*q个包,q用h很简单。难点在于服务器资源文g的配|。对于服务器资源文g的配|,需要看看专门的文档 规范了,比如web.xml的写法,ejb-jar.xml的写法等{。针ҎU不同的App ServerQ还有自q服务资源配置文gQ也是需要熟悉的?<br /> <br /> 然后可以学习JTAQ主要是要理解JTA对于事务的控制的ҎQ以及该在什么场合用JTA。这里可以简单的举个例子Q我们知道一般情况可以对于一个数? 库连接进行事务控?conn.setAutoCommit(false),....,conn.commit())Q做Z个原子操作,但是假设我的? 务需求是要把对两个不同数据库的操作做Z个原子操作,你能做的到吗Q这时候只能用JTA了。假设操作过E是先往A数据库插一条记录,然后删除B数据库另 一个记录,我们自己写代码是控制不了把整个操作做Z个原子操作的。用JTA的话Q由App Server来完成控制?<br /> <br /> 在学习EJB之前要学习对象序列化和RMIQRMI是EJB的基。接着学习JMS和EJBQ对于EJB来说Q最关键是要理解EJB是如何通过RMI来实现对q端对象的调用的Q以及在什么情况下要用到EJB?<br /> <br /> 在学习完EJBQJMSq些东西之后Q你可能会意识到要急不可待学习两个领域的知识,一个是UMLQ另一个是Design Pattern。Java企业软g的设计非帔R视框?Framework)的设计,一个好的Y件框架是软g开发成功的必要条g。在q个时候,应该开始把 学习的重Ҏ在设计模式和框架的学习上Q通过学习和实际的~程l验来掌握EJB的设计模式和J2EE的核心模式?<br /> <br /> J2EE规范里面Q除了EJBQJMSQJTAQServlet/JSPQJDBC之外q有很多很多的企业技术,q里不一一q行介绍了?<br /> <br /> 另外q有一个最新领域Web Services。Web Services也完全没有Q何新东西Q它像是一U黏合剂Q可以把不同的服务统一h提供一个统一的调用接口,作ؓ使用者来_我只要获得服务提供者给? 的WSDLQ对服务的描qͼQ就够了Q我完全不知道服务器提供者提供的服务I竟是EJBlgQ还?NetlgQ还是什么CORBAlgQ还是其他的什? 实现Q我也不需要知道。Web Services最伟大的地方就在于通过l一的服务提供方式和调用方式Q实C整个Internet服务的共享,是一个非o人激动的技术领域。Web Services好像目前q没有什么很好的书籍Q但是可以通过在网l上面查资料的方式来学习?<br /> <br /> Java Learning PathQ四Q?Ҏ?<br /> <br /> Java作ؓ一门编E语aQ最好的学习Ҏ是写代码。当你学习一个类以后Q你可以自己写个简单的例子E序来运行一下,看看有什么结果,然后再多调用? 个类的方法,看看q行l果Q这样非常直观的把类l学会了Q而且记忆非常深刻。然后不应该满把代码调通,你应该想想看如果我不q样写,换个方式Q再试试? 不行。记得哪个高q学习编E就是个破坏的过E,把书上的例子Q自己学习Documentation~写的例子在q行通过以后Q不断的试着用不同的? 法实玎ͼ不断的尝试破坏代码的l构Q看看它会有什么结果。通过q样的方式,你会很彻底的很精通的掌握Java?<br /> <br /> 举个例子Q我们都~过Hello World <br /> <br /> public class HelloWorld { <br /> public static void main(String[] args) { <br /> System.out.println("Hello World"<img src="http://bbs.chinaunix.net/images/smilies/icon_wink.gif" smilieid="60" alt="" border="0" />; <br /> } <br /> } <br /> <br /> 很多初学者不是很理解Z么mainҎ一定要q样来定义public static void main(String[] args)Q能不能不这样写Q包括我刚学习Java的时候也有这L疑问。想知道{案吗?很简单,你把main改个名字q行一下,看看报什么错误,然后? 据出错信息进行分析;把main的public取掉Q在试试看,报什么错误;staticLq能不能q行Q不知道mainҎ是否一定要传一? String[]数组的,把String[]ҎQ改成int[]Q或者String试试看;不知道是否必dargs参数名称的,也可以把argsҎ 别的名字Q看看运行结果如何?<br /> <br /> 我当初学习Java的时候就是这样做的,把Hello WorldE序反复改了七八ơ,不断q行Q分析运行结果,最后就d明白Z么了mainҎ是这样定义的了?<br /> <br /> 此外Q我对于staicQpublicQprivateQExceptionQtry{ }catch {}finally{}{等{等一开始都不是很懂Q都是把参考书上面的例子运行成功,然后开始破坏它Q不断的Ҏ自己心里面的疑问来重新改写程序,看看 能不能运行,q行出来是个什么样子,是否可以得到预期的结果。这栯然比较费旉Q不q一个例子程序这样反复破坏几ơ之后。我对q个相关的知识彻底学? 了。有时候甚x意写一些错误的代码来运行,看看能否得到预期的运行错误。这样对于编E的掌握是及其深ȝ?<br /> <br /> 其中特别值得一提的是JDK有一个非常棒的调试功能,-verbose <br /> java –verbose <br /> javac –verbose 以及其它很多JDK工具都有q个选项 <br /> -verbose 可以昄在命令执行的q程中,JVM都依ơ加载哪里ClassQ通过q些宝贵的调试信息,可以帮助我们分析出JVM在执行的q程中都q了些什么?<br /> <br /> 另外Q自己在学习q程中,写的很多的这U破坏例E,应该有意识的分门别类的保存下来,在工作中U篏的典型例E也应该定期整理Q日U月累,自己有了一个代 码库了。遇到类似的问题Q到代码库里?Copy & Paste QSearch & ReplaceQ就好了Q极大提高了开发速度。最理想的情冉|把一些通用的例E自己再抽象一层,形成一个通用的类库,装好。那么可复用性就更强了?<br /> <br /> 所以我觉得其实不是特别需要例E的Q自己写的破坏例E就是最好的例子Q如果你实在对自己写的代码不攑ֿ的话Q我强烈推荐你看看JDK基础cd的Java? 代码。在JDK安装目录下面会有一个src.zipQ解开来就可以完整的看到整个JDK基础cdQ也是rt.jar的Java源代码,你可以参考一? Sun是怎么写JavaE序的,规范是什么样子的。我自己在学习Java的类库的时候,当有些地方理解的不是很清楚的时候,或者想更加清晰的理解运作的l? 节的时候,往往会打开相应的类的源代码Q通过看源代码Q所有的问题都会一扫而空?<br /> <br /> Java Learning PathQ五Q资源篇 <br /> <br /> 1?http://java.sun.com/ (英文) <br /> Sun的Java|站Q是一个应该经常去看的地方。不用多说?<br /> <br /> 2、http://www-900.ibm.com/developerWorks/cn/ <br /> IBM的developerWorks|站Q英语好的直接去英文ȝ点看。这里不但是一个极好的面向对象的分析设计网站,也是Web ServicesQJavaQLinux极好的网站。强烈推荐!Q! <br /> <br /> 3、http://www.javaworld.com/ (英文) <br /> 关于Java很多新技术的讨论和新闅R想多了解Java的方斚w面的应用Q这里比较好?<br /> <br /> 4、http://dev2dev.bea.com.cn/index.jsp <br /> BEA的开发者园圎ͼBEA作ؓ最重要的App Server厂商Q有很多独到的技术,在Weblogic上做开发的朋友不容错过?<br /> <br /> 5、http://www.huihoo.com/ <br /> 灰狐动力|站Q一个专业的中间件网站,虽然不是专业的Java|站Q但是在J2EE企业应用技术方面有深厚的造诣?<br /> <br /> 6、http://www.theserverside.com/home/ (英文) <br /> TheServerSide是一个著名的专门面向Java Server端应用的|站?<br /> <br /> 7、http://www.javaresearch.org/ <br /> Java研究l织Q有很多优秀的Java斚w的文章和教程Q特别是在JDO斚w的文章比较丰富?<br /> <br /> 8、http://www.cnjsp.org/ <br /> JSP技术网站,有相当多的Java斚w的文章和资源?<br /> <br /> 9、http://www.jdon.com/ <br /> Jdon论坛Q是一个个人性质的中文J2EE专业技术论坛,在众多的Java的中文论坛中QJdon一个是技术含量非帔RQ帖子质量非常好的论坛?<br /> <br /> 10、http://sourceforge.net/ <br /> SourgeForge是一个开放源代码软g的大本营Q其中也有非帔R怸富的Java的开放源代码的著名的软g?br /> _________________</div> <br style="clear: both;" /> <font style="color: #000000; font-family: song,Verdana; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal;"> </font> <img src ="http://www.aygfsteel.com/drecry/aggbug/279447.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/drecry/" target="_blank">drecry</a> 2009-06-01 19:10 <a href="http://www.aygfsteel.com/drecry/archive/2009/06/01/279447.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ϼ</a>| <a href="http://" target="_blank">ͤ</a>| <a href="http://" target="_blank">ⶫ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ʯ¥</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">˳</a>| <a href="http://" target="_blank">Ǩ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">˳</a>| <a href="http://" target="_blank">鱦</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank">ʯ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ȫ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">տ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ѯ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ï</a>| <a href="http://" target="_blank">¯</a>| <a href="http://" target="_blank">ʦ</a>| <a href="http://" target="_blank">лͨ</a>| <a href="http://" target="_blank"></a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>