??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲国产日韩综合久久精品,久久久久亚洲精品天堂久久久久久 ,亚洲免费电影网站http://www.tkk7.com/crazycy/category/8593.html记录Ҏ(gu) 鉴往事之得失 以资于发?zh-cnThu, 27 Mar 2008 06:24:13 GMTThu, 27 Mar 2008 06:24:13 GMT60ClassLoader专题Q六Q:(x)ear的新发现http://www.tkk7.com/crazycy/archive/2008/03/27/188907.htmlcrazycycrazycyWed, 26 Mar 2008 16:36:00 GMThttp://www.tkk7.com/crazycy/archive/2008/03/27/188907.htmlhttp://www.tkk7.com/crazycy/comments/188907.htmlhttp://www.tkk7.com/crazycy/archive/2008/03/27/188907.html#Feedback0http://www.tkk7.com/crazycy/comments/commentRss/188907.htmlhttp://www.tkk7.com/crazycy/services/trackbacks/188907.html
ear下允许jar的变?br />
web-inf/lib 下不允许jar的变?br /> 其变体简z的实质是web-inf/classes


crazycy 2008-03-27 00:36 发表评论
]]>
ClassLoader专题Q五Q:(x)ear的阐qͼ引用Q??验证后的推理http://www.tkk7.com/crazycy/archive/2008/03/26/188822.htmlcrazycycrazycyWed, 26 Mar 2008 10:19:00 GMThttp://www.tkk7.com/crazycy/archive/2008/03/26/188822.htmlhttp://www.tkk7.com/crazycy/comments/188822.htmlhttp://www.tkk7.com/crazycy/archive/2008/03/26/188822.html#Feedback0http://www.tkk7.com/crazycy/comments/commentRss/188822.htmlhttp://www.tkk7.com/crazycy/services/trackbacks/188822.html
Java本n是一U设计的非常单,非常_y的语aQ所以Java背后的原理也很简单,归结h是两点Q?

1、JVM的内存管?

     理解了这一点,所有和对象相关的问题统l都能解?

2、JVM Class Loader

     理解了这一点,所有和Java相关的配|问题,包括各种App Server的配|,应用的发布问题统l都能解?
App Class Loader
|----- EJB Class Loader
|----- Web App Class Loader

如果在App Class LoaderU别配置Q是全局可见的?br /> 如果打包在EJB里面Q那么就不会(x)影响到Web ApplicationQ反之亦Ӟ如果你在WEB-INF下面攄HibernateQ也不会(x)影响到EJB?br /> 攑֜EJB Class Loader或者放在Web App Class LoaderU别主要是在局部范围内有效Q不影响到其它的应用?
Q?strong>QmeQ这里是说ClassLoader都有一个加载边界#Q?/span>

试想Q如果在一个Weblogic上面配置多个虚拟域,你用www.bruce.com域名Q开发你的网站,我? www.fankai.com开发我的网站,那么当然不希望我们的Hibernate怺q扰Q所以就可以攑֜ EJB Class LoaderU别来配|Hibernate?

q一步阐qC下EJB Class Loader的问题:(x)

先再ơ强调一下,Hibernate和EJBQ和App Server不存在兼Ҏ(gu)问题,他们本来是不相关的东西Q就好像JDBCQ相信没有h?x)认为JDBC和EJB不兼容吧QHibernate也是一P? 只和JDBC驱动Q和数据库有兼容性问题,而和EJBQ和App Server完全是不搭界的两回事。凡是认为Hibernate和EJB不兼容的人,其实是都是因为对EJB学习(fn)的不到家Q把责Q推到Hibernate w上了?

我前面的帖子提到qClass Loader的层ơ,q里不重复了QM我们先来看看Class Loader的作用范_(d)(x)
Q#me: BootStrap Class Loader?x)加载ExtClassLoader, q设|其parent为null
              然后BootStrap Class Loader?x)加载AppClassLoader,q设|其parent为ExtClassLoader
              然后ExtClassLoader加蝲QAppClassLoader再加载#Q?br />
BootStrap Class Loader:
>>>>> load JRE"lib"rt.jar, sunrsasign.jar, charsets.jar, jce.jar, jsse.jar, plugin.jar

Ext Class Loader:
>>>>>load JRE"lib"ext目录下的库文? load JRE"classes目录下的c?/span>

App Class Loader:
>>>>>load CLASSPATH变量指定路径下的c?br />
以上的load路径都是写死在JVM的C
++源代码里面的Q不能改变,详细误王森的《Java深度历险?

在一个特定的App Server上,Class Loader?x)l向下承,l承的层ơ会(x)Ҏ(gu)不同的App Server有所不同Q但是肯定不?x)变的就是?x)
EJB Class Loader:
>>>>>l承自App Class LoaderQ承层ơ根据App Server有所不同Q?br /> >>>>>一个EJB Class Loader它的load Class的范围仅限于JAR或者EAR范围之内?/span>

Web App Class Loader:
>>>>>l承自App Class LoaderQ承层ơ根据App Server有所不同Q?br /> >>>>>一个Web App Class Loader:它的load Class的范围在 WEB-INF"lib下的库文件和W(xu)EB-INF"classes目录下的class文g?/span>

Web App Class Loader很好理解Q大家毕竟用的很多,App Server上的一个Web Application?x)创Z个Web App Class Loader的实例去负责load classQ所以如果你惌Hibernate只在q个Web Application内生效,把它攑ֈWEB-INF"lib下去好了?

如果你把Hibernate攑ֈ了CLASSPATH变量指定的\径下Q而你在WEB-INF"lib也放了一份,那么Web App Class Loader׃load范围所限,它会(x)首先扑ֈWEB-INF"lib下的那䆾HibernateQ按照它的配|来初始化Hibernate?

如果你把Hibernate攑ֈ了CLASSPATH变量指定的\径下Q但你在WEB-INF"lib什么都没有放,那么Web App Class Loader׃load范围所限,它根本什么都找不刎ͼ于是它把load Hibernate的责Ml上一U的Class LoaderQ这L(fng)到App Class LoaderQ它扑ֈ了HibernateQ按照它的配|来初始化Hibernate?

EJB Class LoaderE微复杂一点,不那么容易理?/span>?strong>App Server?x)针?gu)一个EJB包文件创Z个EJB Class Loader的实?/strong>Q例如:(x)
HelloRobbin.jar
HelloBruce.jar

当你把这两个jar发布到App Server上以后,?x)创Z个EJB Class Loader的实例,分别去loadq两个EJB包,比如_(d)(x)
CLEJB_Robbin是load HelloRobbin.jar?br /> CLEJB_Bruce是load HelloBruce.jar?

那么CLEJB_Robbin的load范围׃仅限于HelloRobbin.jar之内Q它load不到HelloRobbin.jar之外的Q何文Ӟ当然它也load不到HelloBruce.jar?

说到q里Q?span style="color: red;">我相信大家应该已l明白ؓ(f)什么EJB规范不允许EJB有IO操作了吧Q因为EJB Class LoaderҎ(gu)找不到jar包之外的文g
Q!Q?
Q#me:q里是我疑问最大的地方Q也是测试验证的地方Q)

如果现在你想实现HelloRobbin.jar和HelloBruce.jar?span style="background-color: rgb(239, 255, 120);">互相调用
Q那么该怎么办?他们使用了不同的EJB Class LoaderQ相互之间是找不到对方的。解军_法就是用EAR?

现在假设HelloRobbin.jar和HelloBruce.jar都用了HibernateQ看看该怎么打包和发布:(x)
HelloEJB.ear
|------ HelloRobbin.jar
|------ HelloBruce.jar
|------ Hibernate2.jar
|------ pojo.jar (定义所有的持久对象和hbm文g的jar?
|------ cglib-asm.jar
|------ commons-beanutils.jar
|------ commons-collections.jar
|------ commons-lang.jar
|------ commons-logging.jar
|------ dom4j.jar
|------ odmg.jar
|------ log4j.jar
|------ jcs.jar
|------ hibernate.properties
|------ log4j.properties
|------ cache.ccf
|------ META-INF"application.xml (J2EE规范的要求,定义EAR包里面包括了哪几个EJB)


除此之外Q按照EJB规范要求QHelloRobbin.jar和HelloBruce.jarq必L用jar包之外的cd的名Uͼq需要在jar包的manifest文g中定义:(x)
HelloRobbin.jar
|------ META-INF"MANIFEST.MF

MANIFEST.MF中必d括如下一行:(x)
Class-Path: log4j.jar hibernate2.jar cglib-asm.jar commons-beanutils.jar commons-collections.jar commons-lang.jar
commons
-logging.jar dom4j.jar jcs.jar odmg.jar jcs.jar pojo.jar

q样O(jin)K了,当把HelloEJB.ear发布到App Server上以后,App Server创徏一个EJB Class Loader实例load EAR包里面的EJBQ再Ҏ(gu)EJB的jar包里面的MANIFEST.MF指出的Class-Pathd扄应的jar包之外的cd?

所以一个EAR包有点类g个Web ApplicationQEJB Class Loader的load范围也就是EAR范围之内Q它load不到EAR之外的文件。除非把Hibernate定义到CLASSPATH指定的\径下Q在 q种情况下,EJB Class Loader找不到HibernateQ只能交l上一U的Class LoaderQ最后由App Class Loader扑ֈHibernateQ进行初始化?

没有写完Ql说...

׃EARq样load Class规则Q假设Robbin和Bruce都在同一个Weblogic上运行自q|站Q而我们都不希望自qE序里面的Hibernate配置被对方的搞ؕ掉,那么我们可以这h做:(x)
Robbin's Website:

Robbin.ear
|-------- robbin.war (把Web Application打包)
|-------- robbin.jar (把开发的EJB打包Q?br /> |-------- Hibernate2.jar
..
|-------- META-INF"application.xml


Bruce
's Website:

Bruce.ear
|-------- bruce.war (把Web Application打包)
|-------- bruce.jar (把开发的EJB打包Q?br /> |-------- Hibernate2.jar
..
|-------- META-INF"application.xml

q样在同一个App Server上运行,可以互怸q扰?br />
Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q?br /> xQ这个是引文Q外加了部分个h的解释?br /> 其中针对如下的话Q?br />
我相信大家应该已l明白ؓ(f)什么EJB规范不允许EJB有IO操作了吧Q因为EJB Class LoaderҎ(gu)找不到jar包之外的文g
我感觉很疑惑Q同时EJB规范g有大概如下描qͼ(x)
EJB模型不推荐或者禁止在EJBlg中读取文?...

Z么不允许d文g呢?是否真的找不到呢Q?br /> 我采用了两种方式Q?br />
(方式一)
${Class_Name}.
class.getClassLoader().getResourceAsStream("${file}");
file路径方式Q?br /> 一U方式采用直接的l对路径
一U方式采用相对于ear包的Qjar包内

Q方式二Q?br />
new File(${file})
file路径采用l对路径
l果得到如下l论Q?br /> 方式一 如果采用getResourceAsStream的方式,无法讉Kear包之外的资源
方式一采用l对路径的文件方式,貌似q回是nullQ记录有Ҏ(gu)p了Q?br /> 方式二采用绝对\径,l对没有问题

我现在想Qƈ不是真的不能讉K外部资源Q而是其设计就是ؓ(f)了把classloaser的界限限制在jar包内或者ear内,而不怺q扰Q因而在其规范中是止或者不推荐d文g的方式了?br />

crazycy 2008-03-26 18:19 发表评论
]]>
ClassLoader专题Q四Q:(x)部vear包出错引发的ClassLoader的思?/title><link>http://www.tkk7.com/crazycy/archive/2008/03/18/187056.html</link><dc:creator>crazycy</dc:creator><author>crazycy</author><pubDate>Tue, 18 Mar 2008 10:08:00 GMT</pubDate><guid>http://www.tkk7.com/crazycy/archive/2008/03/18/187056.html</guid><wfw:comment>http://www.tkk7.com/crazycy/comments/187056.html</wfw:comment><comments>http://www.tkk7.com/crazycy/archive/2008/03/18/187056.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/crazycy/comments/commentRss/187056.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/crazycy/services/trackbacks/187056.html</trackback:ping><description><![CDATA[<a id="CategoryEntryList1_EntryStoryList_Entries_ctl06_TitleUrl" class="entrylisttitle" href="../../crazycy/archive/2007/02/01/97350.html">ClassLoader专题Q一Q:(x)ClassLoader基础</a><br /> <a id="CategoryEntryList1_EntryStoryList_Entries_ctl09_TitleUrl" class="entrylisttitle" href="../../crazycy/archive/2006/11/24/83379.html">ClassLoader专题Q二Q:(x)从Servlet容器看ClassLoader机制的妙?/a><br /> <a id="CategoryEntryList1_EntryStoryList_Entries_ctl03_TitleUrl" class="entrylisttitle" href="../../crazycy/archive/2007/05/05/115383.html">ClassLoader专题Q三Q:(x)引文</a><br /> <a id="homepage1_HomePageDays_DaysList_ctl00_DayItem_DayList_ctl01_TitleUrl" href="../../crazycy/archive/2008/03/18/187056.html">ClassLoader专题Q四Q:(x)</a><a >部vear包出错引发的ClassLoader的思?/a><br /> <br /> 应用服务器常常包含多个容器,当前使用的是JBossQ在<strong>部vear?/strong>的时候,遇到了一些比较有意思的问题Q遂随着不断的推Ԍ从而解决了问题Q也对classloader在应用服务器如JBoss中有了一点的推测Q不当之处请光顾的朋友指出)?br /> 试环境QJBoss4.0.5.GA 、Gentoo Linux?spring、ejbQ?strong>ear工程</strong>Q?br /> <br /> 1Q用ant打包脚本的疏忽,把struts action的class同时攑֜?{ear_file}/${jar_file} ?{ear_file}/${war_file}/WEB-INF/{lib}/${jar_file}<br />       U正之后Q再ơ修改了struts action的实现类Q后者确实不断地更新Q但是始l未被执行,而执行的L前?br /> <br /> 2Qant打包Q把${xml_config_file}攑֜?{ear_file}/${jar_file} ?{ear_file}/${war_file}/WEB-INF/classes/${xml_config_file}<br />       之后做了如下的测试:(x)<br />       21Q前者不变,更新后者,l果Q取新增加的物g出错<br />       22Q移除前者,更新后者,l果Q可以取到新增加的物?br />       23Q保持前者,新物件的配置作ؓ(f)一个新的文Ӟ同时也放在后者的位置Q结果:(x)可以取到新增加的物g?br /> <br /> 3Q通过IoC注入配置文g的位|,然后d配置文g的内?未用Spring的解析方法,而是自己实现解析)Q?br />   注入xml位置的配|如下(_体处)Q?br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #000000;"><</span><span style="color: #000000;">bean id</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">test.DataMigrateCenter</span><span style="color: #000000;">"</span><span style="color: #000000;"> </span><span style="color: #0000ff;">class</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">demo.service.DataMigrateCenter</span><span style="color: #000000;">"</span><span style="color: #000000;">></span><span style="color: #000000;"><br />         </span><span style="color: #000000;"><</span><span style="color: #000000;">property name</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">dataExtractDao</span><span style="color: #000000;">"</span><span style="color: #000000;">><</span><span style="color: #000000;">ref bean</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">demo.dataExtractDao</span><span style="color: #000000;">"</span><span style="color: #000000;">/></</span><span style="color: #000000;">property</span><span style="color: #000000;">></span><span style="color: #000000;"><br />         </span><span style="color: #000000;"><</span><span style="color: #000000;">property name</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">markExtractedDao</span><span style="color: #000000;">"</span><span style="color: #000000;">><</span><span style="color: #000000;">ref bean</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">demo.markExtractedDao</span><span style="color: #000000;">"</span><span style="color: #000000;">/></</span><span style="color: #000000;">property</span><span style="color: #000000;">></span><span style="color: #000000;"><br />         </span><span style="color: #000000;"><</span><span style="color: #000000;">property name</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">errorsPath</span><span style="color: #000000;">"</span><span style="color: #000000;">   value</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">/home/cuiyi/demo/Errors/</span><span style="color: #000000;">"</span><span style="color: #000000;">/></span><span style="color: #000000;"><br />         </span><span style="color: #000000;"><</span><span style="color: #000000;">property name</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">invoicesPath</span><span style="color: #000000;">"</span><span style="color: #000000;"> value</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">/home/cuiyi/demo/Invoices/</span><span style="color: #000000;">"</span><span style="color: #000000;">/></span><span style="color: #000000;"><br />         </span><span style="color: #000000;"><</span><span style="color: #000000;">property name</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">archivesPath</span><span style="color: #000000;">"</span><span style="color: #000000;"> value</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">/home/cuiyi/demo/Archives/</span><span style="color: #000000;">"</span><span style="color: #000000;">/></span><span style="color: #000000;"><br />         <br />         </span><strong><span style="color: #000000;"><</span><span style="color: #000000;">property name</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">sqlPath</span><span style="color: #000000;">"</span><span style="color: #000000;">      value</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">x.war/WEB-INF/classes/xyz_sql.xml</span><span style="color: #000000;">"</span><span style="color: #000000;">/></span></strong><span style="color: #000000;"><br />     </span><span style="color: #000000;"></</span><span style="color: #000000;">bean</span><span style="color: #000000;">></span></div> <br /> <span style="color: #000000;">xyz_sql.xml的真实位|在</span><span style="color: #000000;">/</span><span style="color: #000000;">home</span><span style="color: #000000;">/</span><span style="color: #000000;">jboss</span><span style="color: #000000;">/</span><span style="color: #000000;">jboss</span><span style="color: #000000;">-</span><span style="color: #000000;">4.0</span><span style="color: #000000;">.</span><span style="color: #000000;">5</span><span style="color: #000000;">.GA</span><span style="color: #000000;">/</span><span style="color: #000000;">server</span><span style="color: #000000;">/</span><span style="color: #000000;">xyz</span><span style="color: #000000;">/</span><span style="color: #000000;">deploy</span><span style="color: #000000;">/</span><span style="color: #000000;">x.ear</span><span style="color: #000000;">/</span><span style="color: #000000;">x.war</span><span style="color: #000000;">/</span><span style="color: #000000;">WEB</span><span style="color: #000000;">-</span><span style="color: #000000;">INF</span><span style="color: #000000;">/</span><span style="color: #000000;">classes</span><span style="color: #000000;">/xyz</span><span style="color: #000000;">_sql.xml<br /> <br /> </span> 注入了sqlPath后,交给了一个工L(fng)来解析,q个工具cL在表现层Q即打包到war里,代码cM如下<br /> <br /> <strong></strong> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #0000ff;">private</span><span style="color: #000000;"> </span><span style="color: #0000ff;">static</span><span style="color: #000000;"> Document getRootDocument(String fileName)  </span><span style="color: #0000ff;">throws</span><span style="color: #000000;"> DocumentException{//</span>参数fileNamex入的<strong><span style="color: #000000;">sqlPath</span></strong><br /> <span style="color: #000000;">         SAXReader reader </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> SAXReader();<br />        //Print Code<br />         InputStream in </span><span style="color: #000000;">=</span><span style="color: #000000;"> SqlReaderHelper.</span><span style="color: #0000ff;">class</span><span style="color: #000000;">.getClassLoader().getResourceAsStream(fileName);<br />         Document document </span><span style="color: #000000;">=</span><span style="color: #000000;"> reader.read(in);<br />         </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> document;<br /> }</span></div> <br /> 在getRootDocumentҎ(gu)的Print Code处,增加如下打印语句Q?br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #000000;">System.out.println(SqlReaderHelper.</span><span style="color: #0000ff;">class</span><span style="color: #000000;">.getClassLoader().getResource(</span><span style="color: #000000;">"</span><span style="color: #000000;">/</span><span style="color: #000000;">"</span><span style="color: #000000;">));<br /> System.out.println(SqlReaderHelper.</span><span style="color: #0000ff;">class</span><span style="color: #000000;">.getClassLoader().getResource(</span><span style="color: #000000;">""</span><span style="color: #000000;">));<br /> System.out.println(SqlReaderHelper.</span><span style="color: #0000ff;">class</span><span style="color: #000000;">.getClassLoader().getResource(</span><span style="color: #000000;">"</span><span style="color: #000000;">/test.xml</span><span style="color: #000000;">"</span><span style="color: #000000;">));<br /> System.out.println(SqlReaderHelper.</span><span style="color: #0000ff;">class</span><span style="color: #000000;">.getClassLoader().getResource(</span><span style="color: #000000;">"</span><span style="color: #000000;">/../test.xml</span><span style="color: #000000;">"</span><span style="color: #000000;">));<br /> System.out.println(SqlReaderHelper.</span><span style="color: #0000ff;">class</span><span style="color: #000000;">.getClassLoader().getResource(</span><span style="color: #000000;">"</span><span style="color: #000000;">../test.xml</span><span style="color: #000000;">"</span><span style="color: #000000;">));<br /> System.out.println(Thread.currentThread().getContextClassLoader().getResource(</span><span style="color: #000000;">"</span><span style="color: #000000;">/</span><span style="color: #000000;">"</span><span style="color: #000000;">));<br /> System.out.println(Thread.currentThread().getContextClassLoader().getResource(</span><span style="color: #000000;">""</span><span style="color: #000000;">));<br /> System.out.println(SqlReaderHelper.</span><span style="color: #0000ff;">class</span><span style="color: #000000;">.getClass().getClassLoader().getResource(</span><span style="color: #000000;">""</span><span style="color: #000000;">));</span></div> 其中Q用的test.xml实际上ƈ不存在;<br /> 得到的输出结果(外加了打印语句的本n描述Q?br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #000000;">17</span><span style="color: #000000;">:</span><span style="color: #000000;">47</span><span style="color: #000000;">:</span><span style="color: #000000;">18</span><span style="color: #000000;">,</span><span style="color: #000000;">213</span><span style="color: #000000;"> INFO  [STDOUT] </span><span style="color: #000000;">-------->>>>>>>></span><span style="color: #000000;">SqlReaderHelper.</span><span style="color: #0000ff;">class</span><span style="color: #000000;">.getClassLoader().getResource(</span><span style="color: #000000;">"</span><span style="color: #000000;">/</span><span style="color: #000000;">"</span><span style="color: #000000;">) : </span><span style="color: #0000ff;">null</span><span style="color: #000000;"><br /> </span><span style="color: #000000;">17</span><span style="color: #000000;">:</span><span style="color: #000000;">47</span><span style="color: #000000;">:</span><span style="color: #000000;">18</span><span style="color: #000000;">,</span><span style="color: #000000;">214</span><span style="color: #000000;"> INFO  [STDOUT] </span><span style="color: #000000;">-------->>>>>>>></span><span style="color: #000000;">SqlReaderHelper.</span><span style="color: #0000ff;">class</span><span style="color: #000000;">.getClassLoader().getResource(</span><span style="color: #000000;">""</span><span style="color: #000000;">) : file:</span><span style="color: #000000;">/</span><span style="color: #000000;">home</span><span style="color: #000000;">/</span><span style="color: #000000;">jboss</span><span style="color: #000000;">/</span><span style="color: #000000;">jboss</span><span style="color: #000000;">-</span><span style="color: #000000;">4.0</span><span style="color: #000000;">.</span><span style="color: #000000;">5</span><span style="color: #000000;">.GA</span><span style="color: #000000;">/</span><span style="color: #000000;">server</span><span style="color: #000000;">/</span><span style="color: #000000;">xyz</span><span style="color: #000000;">/</span><span style="color: #000000;">deploy</span><span style="color: #000000;">/</span><span style="color: #000000;">x.ear</span><span style="color: #000000;">/</span><span style="color: #000000;"><br /> </span><span style="color: #000000;">17</span><span style="color: #000000;">:</span><span style="color: #000000;">47</span><span style="color: #000000;">:</span><span style="color: #000000;">18</span><span style="color: #000000;">,</span><span style="color: #000000;">222</span><span style="color: #000000;"> INFO  [STDOUT] </span><span style="color: #000000;">-------->>>>>>>></span><span style="color: #000000;">SqlReaderHelper.</span><span style="color: #0000ff;">class</span><span style="color: #000000;">.getClassLoader().getResource(</span><span style="color: #000000;">"</span><span style="color: #000000;">/test.xml"</span><span style="color: #000000;">) : </span><span style="color: #0000ff;">null</span><span style="color: #000000;"><br /> </span><span style="color: #000000;">17</span><span style="color: #000000;">:</span><span style="color: #000000;">47</span><span style="color: #000000;">:</span><span style="color: #000000;">18</span><span style="color: #000000;">,</span><span style="color: #000000;">231</span><span style="color: #000000;"> INFO  [STDOUT] </span><span style="color: #000000;">-------->>>>>>>></span><span style="color: #000000;">SqlReaderHelper.</span><span style="color: #0000ff;">class</span><span style="color: #000000;">.getClassLoader().getResource(</span><span style="color: #000000;">"</span><span style="color: #000000;">/../test.xml</span><span style="color: #000000;">"</span><span style="color: #000000;">) : </span><span style="color: #0000ff;">null</span><span style="color: #000000;"><br /> </span><span style="color: #000000;">17</span><span style="color: #000000;">:</span><span style="color: #000000;">47</span><span style="color: #000000;">:</span><span style="color: #000000;">18</span><span style="color: #000000;">,</span><span style="color: #000000;">241</span><span style="color: #000000;"> INFO  [STDOUT] </span><span style="color: #000000;">-------->>>>>>>></span><span style="color: #000000;">SqlReaderHelper.</span><span style="color: #0000ff;">class</span><span style="color: #000000;">.getClassLoader().getResource("</span><span style="color: #000000;">../test.xml</span><span style="color: #000000;">"</span><span style="color: #000000;">) : </span><span style="color: #0000ff;">null</span><span style="color: #000000;"><br /> </span><span style="color: #000000;">17</span><span style="color: #000000;">:</span><span style="color: #000000;">47</span><span style="color: #000000;">:</span><span style="color: #000000;">18</span><span style="color: #000000;">,</span><span style="color: #000000;">241</span><span style="color: #000000;"> INFO  [STDOUT]</span><span style="color: #000000;">-------->>>>>>>>Thread.currentThread().getContextClassLoader().getResource(</span><span style="color: #000000;">"</span><span style="color: #000000;">/</span><span style="color: #000000;">"</span><span style="color: #000000;">):</span><span style="color: #0000ff;">null</span><span style="color: #000000;"><br /> </span><span style="color: #000000;">17</span><span style="color: #000000;">:</span><span style="color: #000000;">47</span><span style="color: #000000;">:</span><span style="color: #000000;">18</span><span style="color: #000000;">,</span><span style="color: #000000;">242</span><span style="color: #000000;"> INFO  [STDOUT]</span><span style="color: #000000;">-------->>>>>>>>Thread.currentThread().getContextClassLoader().getResource(</span><span style="color: #000000;">""</span><span style="color: #000000;">):</span><span style="color: #000000;"><span style="color: #3518ff;"><span style="color: #000000;">file:</span><span style="color: #000000;">/</span><span style="color: #000000;">home</span><span style="color: #000000;">/</span><span style="color: #000000;">jboss</span><span style="color: #000000;">/</span><span style="color: #000000;">jboss</span><span style="color: #000000;">-</span><span style="color: #000000;">4.0</span><span style="color: #000000;">.</span><span style="color: #000000;">5</span><span style="color: #000000;">.GA</span><span style="color: #000000;">/</span><span style="color: #000000;">server</span><span style="color: #000000;">/</span><span style="color: #000000;">xyz</span><span style="color: #000000;">/</span><span style="color: #000000;">deploy</span><span style="color: #000000;">/</span><span style="color: #000000;">x.ear</span><span style="color: #000000;">/<br /> </span></span></span>执行?span style="color: #000000;">System.out.println(Thread.currentThread().getContextClassLoader().getResource(</span><span style="color: #000000;">""</span><span style="color: #000000;">)); 出错</span><br /> </div> test.xml换成一个真实存在的文g test.jar<br /> q在getRootDocumentҎ(gu)的Print Code处,增加如下打印语句Q?br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #000000;">System.out.println(SqlReaderHelper.</span><span style="color: #0000ff;">class</span><span style="color: #000000;">.getClassLoader().getResource(</span><span style="color: #000000;">"</span><span style="color: #000000;">/</span><span style="color: #000000;">"</span><span style="color: #000000;">));<br /> System.out.println(SqlReaderHelper.</span><span style="color: #0000ff;">class</span><span style="color: #000000;">.getClassLoader().getResource(</span><span style="color: #000000;">""</span><span style="color: #000000;">));<br /> System.out.println(SqlReaderHelper.</span><span style="color: #0000ff;">class</span><span style="color: #000000;">.getClassLoader().getResource(</span><span style="color: #000000;">"</span><span style="color: #000000;">/</span>test<span style="color: #000000;">.jar</span><span style="color: #000000;">"</span><span style="color: #000000;">));<br /> System.out.println(SqlReaderHelper.</span><span style="color: #0000ff;">class</span><span style="color: #000000;">.getClassLoader().getResource(</span><span style="color: #000000;">"</span><span style="color: #000000;">/../test.jar</span><span style="color: #000000;">"</span><span style="color: #000000;">));<br /> System.out.println(SqlReaderHelper.</span><span style="color: #0000ff;">class</span><span style="color: #000000;">.getClassLoader().getResource(</span><span style="color: #000000;">"</span><span style="color: #000000;">../test.jar</span><span style="color: #000000;">"</span><span style="color: #000000;">));<br /> System.out.println(SqlReaderHelper.</span><span style="color: #0000ff;">class</span><span style="color: #000000;">.getClassLoader().getResource(</span><span style="color: #000000;">"</span><span style="color: #000000;">test.jar</span><span style="color: #000000;">"</span><span style="color: #000000;">));<br /> System.out.println(Thread.currentThread().getContextClassLoader().getResource(</span><span style="color: #000000;">"</span><span style="color: #000000;">/</span><span style="color: #000000;">"</span><span style="color: #000000;">));<br /> System.out.println(Thread.currentThread().getContextClassLoader().getResource(</span><span style="color: #000000;">""</span><span style="color: #000000;">));<br /> System.out.println(SqlReaderHelper.</span><span style="color: #0000ff;">class</span><span style="color: #000000;">.getClassLoader().getResource(fileName));</span></div> 得到的输出结果(外加了打印语句的本n描述Q? <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><span style="color: #000000;">17</span><span style="color: #000000;">:</span><span style="color: #000000;">57</span><span style="color: #000000;">:</span><span style="color: #000000;">16</span><span style="color: #000000;">,</span><span style="color: #000000;">882</span><span style="color: #000000;"> INFO  [STDOUT] </span><span style="color: #000000;">-------->>>>>>></span><span style="color: #000000;">SqlReaderHelper.</span><span style="color: #0000ff;">class</span><span style="color: #000000;">.getClassLoader().getResource("</span><span style="color: #000000;">/"</span><span style="color: #000000;">) : </span><span style="color: #0000ff;">null</span><span style="color: #000000;"><br /> </span><span style="color: #000000;">17</span><span style="color: #000000;">:</span><span style="color: #000000;">57</span><span style="color: #000000;">:</span><span style="color: #000000;">16</span><span style="color: #000000;">,</span><span style="color: #000000;">900</span><span style="color: #000000;"> INFO  [STDOUT] </span><span style="color: #000000;">-------->>>>>>></span><span style="color: #000000;">SqlReaderHelper.</span><span style="color: #0000ff;">class</span><span style="color: #000000;">.getClassLoader().getResource(""</span><span style="color: #000000;">) : file:</span><span style="color: #000000;">/</span><span style="color: #000000;">home</span><span style="color: #000000;">/</span><span style="color: #000000;">jboss</span><span style="color: #000000;">/</span><span style="color: #000000;">jboss</span><span style="color: #000000;">-</span><span style="color: #000000;">4.0</span><span style="color: #000000;">.</span><span style="color: #000000;">5</span><span style="color: #000000;">.GA</span><span style="color: #000000;">/</span><span style="color: #000000;">server</span><span style="color: #000000;">/</span><span style="color: #000000;">xyz</span><span style="color: #000000;">/</span><span style="color: #000000;">deploy</span><span style="color: #000000;">/</span><span style="color: #000000;">x.ear</span><span style="color: #000000;">/</span><span style="color: #000000;"><br /> </span><span style="color: #000000;">17</span><span style="color: #000000;">:</span><span style="color: #000000;">57</span><span style="color: #000000;">:</span><span style="color: #000000;">16</span><span style="color: #000000;">,</span><span style="color: #000000;">909</span><span style="color: #000000;"> INFO  [STDOUT] </span><span style="color: #000000;">-------->>>>>>></span><span style="color: #000000;">SqlReaderHelper.</span><span style="color: #0000ff;">class</span><span style="color: #000000;">.getClassLoader().getResource("</span><span style="color: #000000;">/test.jar"</span><span style="color: #000000;">) : </span><span style="color: #0000ff;">null</span><span style="color: #000000;"><br /> </span><span style="color: #000000;">17</span><span style="color: #000000;">:</span><span style="color: #000000;">57</span><span style="color: #000000;">:</span><span style="color: #000000;">16</span><span style="color: #000000;">,</span><span style="color: #000000;">918</span><span style="color: #000000;"> INFO  [STDOUT] </span><span style="color: #000000;">-------->>>>>>></span><span style="color: #000000;">SqlReaderHelper.</span><span style="color: #0000ff;">class</span><span style="color: #000000;">.getClassLoader().getResource(</span><span style="color: #000000;">"</span><span style="color: #000000;">/../test.jar"</span><span style="color: #000000;">) : </span><span style="color: #0000ff;">null</span><span style="color: #000000;"><br /> </span><span style="color: #000000;">17</span><span style="color: #000000;">:</span><span style="color: #000000;">57</span><span style="color: #000000;">:</span><span style="color: #000000;">16</span><span style="color: #000000;">,</span><span style="color: #000000;">926</span><span style="color: #000000;"> INFO  [STDOUT] </span><span style="color: #000000;">-------->>>>>>></span><span style="color: #000000;">SqlReaderHelper.</span><span style="color: #0000ff;">class</span><span style="color: #000000;">.getClassLoader().getResource("</span><span style="color: #000000;">../test.jar"</span><span style="color: #000000;">) : </span><span style="color: #0000ff;">null</span><span style="color: #000000;"><br /> </span><span style="color: #000000;">17</span><span style="color: #000000;">:</span><span style="color: #000000;">57</span><span style="color: #000000;">:</span><span style="color: #000000;">16</span><span style="color: #000000;">,</span><span style="color: #000000;">926</span><span style="color: #000000;"> INFO  [STDOUT] </span><span style="color: #000000;">-------->>>>>>></span><span style="color: #000000;">SqlReaderHelper.</span><span style="color: #0000ff;">class</span><span style="color: #000000;">.getClassLoader().getResource(</span><span style="color: #000000;">"</span><span style="color: #000000;">test.jar"</span><span style="color: #000000;">) : file:</span><span style="color: #000000;">/</span><span style="color: #000000;">home</span><span style="color: #000000;">/</span><span style="color: #000000;">jboss</span><span style="color: #000000;">/</span><span style="color: #000000;">jboss</span><span style="color: #000000;">-</span><span style="color: #000000;">4.0</span><span style="color: #000000;">.</span><span style="color: #000000;">5</span><span style="color: #000000;">.GA</span><span style="color: #000000;">/</span><span style="color: #000000;">server</span><span style="color: #000000;">/</span><span style="color: #000000;">xyz</span><span style="color: #000000;">/</span><span style="color: #000000;">deploy</span><span style="color: #000000;">/</span><span style="color: #000000;">x.ear</span><span style="color: #000000;">/</span><span style="color: #000000;">test.jar<br /> </span><span style="color: #000000;">17</span><span style="color: #000000;">:</span><span style="color: #000000;">57</span><span style="color: #000000;">:</span><span style="color: #000000;">16</span><span style="color: #000000;">,</span><span style="color: #000000;">927</span><span style="color: #000000;"> INFO  [STDOUT]</span><span style="color: #000000;">-------->>>>>>>Thread.currentThread().getContextClassLoader().getResource(</span><span style="color: #000000;">"</span><span style="color: #000000;">/</span><span style="color: #000000;">"</span><span style="color: #000000;">):</span><span style="color: #0000ff;">null<br /> </span><span style="color: #000000;"> </span><span style="color: #000000;">17</span><span style="color: #000000;">:</span><span style="color: #000000;">57</span><span style="color: #000000;">:</span><span style="color: #000000;">16</span><span style="color: #000000;">,</span><span style="color: #000000;">927</span><span style="color: #000000;"> INFO  [STDOUT]</span><span style="color: #000000;">------->>>>>>>Thread.currentThread().getContextClassLoader().getResource(</span><span style="color: #000000;">""</span><span style="color: #000000;">):</span><span style="color: #000000;">file:</span><span style="color: #000000;">/</span><span style="color: #000000;">home</span><span style="color: #000000;">/</span><span style="color: #000000;">jboss</span><span style="color: #000000;">/</span><span style="color: #000000;">jboss</span><span style="color: #000000;">-</span><span style="color: #000000;">4.0</span><span style="color: #000000;">.</span><span style="color: #000000;">5</span><span style="color: #000000;">.GA</span><span style="color: #000000;">/</span><span style="color: #000000;">server</span><span style="color: #000000;">/xyz</span><span style="color: #000000;">/</span><span style="color: #000000;">deploy</span><span style="color: #000000;">/</span><span style="color: #000000;">x.ear</span><span style="color: #000000;">/<br /> </span><span style="color: #000000;"> </span><span style="color: #000000;">17</span><span style="color: #000000;">:</span><span style="color: #000000;">57</span><span style="color: #000000;">:</span><span style="color: #000000;">16</span><span style="color: #000000;">,</span><span style="color: #000000;">927</span><span style="color: #000000;"> INFO  [STDOUT] </span><span style="color: #000000;">-------->>>>>>></span><span style="color: #000000;">SqlReaderHelper.</span><span style="color: #0000ff;">class</span><span style="color: #000000;">.getClassLoader().getResource("</span><span style="color: #000000;">fileName</span><span style="color: #000000;">"</span><span style="color: #000000;">) : file:</span><span style="color: #000000;">/</span><span style="color: #000000;">home</span><span style="color: #000000;">/</span><span style="color: #000000;">jboss</span><span style="color: #000000;">/</span><span style="color: #000000;">jboss</span><span style="color: #000000;">-</span><span style="color: #000000;">4.0</span><span style="color: #000000;">.</span><span style="color: #000000;">5</span><span style="color: #000000;">.GA</span><span style="color: #000000;">/</span><span style="color: #000000;">server</span><span style="color: #000000;">/</span><span style="color: #000000;">xyz</span><span style="color: #000000;">/</span><span style="color: #000000;">deploy</span><span style="color: #000000;">/</span><span style="color: #000000;">x.ear</span><span style="color: #000000;">/</span><span style="color: #000000;">cxc3.war</span><span style="color: #000000;">/</span><span style="color: #000000;">WEB</span><span style="color: #000000;">-</span><span style="color: #000000;">INF</span><span style="color: #000000;">/</span><span style="color: #000000;">classes</span><span style="color: #000000;">/</span><span style="color: #000000;">cxc2sap_sql.xml</span></div> <br /> <span style="color: #000000;"><br /> <span style="background-color: #ff2828;"> 通过上述描述Q可以简单的得出一些推?/span>Q?br /> <span style="background-color: #5138ff;"><span style="background-color: #fefff0;"><span style="background-color: #b3ff90;">?Q?Q?/span></span></span><br /> 在应用服务器?/span><span style="color: #000000;">JBoss</span><span style="color: #000000;">中,加蝲</span>${ear_file}/${jar_file}的EJB容器 ?加蝲${ear_file}/${war_file}的Web容器间存在一定的关系Q根据ClassLoader的加载机Ӟ(x)当当前类加蝲器需要加载一个类的时候,首先h父的类加蝲器加载,如果父加蝲器无法找到要加蝲的类Q每个加载器仅仅在自己本w的classpathL要加载的c)Q才由当前类加蝲器来加蝲Q如果加载不到就报错?br /> Ҏ(gu)q个Q可认ؓ(f)EJB容器的ClassLoader起了Web容器的父UClassLoader的作用,卻I(x)h加蝲一个action classӞ当前cd载器是web容器Q但是web容器的ClassLoader委托其父U加载器来加载,l果其父亲加载ƈ加蝲成功了,所以不再加载本来正的${war_file}/WEB-INF/lib or ${war_file}/WEB-INF/classes下的真正的类?br /> <br /> <span style="background-color: #b3ff90;">?Q?/span><br /> q些输出信息则更充分的证明了当?{Class_name}.class.getClassLoader()的时候,真正起作用的cd载器便是父cd载器Q即使EJB容器的ClassLoaderQ从而得到的当前classpath?{ear_file}的\径?br /> <br /> <span style="background-color: #b3ff90;">回想q去l历Q?/span><br /> Zq些实验Q记得曾l遇到这L(fng)错误Q把struts.jar也放在了${ear_file}之下Q运行报错误?br /> 原因依然是类加蝲器的两个基本原理Q?br /> 1Q加载的委托机制Q见上面的分?br /> 2Q当一个类被某一个ClassLoader加蝲后,与其相关的类都由同一个ClassLoader加蝲<br />  于是得出如下l论QEJB容器加蝲了struts.jarQ当web容器的ClassLoader加蝲自己的action class的实现类的时候,需要Action基类Q但是根据默认的加蝲原理Q关联的cd该由同一个类加蝲器完成,现在Action基类被父U的加蝲器加载(相对于当前)QAction的实现类在当前的cd载器Q故此发生错误?br /> <br /> <br /> <br /> <img src ="http://www.tkk7.com/crazycy/aggbug/187056.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/crazycy/" target="_blank">crazycy</a> 2008-03-18 18:08 <a href="http://www.tkk7.com/crazycy/archive/2008/03/18/187056.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用属?Property)有空格的properties文ghttp://www.tkk7.com/crazycy/archive/2007/12/02/164648.htmlcrazycycrazycySun, 02 Dec 2007 08:00:00 GMThttp://www.tkk7.com/crazycy/archive/2007/12/02/164648.htmlhttp://www.tkk7.com/crazycy/comments/164648.htmlhttp://www.tkk7.com/crazycy/archive/2007/12/02/164648.html#Feedback4http://www.tkk7.com/crazycy/comments/commentRss/164648.htmlhttp://www.tkk7.com/crazycy/services/trackbacks/164648.html一、程?/p>
代码

二、属性文?br /> 文g一
PAYMENT AFTER DELIVERY=PAYMENT AFTER DELIVERY
PAYMENT BEFORE COLLECTION
=PAYMENT BEFORE COLLECTION
PAYMENT BEFORE COLLECTION
-SHELL=PAYMENT BEFORE COLLECTION
PAYMENT BEFORE DELIVERY
=PAYMENT BEFORE DELIVERY

文g?br />
property file with blank in key part

三、输?br /> 文g一的输?br />
Property--->>>>PAYMENT    Value--->>>>BEFORE DELIVERY=PAYMENT BEFORE DELIVERY

文g二的输出
output of key having blank

四、结?br /> 弃用XMLW一ơ启用属性文Ӟ是一个月前,于q度Q遂以Map代码中设|之Q?br /> 今看Properties Editor Plugin for Eclipse; 获得颜色提示 H然莯Q庆之记录之?

crazycy 2007-12-02 16:00 发表评论
]]>
java.util.List 真的?x)用么?看能作对?/title><link>http://www.tkk7.com/crazycy/archive/2007/09/14/145227.html</link><dc:creator>crazycy</dc:creator><author>crazycy</author><pubDate>Fri, 14 Sep 2007 11:55:00 GMT</pubDate><guid>http://www.tkk7.com/crazycy/archive/2007/09/14/145227.html</guid><wfw:comment>http://www.tkk7.com/crazycy/comments/145227.html</wfw:comment><comments>http://www.tkk7.com/crazycy/archive/2007/09/14/145227.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.tkk7.com/crazycy/comments/commentRss/145227.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/crazycy/services/trackbacks/145227.html</trackback:ping><description><![CDATA[<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> DynamicRemove {<br />   </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> List</span><span style="color: #000000;"><</span><span style="color: #000000;">String</span><span style="color: #000000;">></span><span style="color: #000000;"> generateList() {<br />   String[] figures </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> String[]{</span><span style="color: #000000;">"</span><span style="color: #000000;">1</span><span style="color: #000000;">"</span><span style="color: #000000;">, </span><span style="color: #000000;">"</span><span style="color: #000000;">2</span><span style="color: #000000;">"</span><span style="color: #000000;">, </span><span style="color: #000000;">"</span><span style="color: #000000;">3</span><span style="color: #000000;">"</span><span style="color: #000000;">, </span><span style="color: #000000;">"</span><span style="color: #000000;">4</span><span style="color: #000000;">"</span><span style="color: #000000;">, </span><span style="color: #000000;">"</span><span style="color: #000000;">5</span><span style="color: #000000;">"</span><span style="color: #000000;">, </span><span style="color: #000000;">"</span><span style="color: #000000;">6</span><span style="color: #000000;">"</span><span style="color: #000000;">, </span><span style="color: #000000;">"</span><span style="color: #000000;">7</span><span style="color: #000000;">"</span><span style="color: #000000;">, </span><span style="color: #000000;">"</span><span style="color: #000000;">8</span><span style="color: #000000;">"</span><span style="color: #000000;">, </span><span style="color: #000000;">"</span><span style="color: #000000;">9</span><span style="color: #000000;">"</span><span style="color: #000000;">};<br />   List</span><span style="color: #000000;"><</span><span style="color: #000000;">String</span><span style="color: #000000;">></span><span style="color: #000000;"> list </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> ArrayList</span><span style="color: #000000;"><</span><span style="color: #000000;">String</span><span style="color: #000000;">></span><span style="color: #000000;">();<br />     </span><span style="color: #0000ff;">for</span><span style="color: #000000;"> (String figure : figures) <br />       list.add(figure);<br />   </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> list;<br /> }<br /> <br /> </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> test1() {<br />   List</span><span style="color: #000000;"><</span><span style="color: #000000;">String</span><span style="color: #000000;">></span><span style="color: #000000;"> loads </span><span style="color: #000000;">=</span><span style="color: #000000;"> generateList();  <br />   </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (</span><span style="color: #0000ff;">null</span><span style="color: #000000;"> </span><span style="color: #000000;">!=</span><span style="color: #000000;"> loads </span><span style="color: #000000;">&&</span><span style="color: #000000;"> </span><span style="color: #000000;">!</span><span style="color: #000000;">loads.isEmpty()) {<br />     </span><span style="color: #0000ff;">for</span><span style="color: #000000;"> (String load : loads) {<br />       System.out.println(load);            <br />       </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (Integer.valueOf(load).intValue() </span><span style="color: #000000;">==</span><span style="color: #000000;">3</span><span style="color: #000000;">){<br />         loads.remove(load);                        System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">====</span><span style="color: #000000;">"</span><span style="color: #000000;"> </span><span style="color: #000000;">+</span><span style="color: #000000;"> loads.get(</span><span style="color: #000000;">2</span><span style="color: #000000;">));<br />       }<br />     }<br />             <br />     System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">size</span><span style="color: #000000;">"</span><span style="color: #000000;"> </span><span style="color: #000000;">+</span><span style="color: #000000;"> loads.size());    <br />   }<br /> }<br />     <br />     <br /> </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">static</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> main(String[] args) {<br />   DynamicRemove test </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> DynamicRemove();<br />   test.test1();<br /> }<br /> <br /> 输出为:(x)<br /> </span> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><img id="Code_Closed_Image_195220" onclick="this.style.display='none'; Code_Closed_Text_195220.style.display='none'; Code_Open_Image_195220.style.display='inline'; Code_Open_Text_195220.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedBlock.gif" alt="" align="top" height="16" width="11" /><img id="Code_Open_Image_195220" style="display: none;" onclick="this.style.display='none'; Code_Open_Text_195220.style.display='none'; Code_Closed_Image_195220.style.display='inline'; Code_Closed_Text_195220.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockStart.gif" alt="" align="top" height="16" width="11" /><span id="Code_Closed_Text_195220" style="border: 1px solid #808080; background-color: #ffffff;">你答对了?/span><span id="Code_Open_Text_195220" style="display: none;"><br /> <!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #000000;">[WARN ] Not using NPTL on a </span><span style="color: #000000;">2.6</span><span style="color: #000000;"> kernel. This configuration is not supported.<br /> Exception in thread </span><span style="color: #000000;">"</span><span style="color: #000000;">Main Thread</span><span style="color: #000000;">"</span><span style="color: #000000;"> java.util.ConcurrentModificationException<br />     at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:</span><span style="color: #000000;">449</span><span style="color: #000000;">)<br />     at java.util.AbstractList$Itr.next(AbstractList.java:</span><span style="color: #000000;">420</span><span style="color: #000000;">)<br />     at dynamicrmobjwhilelisting.DynamicRemove.test1(DynamicRemove.java:</span><span style="color: #000000;">17</span><span style="color: #000000;">)<br />     at dynamicrmobjwhilelisting.DynamicRemove.main(DynamicRemove.java:</span><span style="color: #000000;">35</span><span style="color: #000000;">)<br /> </span><span style="color: #000000;">1</span><span style="color: #000000;"><br /> </span><span style="color: #000000;">2</span><span style="color: #000000;"><br /> </span><span style="color: #000000;">3</span><span style="color: #000000;"><br /> </span><span style="color: #000000;">====</span><span style="color: #000000;">4</span></span></div> <br /> q样呢?<span style="color: #000000;"> <br /> </span> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><img id="Code_Closed_Image_195555" onclick="this.style.display='none'; Code_Closed_Text_195555.style.display='none'; Code_Open_Image_195555.style.display='inline'; Code_Open_Text_195555.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedBlock.gif" alt="" align="top" height="16" width="11" /><img id="Code_Open_Image_195555" style="display: none;" onclick="this.style.display='none'; Code_Open_Text_195555.style.display='none'; Code_Closed_Image_195555.style.display='inline'; Code_Closed_Text_195555.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockStart.gif" alt="" align="top" height="16" width="11" /><span id="Code_Closed_Text_195555" style="border: 1px solid #808080; background-color: #ffffff;">嘿嘿Q是q样?/span><span id="Code_Open_Text_195555" style="display: none;"><br /> <!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> test2() {<br />     List</span><span style="color: #000000;"><</span><span style="color: #000000;">String</span><span style="color: #000000;">></span><span style="color: #000000;"> loads </span><span style="color: #000000;">=</span><span style="color: #000000;"> generateList();  <br />     </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (</span><span style="color: #0000ff;">null</span><span style="color: #000000;"> </span><span style="color: #000000;">!=</span><span style="color: #000000;"> loads </span><span style="color: #000000;">&&</span><span style="color: #000000;"> </span><span style="color: #000000;">!</span><span style="color: #000000;">loads.isEmpty()) {<br />         </span><span style="color: #0000ff;">for</span><span style="color: #000000;"> (</span><span style="color: #0000ff;">int</span><span style="color: #000000;"> i </span><span style="color: #000000;">=</span><span style="color: #000000;"> loads.size() </span><span style="color: #000000;">-</span><span style="color: #000000;"> </span><span style="color: #000000;">1</span><span style="color: #000000;">; i </span><span style="color: #000000;">>=</span><span style="color: #000000;"> </span><span style="color: #000000;">0</span><span style="color: #000000;">; i</span><span style="color: #000000;">--</span><span style="color: #000000;">) {<br />                 System.out.println(loads.get(i));<br />          </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (Integer.valueOf(loads.get(i).toString()).intValue() </span><span style="color: #000000;">==</span><span style="color: #000000;"> </span><span style="color: #000000;">3</span><span style="color: #000000;">) {<br />                     loads.remove(i);<br />                     System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">====</span><span style="color: #000000;">"</span><span style="color: #000000;"> </span><span style="color: #000000;">+</span><span style="color: #000000;"> loads.get(</span><span style="color: #000000;">2</span><span style="color: #000000;">));<br />                 }<br />             }<br />             <br />             System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">size</span><span style="color: #000000;">"</span><span style="color: #000000;"> </span><span style="color: #000000;">+</span><span style="color: #000000;"> loads.size());<br />         }<br />     }</span></span></div> 输出呢?<br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><img id="Code_Closed_Image_195831" onclick="this.style.display='none'; Code_Closed_Text_195831.style.display='none'; Code_Open_Image_195831.style.display='inline'; Code_Open_Text_195831.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedBlock.gif" align="top" height="16" width="11" alt="" /><img id="Code_Open_Image_195831" style="display: none;" onclick="this.style.display='none'; Code_Open_Text_195831.style.display='none'; Code_Closed_Image_195831.style.display='inline'; Code_Closed_Text_195831.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" height="16" width="11" alt="" /><span id="Code_Closed_Text_195831" style="border: 1px solid #808080; background-color: #ffffff;">{案</span><span id="Code_Open_Text_195831" style="display: none;"><br /> <!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #000000;">9</span><span style="color: #000000;"><br /> </span><span style="color: #000000;">8</span><span style="color: #000000;"><br /> </span><span style="color: #000000;">7</span><span style="color: #000000;"><br /> </span><span style="color: #000000;">6</span><span style="color: #000000;"><br /> </span><span style="color: #000000;">5</span><span style="color: #000000;"><br /> </span><span style="color: #000000;">4</span><span style="color: #000000;"><br /> </span><span style="color: #000000;">3</span><span style="color: #000000;"><br /> </span><span style="color: #000000;">====</span><span style="color: #000000;">4</span><span style="color: #000000;"><br /> </span><span style="color: #000000;">2</span><span style="color: #000000;"><br /> </span><span style="color: #000000;">1</span><span style="color: #000000;"><br /> size8</span></span></div> <br /> <br /> </div> <img src ="http://www.tkk7.com/crazycy/aggbug/145227.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/crazycy/" target="_blank">crazycy</a> 2007-09-14 19:55 <a href="http://www.tkk7.com/crazycy/archive/2007/09/14/145227.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ClassLoader专题Q三Q:(x)引文http://www.tkk7.com/crazycy/archive/2007/05/05/115383.htmlcrazycycrazycyFri, 04 May 2007 18:03:00 GMThttp://www.tkk7.com/crazycy/archive/2007/05/05/115383.htmlhttp://www.tkk7.com/crazycy/comments/115383.htmlhttp://www.tkk7.com/crazycy/archive/2007/05/05/115383.html#Feedback0http://www.tkk7.com/crazycy/comments/commentRss/115383.htmlhttp://www.tkk7.com/crazycy/services/trackbacks/115383.html阅读全文

crazycy 2007-05-05 02:03 发表评论
]]>
U程vsq程---求职W记Q?Q?/title><link>http://www.tkk7.com/crazycy/archive/2007/02/05/97997.html</link><dc:creator>crazycy</dc:creator><author>crazycy</author><pubDate>Mon, 05 Feb 2007 06:34:00 GMT</pubDate><guid>http://www.tkk7.com/crazycy/archive/2007/02/05/97997.html</guid><wfw:comment>http://www.tkk7.com/crazycy/comments/97997.html</wfw:comment><comments>http://www.tkk7.com/crazycy/archive/2007/02/05/97997.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/crazycy/comments/commentRss/97997.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/crazycy/services/trackbacks/97997.html</trackback:ping><description><![CDATA[ <br /> <font style="BACKGROUND-COLOR: #ffa500">W一局<br /></font>[q程]<br />是程序的一ơ执行,<br />是资源分配的单位[x占CPU的调度单位]Q所有与该进E相关的资源Q打印机、内存)都被登记在PCB中,<br />拥有完整的虚拟地址I间<br /><br />[U程]<br />它属于一个进E?br />与资源分配无?br />与进E内的其它线E一起共享该q程的资?br /><br /><font style="BACKGROUND-COLOR: #ffff00">W二局<br /></font>[调度]<br />q程调度Ӟ不同q程拥有不同虚地址I间Q?br />同一q程内的不同U程׃n同一地址I间<br /><br /><font style="BACKGROUND-COLOR: #ffa500">W三局</font><br />[切换]<br />q程切换Ӟ涉及(qing)资源指针的保存和地址I间的变化等问题Q即切换q程上下文)<br />U程切换Ӟ不涉?qing)资源信息的保存和地址I间的变化等问题Q减了pȝ的开销<img src ="http://www.tkk7.com/crazycy/aggbug/97997.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/crazycy/" target="_blank">crazycy</a> 2007-02-05 14:34 <a href="http://www.tkk7.com/crazycy/archive/2007/02/05/97997.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>多?overridding)的分?--求职W记Q?Q?http://www.tkk7.com/crazycy/archive/2007/02/05/97903.htmlcrazycycrazycySun, 04 Feb 2007 16:36:00 GMThttp://www.tkk7.com/crazycy/archive/2007/02/05/97903.htmlhttp://www.tkk7.com/crazycy/comments/97903.htmlhttp://www.tkk7.com/crazycy/archive/2007/02/05/97903.html#Feedback0http://www.tkk7.com/crazycy/comments/commentRss/97903.htmlhttp://www.tkk7.com/crazycy/services/trackbacks/97903.html上篇Q?JAVA基础(一)Q多?overloading & overridding)的分?/font>

本篇只是强化和复?fn)?x)

1 多态只针对非finalҎ(gu)Q?br /> 不针对变量、finalҎ(gu)

2Ҏ(gu)[非final]是运行时对应对象
 变量、fianl是编译期间对应对?br />
3多态只能调用父cM有的Ҏ(gu)(向上扩展?
 不能调用父类中没有的Ҏ(gu)Q?br /> 不能调用子类中扩展父c[not overridding]Ҏ(gu)
 
4多态定义:(x)指的是用同一个实现接口,以实C同的对象实例
 多态好处:(x)多态让E序依赖接口或者抽象类Q而不是具体类



crazycy 2007-02-05 00:36 发表评论
]]>
ClassLoader专题Q一Q:(x)ClassLoader基础http://www.tkk7.com/crazycy/archive/2007/02/01/97350.htmlcrazycycrazycyThu, 01 Feb 2007 12:48:00 GMThttp://www.tkk7.com/crazycy/archive/2007/02/01/97350.htmlhttp://www.tkk7.com/crazycy/comments/97350.htmlhttp://www.tkk7.com/crazycy/archive/2007/02/01/97350.html#Feedback4http://www.tkk7.com/crazycy/comments/commentRss/97350.htmlhttp://www.tkk7.com/crazycy/services/trackbacks/97350.html

ClassLoader 专题Q一Q:(x) ClassLoader 基础

ClassLoader 专题Q二Q:(x)?/span> Servlet 容器?/span> ClassLoader 机制的妙?/span>
    ClassLoader专题Q三Q:(x)引文 

 

JVM启动Q会(x)形成3个类加蝲器组成的初始化加载器层次l构Q?br>bootstap classloader Q加载核心类Q?
        ||
extension classloaderQ加载ext(目录)Q即java.ext.dirs()Q?br>        ||
system classloader   Q加?classpath或者java.class.path或者CLASSPATHQ?/p>


ClassLoader机制Q?br>aQ全盘负责:(x)一个classloader加蝲一个class后,q个class所引用或者依赖的cMp个classloader载入Q除非显C的用另一个classloader载入
bQ委托机Ӟ(x)先由父加载器加蝲Q除非父加蝲器找不到时才从自qc\径中d?br>cQCache机制Qclassloader采用~存机制Q即先查cacheQ若cache中保存了q个classq接返回;若无Q才从文件读取和转化为classq放入cache

 

ClassLoader加蝲c顺序:(x)
1Q检查cache是否有该c:(x)
    11Q若有直接返?br>    12Q若无,h父类加蝲
        121) 若无?则从bootstap classloader加蝲
2Q加载:(x)
    21Q寻找class文gQ丛与此classloader相关的类路径中寻找)
    22Q从文g载入class
    23Q找不到则抛出ClassNotFoundeException
3Q扩展:(x)
    记蝲时即2Q,覆写findClass可以实现自己的蝲入策?br>    记蝲时即2Q,覆写loadClass来实现自q载入q程


如何实现q行时动态蝲入与更新
本质Q只要动态改cL索\径和清除classloader的cache已蝲入的classok
做法Q?br>1Q承ClassLoaderQ覆写loadClassҎ(gu)Q动态寻找class文g
2Q只要重C用一个新的类搜烦路径来new一个classloader可以,q样既更Ccȝ搜烦路径以便来蝲入新的classQ也更新生成了一个空白的cache


classloader载入的方?br>1QPre-loading 预先载入Q蝲入基c?br>2Qload-on-demand 按需求蝲?/p>


JDK为啥有两个JREQ?br>JDK中jre是运行java本n的程序,如javac
ProgramFileQ默认安装)中jre是运行用L(fng)写的javaE序



crazycy 2007-02-01 20:48 发表评论
]]>
java基础(?QJava同步机制之notify vs notifyAll http://www.tkk7.com/crazycy/archive/2007/01/24/95799.htmlcrazycycrazycyWed, 24 Jan 2007 12:14:00 GMThttp://www.tkk7.com/crazycy/archive/2007/01/24/95799.htmlhttp://www.tkk7.com/crazycy/comments/95799.htmlhttp://www.tkk7.com/crazycy/archive/2007/01/24/95799.html#Feedback0http://www.tkk7.com/crazycy/comments/commentRss/95799.htmlhttp://www.tkk7.com/crazycy/services/trackbacks/95799.html
wait-and-notify mechanismQ?br />1 wait & notify can never be out of synchronized block of the releated-object Qwait和notifyҎ(gu)必须在与?strong>对应的对?/strong>的同步块里调用)
2 wait can release & get the lock automatically

the difference between notify and notifyAll
1 notify is wake the thread which invoke the wait-method
2 notifyAll is wake all the thread waiting for the lock released
3 why can form the thread invoking the wait-method and threads waiting for the lock released?
   we know, if a synchronized method is invoked, all the other synchronized methods belong to the object can not be invoked, so the invoking threads must be blocked, and waiting the method can be invoke, so they all waite for the lock released in the list of waiting queue.
   a synchronized class is the same;
   when the notify method occurs, the waiting one who invoked wait() be wake;
   when the notifyAll method occurs, the waiting queue choose the most prior one to wake, can be the one invoking wait(), also can be the ones waiting the lock released;


what we should be care?
if one waiting thread is waked, its waiting condition may not be satisfied. and in the right way, it should wait continuely.
how we assure this route? 
--just as follows came from <Effective Java> and <Practical Java>
the former: Never invoke wait outside a loop
  eg: 
 
1synchronized(obj) {
2    while(<condition does not hold>{
3       wait(); 
4        // Perform action appropriate to condition
5       }

6 }

the later: Use spin locks to deal with wait and notifyAll


crazycy 2007-01-24 20:14 发表评论
]]>
java基础(?Q怎么寚w合对象按某个规则排序 Comparable vs Comparatorhttp://www.tkk7.com/crazycy/archive/2006/12/22/81516.htmlcrazycycrazycyThu, 21 Dec 2006 18:00:00 GMThttp://www.tkk7.com/crazycy/archive/2006/12/22/81516.htmlhttp://www.tkk7.com/crazycy/comments/81516.htmlhttp://www.tkk7.com/crazycy/archive/2006/12/22/81516.html#Feedback0http://www.tkk7.com/crazycy/comments/commentRss/81516.htmlhttp://www.tkk7.com/crazycy/services/trackbacks/81516.html
两者区?

1) Comparable接口只有一个方?compareTo(obj:Object):int
   Comparator接口有两个方? 
          compare(o1:Object, o2:Object):int;
          equals(obj:Object):boolean

    用法QCollections.sort(obj:Collection)

2) Comparable位于java.lang?br />   Comparator位于java.util?br />
3) Comparable做ؓ(f)更一般的接口,基本可实C自己的特定比?br />
    用法QCollections.sort(obj:Collection, new Compartor());

    用法QCollections.sort(obj:Collection, new Compartor(public int compare(o1:Object, o2:Object)){return n:int});

   Comparator更适合在没有实现Comparable的集合对象类?更像装的一U算?操作与法分离,应该是装饰模?Decorator Pattern)和访问者模?Visitor   Pattern)的体?br />


以下是引?br />

要实现排序功?一般有两种途径,q里对基本类型不适用,基本cd一般有Arrays中的静态方?

1.对象本n实现Comparable接口,那么该类的实例就是可以排序的.
有关Comparable:
http://blog.csdn.net/treeroot/archive/2004/09/09/99613.aspx
只要实现了Comparable接口,可以调用Collections的sortҎ(gu)寚w合中的元素排?

2.指定一个Comparator,也就是实CComparator的类的一个实?
但是Java本n只提供了一个Comparator的实?是Collections.reverseOrder().
该方法返回的是一个已l实CComparable接口的反?

看一下Comparator的全部内?

public interface Comparator {
  int compare(Object o1, Object o2);
  boolean equals(Object obj);
}
定义了两个方?其实我们一般都只需要实现compareҎ(gu)p?因ؓ(f)c都是默认从Objectl承
所以会(x)使用Object的equalsҎ(gu).
Comparator一般都作ؓ(f)一个匿名类出现,对于没有实现Comparable的对象的集合,排序的时?br />需要指定一个Comparator.

q里举例说明
对于实现了Comparable的类我们q最单的Integer
List list=new ArrayList();
list.add(new Integer(3));
list.add(new Integer(53));
list.add(new Integer(34));
Collections.sort(list);

对于没有实现Comparable?我们qObject,按照hashCode大小来排?
List list= new ArrayList();
list.add(new Object());
list.add(new Object());
list.add(new Object());
Collections.sort(list,new Comparator(){ public int compare(Object o1, Object o2){
  return (o1.hashCode()-o2.hashCode());
});



crazycy 2006-12-22 02:00 发表评论
]]>
ClassLoader专题Q二Q:(x)从Servlet容器看ClassLoader机制的妙?/title><link>http://www.tkk7.com/crazycy/archive/2006/11/24/83379.html</link><dc:creator>crazycy</dc:creator><author>crazycy</author><pubDate>Fri, 24 Nov 2006 14:20:00 GMT</pubDate><guid>http://www.tkk7.com/crazycy/archive/2006/11/24/83379.html</guid><wfw:comment>http://www.tkk7.com/crazycy/comments/83379.html</wfw:comment><comments>http://www.tkk7.com/crazycy/archive/2006/11/24/83379.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.tkk7.com/crazycy/comments/commentRss/83379.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/crazycy/services/trackbacks/83379.html</trackback:ping><description><![CDATA[<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong><span lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'"><a href="http://www.tkk7.com/crazycy/archive/2007/02/01/97350.html"><span style="COLOR: navy; TEXT-DECORATION: none; text-underline: none">ClassLoader</span> <span lang=EN-US style="COLOR: navy; FONT-FAMILY: 宋体; TEXT-DECORATION: none; mso-fareast-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; text-underline: none; mso-fareast-theme-font: minor-fareast"><span lang=EN-US>专题Q一Q:(x)</span> </span><span style="COLOR: navy; TEXT-DECORATION: none; text-underline: none">ClassLoader</span> <span lang=EN-US style="COLOR: navy; FONT-FAMILY: 宋体; TEXT-DECORATION: none; mso-fareast-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; text-underline: none; mso-fareast-theme-font: minor-fareast"><span lang=EN-US>基础</span> </span></a><o:p></o:p></span></strong></p> <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong><span lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'"><a href="http://www.tkk7.com/crazycy/archive/2006/11/24/83379.html"><span style="COLOR: navy; TEXT-DECORATION: none; text-underline: none">ClassLoader</span> <span lang=EN-US style="COLOR: navy; FONT-FAMILY: 宋体; TEXT-DECORATION: none; mso-fareast-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; text-underline: none; mso-fareast-theme-font: minor-fareast"><span lang=EN-US>专题Q二Q:(x)?/span> </span><span style="COLOR: navy; TEXT-DECORATION: none; text-underline: none">Servlet</span> <span lang=EN-US style="COLOR: navy; FONT-FAMILY: 宋体; TEXT-DECORATION: none; mso-fareast-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; text-underline: none; mso-fareast-theme-font: minor-fareast"><span lang=EN-US>容器?/span> </span><span style="COLOR: navy; TEXT-DECORATION: none; text-underline: none">ClassLoader</span> <span lang=EN-US style="COLOR: navy; FONT-FAMILY: 宋体; TEXT-DECORATION: none; mso-fareast-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; text-underline: none; mso-fareast-theme-font: minor-fareast"><span lang=EN-US>机制的妙?/span> </span></a></span></strong><br>    <a id=AjaxHolder_PostComment_ctl06_RelativePostsList_ctl01_Hyperlink1 href="http://www.tkk7.com/crazycy/archive/2007/05/05/115383.html"><font color=#000080><strong>ClassLoader专题Q三Q:(x)引文</strong></font></a> </p> <p>classloader有啥妙用Q?Q?<br>q个问题得从自定义的classloaderw上_(d)那自定义classloader~由是什么呢Q?br>告诉你:(x)大多是因为编译时无法预知q行旉要哪些类Q特别是app serverQ因此自定义classloaderQ运行时指定路径Q来加蝲q个路径下的class</p> <p><br>Ҏ(gu)说明<br>Ҏ(gu)说明1Q如果没有特D指定,用户自定义的classloader都把system classloader作ؓ(f)它的父加载器<br>Ҏ(gu)说明2Qjvm认ؓ(f)不同的classloade载入相同名字的class是不同的Q即使从同一个class文g载入</p> <p><br>classloader有啥妙用Q?Q?<br>看到Ҏ(gu)说明2Q你或许׃(x)感觉疑惑或者不爽;啥概念?<br>以servlet、ejb{容器来剖析q个问题Q?/p> <p>接口或者基cL入classpath                         <---------system classloader<br>执行Ӟ动态蝲入实现或者承这些接口或者基cȝ子类Q?lt;---------customized classloader<br>         ||<br>         ||<br>用customized classloader载入cLQ发现它有一个父cclassQextendsQ;<br>但是在蝲入它Ӟjvm先加载父cclassQ?q个父类是system classloader能识别的Q?Ҏ(gu)“委托机制”它将由system classloader来加载;<br>然后customized classloaderQ实际是system classloader来加载)再蝲入这个class,创徏一个实例,转型为父c;<br>jvm׃用system classloader再次载入父类classQ然后将此实例{型ؓ(f)q个父类classQ?/p> <p>q个q程加蝲了两个父cclassQ都是由system classloader载入Q即同一个classloader载入同一个文Ӟ造型不会(x)由异?/p> <p>web app server大概是这样工作的Q这栯入了Ml承了servlet的classq正运行它们,不管class是什么,都它们实例化Z个servlet class</p> <img src ="http://www.tkk7.com/crazycy/aggbug/83379.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/crazycy/" target="_blank">crazycy</a> 2006-11-24 22:20 <a href="http://www.tkk7.com/crazycy/archive/2006/11/24/83379.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>googleW试的|W(大家来仁者见仁哦Q?/title><link>http://www.tkk7.com/crazycy/archive/2006/10/18/75851.html</link><dc:creator>crazycy</dc:creator><author>crazycy</author><pubDate>Wed, 18 Oct 2006 03:37:00 GMT</pubDate><guid>http://www.tkk7.com/crazycy/archive/2006/10/18/75851.html</guid><wfw:comment>http://www.tkk7.com/crazycy/comments/75851.html</wfw:comment><comments>http://www.tkk7.com/crazycy/archive/2006/10/18/75851.html#Feedback</comments><slash:comments>22</slash:comments><wfw:commentRss>http://www.tkk7.com/crazycy/comments/commentRss/75851.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/crazycy/services/trackbacks/75851.html</trackback:ping><description><![CDATA[ <p>1 p|?Q说8点开始,考试旉100分钟 Q怎么都?Q?0交卷Q?点一到匆匆交卷了Q晚上h床上才发现错也;<br /><br />2 p|?Q把自个的生日又记错了;<br /><br />3 怕怕的发现Q发现mmq是可怕滴Q眼睁睁看着一个骗局Q哎Q也得}慎些以防上当受骗啊;</p> <p>题目如下Q?/p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /> <span style="COLOR: #000000">T(</span> <span style="COLOR: #000000">0</span> <span style="COLOR: #000000">)</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">1</span> <span style="COLOR: #008000">;</span> <span style="COLOR: #008000">T(1)=1;T(2)=2;T(n)=T(n-1)+T(n-2)+T(n-3);</span> <span style="COLOR: #008000"> <br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /> </span> <span style="COLOR: #000000">用最优方式求T(n)</span> <span style="COLOR: #008000">;<br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span> <span style="COLOR: #000000"> <br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />int T(int n) {<br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />}<br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />可以用最熟?zhn)的语a?/span> </div> <p> <br />在考场的第一个做?/p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"> <span style="COLOR: #008080"> 1</span> <img id="Codehighlighter1_15_195_Open_Image" onclick="this.style.display='none'; Codehighlighter1_15_195_Open_Text.style.display='none'; Codehighlighter1_15_195_Closed_Image.style.display='inline'; Codehighlighter1_15_195_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /> <img id="Codehighlighter1_15_195_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_15_195_Closed_Text.style.display='none'; Codehighlighter1_15_195_Open_Image.style.display='inline'; Codehighlighter1_15_195_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /> <span style="COLOR: #0000ff">public</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">class</span> <span style="COLOR: #000000"> T </span> <span id="Codehighlighter1_15_195_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.tkk7.com/images/dot.gif" /> </span> <span id="Codehighlighter1_15_195_Open_Text"> <span style="COLOR: #000000">{<br /></span> <span style="COLOR: #008080"> 2</span> <span style="COLOR: #000000"> <img id="Codehighlighter1_37_193_Open_Image" onclick="this.style.display='none'; Codehighlighter1_37_193_Open_Text.style.display='none'; Codehighlighter1_37_193_Closed_Image.style.display='inline'; Codehighlighter1_37_193_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /> <img id="Codehighlighter1_37_193_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_37_193_Closed_Text.style.display='none'; Codehighlighter1_37_193_Open_Image.style.display='inline'; Codehighlighter1_37_193_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /> </span> <span style="COLOR: #0000ff">public</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">int</span> <span style="COLOR: #000000"> t(</span> <span style="COLOR: #0000ff">int</span> <span style="COLOR: #000000"> n)</span> <span id="Codehighlighter1_37_193_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.tkk7.com/images/dot.gif" /> </span> <span id="Codehighlighter1_37_193_Open_Text"> <span style="COLOR: #000000">{<br /></span> <span style="COLOR: #008080"> 3</span> <span style="COLOR: #000000"> <img id="Codehighlighter1_53_70_Open_Image" onclick="this.style.display='none'; Codehighlighter1_53_70_Open_Text.style.display='none'; Codehighlighter1_53_70_Closed_Image.style.display='inline'; Codehighlighter1_53_70_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /> <img id="Codehighlighter1_53_70_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_53_70_Closed_Text.style.display='none'; Codehighlighter1_53_70_Open_Image.style.display='inline'; Codehighlighter1_53_70_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span> <span style="COLOR: #0000ff">if</span> <span style="COLOR: #000000"> (n </span> <span style="COLOR: #000000">==</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #000000">0</span> <span style="COLOR: #000000">) </span> <span id="Codehighlighter1_53_70_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.tkk7.com/images/dot.gif" /> </span> <span id="Codehighlighter1_53_70_Open_Text"> <span style="COLOR: #000000">{<br /></span> <span style="COLOR: #008080"> 4</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />   </span> <span style="COLOR: #0000ff">return</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #000000">1</span> <span style="COLOR: #000000">;<br /></span> <span style="COLOR: #008080"> 5</span> <span style="COLOR: #000000"> <img id="Codehighlighter1_89_106_Open_Image" onclick="this.style.display='none'; Codehighlighter1_89_106_Open_Text.style.display='none'; Codehighlighter1_89_106_Closed_Image.style.display='inline'; Codehighlighter1_89_106_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /> <img id="Codehighlighter1_89_106_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_89_106_Closed_Text.style.display='none'; Codehighlighter1_89_106_Open_Image.style.display='inline'; Codehighlighter1_89_106_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  }</span> </span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">else</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">if</span> <span style="COLOR: #000000"> (n </span> <span style="COLOR: #000000">==</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #000000">1</span> <span style="COLOR: #000000">) </span> <span id="Codehighlighter1_89_106_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.tkk7.com/images/dot.gif" /> </span> <span id="Codehighlighter1_89_106_Open_Text"> <span style="COLOR: #000000">{<br /></span> <span style="COLOR: #008080"> 6</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />   </span> <span style="COLOR: #0000ff">return</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #000000">1</span> <span style="COLOR: #000000">;<br /></span> <span style="COLOR: #008080"> 7</span> <span style="COLOR: #000000"> <img id="Codehighlighter1_125_142_Open_Image" onclick="this.style.display='none'; Codehighlighter1_125_142_Open_Text.style.display='none'; Codehighlighter1_125_142_Closed_Image.style.display='inline'; Codehighlighter1_125_142_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /> <img id="Codehighlighter1_125_142_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_125_142_Closed_Text.style.display='none'; Codehighlighter1_125_142_Open_Image.style.display='inline'; Codehighlighter1_125_142_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  }</span> </span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">else</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">if</span> <span style="COLOR: #000000"> (n </span> <span style="COLOR: #000000">==</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #000000">2</span> <span style="COLOR: #000000">) </span> <span id="Codehighlighter1_125_142_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.tkk7.com/images/dot.gif" /> </span> <span id="Codehighlighter1_125_142_Open_Text"> <span style="COLOR: #000000">{<br /></span> <span style="COLOR: #008080"> 8</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />   </span> <span style="COLOR: #0000ff">return</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #000000">2</span> <span style="COLOR: #000000">;<br /></span> <span style="COLOR: #008080"> 9</span> <span style="COLOR: #000000"> <img id="Codehighlighter1_149_189_Open_Image" onclick="this.style.display='none'; Codehighlighter1_149_189_Open_Text.style.display='none'; Codehighlighter1_149_189_Closed_Image.style.display='inline'; Codehighlighter1_149_189_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /> <img id="Codehighlighter1_149_189_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_149_189_Closed_Text.style.display='none'; Codehighlighter1_149_189_Open_Image.style.display='inline'; Codehighlighter1_149_189_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  }</span> </span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">else</span> <span style="COLOR: #000000"> </span> <span id="Codehighlighter1_149_189_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.tkk7.com/images/dot.gif" /> </span> <span id="Codehighlighter1_149_189_Open_Text"> <span style="COLOR: #000000">{<br /></span> <span style="COLOR: #008080">10</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />   </span> <span style="COLOR: #0000ff">return</span> <span style="COLOR: #000000"> t(n</span> <span style="COLOR: #000000">-</span> <span style="COLOR: #000000">1</span> <span style="COLOR: #000000">) </span> <span style="COLOR: #000000">+</span> <span style="COLOR: #000000"> t(n</span> <span style="COLOR: #000000">-</span> <span style="COLOR: #000000">2</span> <span style="COLOR: #000000">) </span> <span style="COLOR: #000000">+</span> <span style="COLOR: #000000"> t(n</span> <span style="COLOR: #000000">-</span> <span style="COLOR: #000000">3</span> <span style="COLOR: #000000">);<br /></span> <span style="COLOR: #008080">11</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  }</span> </span> <span style="COLOR: #000000"> <br /></span> <span style="COLOR: #008080">12</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /> }</span> </span> <span style="COLOR: #000000"> <br /> </span> <span style="COLOR: #008080">13</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span> </span> </div> <p>当时发现旉够用Q进行了公式推理Q但未得律的真谛<br />每个都与T(3)可以直接发生关系Q关pL2的幂ơ方Q但最l没有得出公?br />遂改q如下:(x)</p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"> <span style="COLOR: #008080"> 1</span> <img id="Codehighlighter1_15_190_Open_Image" onclick="this.style.display='none'; Codehighlighter1_15_190_Open_Text.style.display='none'; Codehighlighter1_15_190_Closed_Image.style.display='inline'; Codehighlighter1_15_190_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /> <img id="Codehighlighter1_15_190_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_15_190_Closed_Text.style.display='none'; Codehighlighter1_15_190_Open_Image.style.display='inline'; Codehighlighter1_15_190_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /> <span style="COLOR: #0000ff">public</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">class</span> <span style="COLOR: #000000"> T </span> <span id="Codehighlighter1_15_190_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.tkk7.com/images/dot.gif" /> </span> <span id="Codehighlighter1_15_190_Open_Text"> <span style="COLOR: #000000">{<br /></span> <span style="COLOR: #008080"> 2</span> <span style="COLOR: #000000"> <img id="Codehighlighter1_37_188_Open_Image" onclick="this.style.display='none'; Codehighlighter1_37_188_Open_Text.style.display='none'; Codehighlighter1_37_188_Closed_Image.style.display='inline'; Codehighlighter1_37_188_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /> <img id="Codehighlighter1_37_188_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_37_188_Closed_Text.style.display='none'; Codehighlighter1_37_188_Open_Image.style.display='inline'; Codehighlighter1_37_188_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /> </span> <span style="COLOR: #0000ff">public</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">int</span> <span style="COLOR: #000000"> t(</span> <span style="COLOR: #0000ff">int</span> <span style="COLOR: #000000"> n)</span> <span id="Codehighlighter1_37_188_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.tkk7.com/images/dot.gif" /> </span> <span id="Codehighlighter1_37_188_Open_Text"> <span style="COLOR: #000000">{<br /></span> <span style="COLOR: #008080"> 3</span> <span style="COLOR: #000000"> <img id="Codehighlighter1_53_70_Open_Image" onclick="this.style.display='none'; Codehighlighter1_53_70_Open_Text.style.display='none'; Codehighlighter1_53_70_Closed_Image.style.display='inline'; Codehighlighter1_53_70_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /> <img id="Codehighlighter1_53_70_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_53_70_Closed_Text.style.display='none'; Codehighlighter1_53_70_Open_Image.style.display='inline'; Codehighlighter1_53_70_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span> <span style="COLOR: #0000ff">if</span> <span style="COLOR: #000000"> (n </span> <span style="COLOR: #000000">==</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #000000">0</span> <span style="COLOR: #000000">) </span> <span id="Codehighlighter1_53_70_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.tkk7.com/images/dot.gif" /> </span> <span id="Codehighlighter1_53_70_Open_Text"> <span style="COLOR: #000000">{<br /></span> <span style="COLOR: #008080"> 4</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />   </span> <span style="COLOR: #0000ff">return</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #000000">1</span> <span style="COLOR: #000000">;<br /></span> <span style="COLOR: #008080"> 5</span> <span style="COLOR: #000000"> <img id="Codehighlighter1_89_106_Open_Image" onclick="this.style.display='none'; Codehighlighter1_89_106_Open_Text.style.display='none'; Codehighlighter1_89_106_Closed_Image.style.display='inline'; Codehighlighter1_89_106_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /> <img id="Codehighlighter1_89_106_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_89_106_Closed_Text.style.display='none'; Codehighlighter1_89_106_Open_Image.style.display='inline'; Codehighlighter1_89_106_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  }</span> </span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">else</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">if</span> <span style="COLOR: #000000"> (n </span> <span style="COLOR: #000000">==</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #000000">1</span> <span style="COLOR: #000000">) </span> <span id="Codehighlighter1_89_106_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.tkk7.com/images/dot.gif" /> </span> <span id="Codehighlighter1_89_106_Open_Text"> <span style="COLOR: #000000">{<br /></span> <span style="COLOR: #008080"> 6</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />   </span> <span style="COLOR: #0000ff">return</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #000000">1</span> <span style="COLOR: #000000">;<br /></span> <span style="COLOR: #008080"> 7</span> <span style="COLOR: #000000"> <img id="Codehighlighter1_125_142_Open_Image" onclick="this.style.display='none'; Codehighlighter1_125_142_Open_Text.style.display='none'; Codehighlighter1_125_142_Closed_Image.style.display='inline'; Codehighlighter1_125_142_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /> <img id="Codehighlighter1_125_142_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_125_142_Closed_Text.style.display='none'; Codehighlighter1_125_142_Open_Image.style.display='inline'; Codehighlighter1_125_142_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  }</span> </span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">else</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">if</span> <span style="COLOR: #000000"> (n </span> <span style="COLOR: #000000">==</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #000000">2</span> <span style="COLOR: #000000">) </span> <span id="Codehighlighter1_125_142_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.tkk7.com/images/dot.gif" /> </span> <span id="Codehighlighter1_125_142_Open_Text"> <span style="COLOR: #000000">{<br /></span> <span style="COLOR: #008080"> 8</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />   </span> <span style="COLOR: #0000ff">return</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #000000">2</span> <span style="COLOR: #000000">;<br /></span> <span style="COLOR: #008080"> 9</span> <span style="COLOR: #000000"> <img id="Codehighlighter1_149_184_Open_Image" onclick="this.style.display='none'; Codehighlighter1_149_184_Open_Text.style.display='none'; Codehighlighter1_149_184_Closed_Image.style.display='inline'; Codehighlighter1_149_184_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /> <img id="Codehighlighter1_149_184_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_149_184_Closed_Text.style.display='none'; Codehighlighter1_149_184_Open_Image.style.display='inline'; Codehighlighter1_149_184_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  }</span> </span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">else</span> <span style="COLOR: #000000"> </span> <span id="Codehighlighter1_149_184_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.tkk7.com/images/dot.gif" /> </span> <span id="Codehighlighter1_149_184_Open_Text"> <span style="COLOR: #000000">{<br /></span> <span style="COLOR: #008080">10</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />   </span> <span style="COLOR: #0000ff">return</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #000000">2</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #000000">*</span> <span style="COLOR: #000000"> t(n</span> <span style="COLOR: #000000">-</span> <span style="COLOR: #000000">1</span> <span style="COLOR: #000000">) </span> <span style="COLOR: #000000">-</span> <span style="COLOR: #000000"> t(n</span> <span style="COLOR: #000000">-</span> <span style="COLOR: #000000">3</span> <span style="COLOR: #000000">);<br /></span> <span style="COLOR: #008080">11</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  }</span> </span> <span style="COLOR: #000000"> <br /></span> <span style="COLOR: #008080">12</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /> }</span> </span> <span style="COLOR: #000000"> <br /> </span> <span style="COLOR: #008080">13</span> <span style="COLOR: #000000"> <img src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span> </span> </div> <p>晚上w床上,怎么可能q样直接呢?<br />H然惛_最L(fng)的一点就是重复数的计,应该q行保存Q?br />如果正向逐个求然后保存,可行Q?br />如果倒向如何保存Q尚未想?br />大家来仁者见仁一下哦Q有更好的思\的请指点Q?br />public class T {<br /> Map values = new HashMap();<br /> <br /> public int t(int n){<br />  int result = 0;<br />  if (n == 0) {<br />    result = 1;<br />  } else if (n == 1) {<br />   result = 1;<br />  } else if (n == 2) {<br />   result = 2;<br />  } else {<br />   result =  2 * t(n-1) - t(n-3);<br />  } <br />  return result;<br /> }<br />}<br /><br /></p> <img src ="http://www.tkk7.com/crazycy/aggbug/75851.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/crazycy/" target="_blank">crazycy</a> 2006-10-18 11:37 <a href="http://www.tkk7.com/crazycy/archive/2006/10/18/75851.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java基础(?QJava同步机制http://www.tkk7.com/crazycy/archive/2006/10/14/75085.htmlcrazycycrazycyFri, 13 Oct 2006 17:10:00 GMThttp://www.tkk7.com/crazycy/archive/2006/10/14/75085.htmlhttp://www.tkk7.com/crazycy/comments/75085.htmlhttp://www.tkk7.com/crazycy/archive/2006/10/14/75085.html#Feedback0http://www.tkk7.com/crazycy/comments/commentRss/75085.htmlhttp://www.tkk7.com/crazycy/services/trackbacks/75085.html方式有四U:(x)?/span> ThreadLocal ?/span> synchronized( ) ?/span> wait() ?/span> notify() ?/span> volatile

目的Q都是ؓ(f)了解军_U程中的对同一变量的访问冲H?br>


ThreadLocal
    .
?/span> ThreadLocal 保证不同U程拥有不同实例Q相同线E一定拥有相同的实例Q即为每一个用该变量的线E提供一个该变量值的副本Q每一个线E都可以独立改变自己的副本,而不是与其它U程的副本冲H?/span>

. ㈡优势:(x)提供了线E安全的׃n对象

. ㈢与其它同步机制的区别:(x)同步机制是ؓ(f)了同步多个线E对相同资源的ƈ发访问,是ؓ(f)了多个线E之间进行通信Q?/span> ThreadLocal 是隔d个线E的数据׃nQ从Ҏ(gu)上就不在多个U程之间׃n资源Q这样当然不需要多个线E进行同步了?/span>

. ㈣用技巧:(x)需要多个线E之间进行通信Q用同步机Ӟ如果需要隔d个线E之间的׃n冲突Q推荐?/span> ThreadLocal Q线E安全)

volatile
    .?/span>volatile 修饰的成员变量在每次被线E访问时Q都从共享内存中重读该成员变量的倹{而且Q当成员变量发生变化ӞU程变化值回写到׃n内存?br>.㈡优势:(x)q样在Q何时刻,两个不同的线EL看到某个成员变量的同一个倹{?/span>
. ㈢缘由:(x)Java
语言规范中指出:(x)Z获得最佳速度Q允许线E保存共享成员变量的U有拯Q而且只当U程q入或者离开同步代码块时才与׃n成员变量的原始值对比?br>         q样当多个线E同时与某个对象交互Ӟ必要注意到要让线E及(qing)时的得到׃n成员变量的变化?/span>
         ?/span> volatile 关键字就是提C?/span> VM Q对于这个成员变量不能保存它的私有拷贝,而应直接与共享成员变量交互?/span>
. ㈣用技巧:(x)在两个或者更多的U程讉K的成员变量上使用 volatile 。当要访问的变量已在 synchronized 代码块中Q或者ؓ(f)帔RӞ不必使用?/span>
                
׃使用 volatile 屏蔽掉了 VM 中必要的代码优化Q所以在效率上比较低Q因此一定在必要时才使用此关键字?br>
阐释Q?br>U程Z提高效率Q将某成员变?/span>(?/span>A)拯了一份(?/span>BQ,U程中对A的访问其实访问的?/span>B?/span>
只在某些动作时才q行A?/span>B的同步,因此存在A?/span>B不一致的情况?/span>volatile是用来避免q种情况的?/span>
volatile
告诉jvmQ?/span>它所修饰的变量不保留拯Q直接访问主内存中的Q也是上面说的A)

sleep()  vs wait() 
  sleep是线E类QThreadQ的Ҏ(gu)Q导致此U程暂停执行指定旉Q把执行Z(x)l其他线E,但是监控状态依然保持,到时后会(x)自动恢复?br>           调用sleep不会(x)释放对象锁?br>  wait是ObjectcȝҎ(gu)Q对此对象调用waitҎ(gu)D本线E放弃对象锁Q进入等待此对象的等待锁定池Q只有针Ҏ(gu)对象发出notifyҎ(gu)Q或notifyAllQ后本线E才
          q入对象锁定池准备获得对象锁q入q行状态?br>



===================2007-05-01引用如下内容===========

早在Java 1.2推出之时QJavaq_中就引入了一个新的支持:(x)java.lang.ThreadLocalQ给我们在编写多U程E序时提供了一U新的选择。用这个工L(fng)可以很简z地~写Z的多线E程序,虽然ThreadLocal非常有用Q但是似乎现在了解它、用它的朋友还不多?

  ThreadLocal是什?/strong>

  ThreadLocal是什么呢Q其实ThreadLocalq是一个线E的本地实现版本Q它q不是一个ThreadQ而是thread local variableQ线E局部变量)。也许把它命名ؓ(f)ThreadLocalVar更加合适。线E局部变量(ThreadLocalQ其实的功用非常单,是为每一个用该变量的线E都提供一个变量值的副本Q是每一个线E都可以独立地改变自q副本Q而不?x)和其它U程的副本冲H。从U程的角度看Q就好像每一个线E都完全拥有该变量。线E局部变量ƈ不是Java的新发明Q在其它的一些语a~译器实玎ͼ如IBM XL FORTRANQ中Q它在语a的层ơ提供了直接的支持。因为Java中没有提供在语言层次的直接支持,而是提供了一个ThreadLocal的类来提供支持,所以,在Java中编写线E局部变量的代码相对比较W拙Q这也许是线E局部变量没有在Java中得到很好的普及(qing)的一个原因吧?br>
  ThreadLocal的设?/strong>

  首先看看ThreadLocal的接口:(x)

  Object get() ; // q回当前U程的线E局部变量副?protected Object initialValue(); // q回该线E局部变量的当前U程的初始值void set(Object value); // 讄当前U程的线E局部变量副本的?br>
  ThreadLocal?个方法,其中值得注意的是initialValue()Q该Ҏ(gu)是一个protected的方法,昄是ؓ(f)了子c重写而特意实现的。该Ҏ(gu)q回当前U程在该U程局部变量的初始|q个Ҏ(gu)是一个gq调用方法,在一个线E第1ơ调用get()或者set(Object)时才执行Qƈ且仅执行1ơ。ThreadLocal中的实实现直接q回一个nullQ?br>
protected Object initialValue() { return null; }

  ThreadLocal是如何做Cؓ(f)每一个线E维护变量的副本的呢Q其实实现的思\很简单,在ThreadLocalcM有一个MapQ用于存储每一个线E的变量的副本。比如下面的CZ实现Q?br>
public class ThreadLocal
{
 private Map values = Collections.synchronizedMap(new HashMap());
 public Object get()
 {
  Thread curThread = Thread.currentThread();
  Object o = values.get(curThread);
  if (o == null && !values.containsKey(curThread))
  {
   o = initialValue();
   values.put(curThread, o);
  }
  return o;
 }

 public void set(Object newValue)
 {
  values.put(Thread.currentThread(), newValue);
 }

 public Object initialValue()
 {
  return null;
 }
}

  当然Q这q不是一个工业强度的实现Q但JDK中的ThreadLocal的实现M思\也类g此?br>
  ThreadLocal的?/strong>

  如果希望U程局部变量初始化其它|那么需要自己实现ThreadLocal的子cdƈ重写该方法,通常使用一个内部匿名类对ThreadLocalq行子类化,比如下面的例子,SerialNumcMؓ(f)每一个类分配一个序P(x)

public class SerialNum
{
 // The next serial number to be assigned

 private static int nextSerialNum = 0;
 private static ThreadLocal serialNum = new ThreadLocal()
 {
  protected synchronized Object initialValue()
  {
   return new Integer(nextSerialNum++);
  }
 };

 public static int get()
 {
  return ((Integer) (serialNum.get())).intValue();
 }
}

  SerialNumcȝ使用非常地单,因ؓ(f)get()Ҏ(gu)是static的,所以在需要获取当前线E的序号Ӟ单地调用Q?br>
int serial = SerialNum.get();

  卛_?br>
  在线E是zd的ƈ且ThreadLocal对象是可讉K的时Q该U程持有一个到该线E局部变量副本的隐含引用Q当该线E运行结束后Q该U程拥有的所以线E局部变量的副本都将失效Qƈ{待垃圾攉器收集?br>
  ThreadLocal与其它同步机制的比较

  ThreadLocal和其它同步机制相比有什么优势呢QThreadLocal和其它所有的同步机制都是Z解决多线E中的对同一变量的访问冲H,在普通的同步机制中,是通过对象加锁来实现多个线E对同一变量的安全访问的。这时该变量是多个线E共享的Q用这U同步机刉要很l致地分析在什么时候对变量q行dQ什么时候需要锁定某个对象,什么时候释放该对象的锁{等很多。所有这些都是因为多个线E共享了资源造成的。ThreadLocal׃另一个角度来解决多线E的q发讉KQThreadLocal?x)?f)每一个线E维护一个和该线E绑定的变量的副本,从而隔M多个U程的数据,每一个线E都拥有自己的变量副本,从而也没有必要对该变量进行同步了。ThreadLocal提供了线E安全的׃n对象Q在~写多线E代码时Q可以把不安全的整个变量装qThreadLocalQ或者把该对象的特定于线E的状态封装进ThreadLocal?br>
  ׃ThreadLocal中可以持有Q何类型的对象Q所以用ThreadLocal get当前U程的值是需要进行强制类型{换。但随着新的Java版本Q?.5Q将模版的引入,新的支持模版参数的ThreadLocal<T>cd从中受益。也可以减少强制cd转换Qƈ一些错误检查提前到了编译期Q将一定程度地化ThreadLocal的用?br>
  ȝ

  当然ThreadLocalq不能替代同步机Ӟ两者面向的问题领域不同。同步机制是Z同步多个U程对相同资源的q发讉KQ是Z多个U程之间q行通信的有效方式;而ThreadLocal是隔d个线E的数据׃nQ从Ҏ(gu)上就不在多个U程之间׃n资源Q变量)Q这样当然不需要对多个U程q行同步了。所以,如果你需要进行多个线E之间进行通信Q则使用同步机制Q如果需要隔d个线E之间的׃n冲突Q可以用ThreadLocalQ这极大地化你的程序,使程序更加易诅R简z?br>



crazycy 2006-10-14 01:10 发表评论
]]>JAVA基础(?Q函数执行顺?构造函敎ͼ多态,this指针)http://www.tkk7.com/crazycy/archive/2006/10/13/75015.htmlcrazycycrazycyFri, 13 Oct 2006 07:53:00 GMThttp://www.tkk7.com/crazycy/archive/2006/10/13/75015.htmlhttp://www.tkk7.com/crazycy/comments/75015.htmlhttp://www.tkk7.com/crazycy/archive/2006/10/13/75015.html#Feedback2http://www.tkk7.com/crazycy/comments/commentRss/75015.htmlhttp://www.tkk7.com/crazycy/services/trackbacks/75015.html1   abstract   class  Glyph { 2&...  阅读全文

crazycy 2006-10-13 15:53 发表评论
]]>
JAVA基础(?Qfor循环http://www.tkk7.com/crazycy/archive/2006/10/13/74889.htmlcrazycycrazycyThu, 12 Oct 2006 16:38:00 GMThttp://www.tkk7.com/crazycy/archive/2006/10/13/74889.htmlhttp://www.tkk7.com/crazycy/comments/74889.htmlhttp://www.tkk7.com/crazycy/archive/2006/10/13/74889.html#Feedback0http://www.tkk7.com/crazycy/comments/commentRss/74889.htmlhttp://www.tkk7.com/crazycy/services/trackbacks/74889.html----初始化工作的expr1;    
----判断expr2是否为真

如果为真
-----执行for?br />-----执行expr3
-----判断expr2是否为真
循环?br />
如果为假
-----不执行for?br />-----不执行expr3

CZQ?br />
 1public   class   Delta    {   
 2      static   boolean   foo(char   c)  {   
 3          System.out.print(c);   
 4          return   true;   
 5      }
   
 6      public   static   void   main(String[]   argv) {   
 7          int   i   =   0;   
 8          for   (foo('A');   foo('B')   &&   (i   <   2);   foo('C')) {   
 9              i++;   
10              foo('D');   
11          }
   
12      }
   
13}
  
{案


crazycy 2006-10-13 00:38 发表评论
]]>
JAVA基础(一)Q多?overloading & overridding)的分?/title><link>http://www.tkk7.com/crazycy/archive/2006/10/11/74622.html</link><dc:creator>crazycy</dc:creator><author>crazycy</author><pubDate>Wed, 11 Oct 2006 09:10:00 GMT</pubDate><guid>http://www.tkk7.com/crazycy/archive/2006/10/11/74622.html</guid><wfw:comment>http://www.tkk7.com/crazycy/comments/74622.html</wfw:comment><comments>http://www.tkk7.com/crazycy/archive/2006/10/11/74622.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.tkk7.com/crazycy/comments/commentRss/74622.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/crazycy/services/trackbacks/74622.html</trackback:ping><description><![CDATA[     摘要: < CZ1> 题目1 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> ...  <a href='http://www.tkk7.com/crazycy/archive/2006/10/11/74622.html'>阅读全文</a><img src ="http://www.tkk7.com/crazycy/aggbug/74622.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/crazycy/" target="_blank">crazycy</a> 2006-10-11 17:10 <a href="http://www.tkk7.com/crazycy/archive/2006/10/11/74622.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(送给初学?)Java学习(fn)之\Q不走弯路,是捷径 [转] http://www.tkk7.com/crazycy/archive/2006/10/09/74030.htmlcrazycycrazycyMon, 09 Oct 2006 03:56:00 GMThttp://www.tkk7.com/crazycy/archive/2006/10/09/74030.htmlhttp://www.tkk7.com/crazycy/comments/74030.htmlhttp://www.tkk7.com/crazycy/archive/2006/10/09/74030.html#Feedback1http://www.tkk7.com/crazycy/comments/commentRss/74030.htmlhttp://www.tkk7.com/crazycy/services/trackbacks/74030.html
在上一?/strong> 送给Java初学?Q常被问到这个问题,ȝ一下) ”中主要描述了几个常见问题,本篇引用|上一作品来l阐qjava学习(fn)之\?/strong>


Java学习(fn)之\Q不走弯路,是捷径 [转]


0Q引a
软g开发之路是充满荆棘与挑战之?也是充满希望之\。Java学习(fn)也是如此Q没有捷径可走。梦惛_《天龙八部》中虚竹一栯无崖子醍醐灌而轻松获得一甲子功力Q是很不现实的。每天Ԓ天大?天神啊,误l我一本葵花宝典吧"Q殊不知即你获得了葵花宝典Q除了受自宫其n之苦外,你也不一定成得了"东方不|"Q倒是?西方p|"的几率高一炏V?
"不走弯\Q就是捷?Q佛(jng)l说的不无道理?


1Q如何学?fn)程序设计?
Java是一U^収ͼ也是一U程序设计语aQ如何学好程序设计不仅仅适用于JavaQ对C++{其他程序设计语a也一L(fng)用。有~程高手认ؓ(f)QJava也好C也好没什么分别,拿来q。ؓ(f)什么他们能辑ֈ如此境界Q我x因ؓ(f)~程语言之间有共通之处,领会(x)了编E的_NQ自然能够做C通百通。如何学?fn)程序设计理所当然也有许多共通的地方?br /> 
1.1 培养兴趣
兴趣是能够让你坚持下ȝ动力。如果只是把写程序作生的手段的话Q你?x)活的很累,也太对不赯׃。多兛_一些行业趣事,多想想盖茨。不是提倡天天做白日梦,但h要是没有了梦惻I你觉得有味道吗?可能像许多深x地农民一P打打dQ喝喝功夫茶Q拜拜胦爷Q每个月有几万十几万甚x多的q帐Q凭I多Z"食利阶层"。你认ؓ(f)Q这h味道吗?有空多到一些程序员论坛转{Q你?x)发玎ͼ他们其实很乐观幽默,时不时?x)冒出智慧的火花?

1.2 慎选程序设计语a
h入错行Q女怕嫁错郎。初学者选择E序设计语言需要}慎对待。Y件开发不仅仅是掌握一门编E语a了事Q它q需要其他很多方面的背景知识。Y件开发也不仅仅局限于某几个领域,而是已经渗透到了各行各业几乎每一个角落?
如果你对g比较感兴,你可以学?fn)C语言/汇编语言Q进入硬件开发领域。如果你对电(sh)信的行业知识?qing)网l比较熟(zhn),你可以在C/C++{之上多花时_(d)以期q入?sh)信软g开发领域。如果你Ҏ(gu)作系l比较熟(zhn),你可以学?fn)C/Linux{等,为Linux内核开?驱动E序开?嵌入式开发打基础?
如果你想介入到应用范围最q泛的应用Y件开发(包括?sh)子商务电(sh)子政务pȝQ的话,你可以选择J2EE?NETQ甚至LAMPl合。每个领域要求的背景知识不一栗做应用软g需要对数据库等很熟(zhn)。MQ你需要根据自q特点来选择合适你的编E语a?br /> 
1.3 要脚t实?快餐式的学习(fn)不可?
先分享一个故事?
有一个小朋友Q他很喜Ƣ研I生物学Q很想知道那些蝴蝶如何从蛹壳里出来,变成蝴蝶便会(x)飞。有一ơ,他走到草原上面看见一个蛹Q便取了回家Q然后看着Q过了几天以后,q个蛹出了一条裂痕,看见里面的蝴蝶开始挣扎,x破蛹壳飞出来?q个q程达数时之久Q蝴蝶在蛚w面很辛苦地拼命挣扎,怎么也没法子走出来。这个小孩看着看着不忍心,想不如让我帮帮它吧Q便随手拿v剪刀在蛹上剪开Q蝴蝶破蛹而出?但蝴蝶出来以后,因ؓ(f)膀不够力,变得很臃肿,飞不h?
q个故事l我们的启示是:(x)Ʋ速则不达?
躁是现代h最普遍的心态,能怪谁Q也许是贫穷落后了这么多q的~故Q就像当q的大跃q一P都想大步跨入***MC会(x)。现在的软g公司、客戗政府、学校、培训机构等{到处I漫着躁之气。就拿我比较熟?zhn)的大q大工IT职业培训来说吧,居然打广告宣U?20多年的计机职业教育Q辽宁省十佳学校"Q殊不知中国计算机发展才几年QY件发展才几年Q居然去报名的学生不,直是藐视天下E序员。培训出来的“程序员”大多不知道OO,OPZ物?C会(x)环境如是Q我们不能改变,只能改变自己,闹市中的安宁QI珍c许多初学者C++/Java没开始学Q立马用VC/JBuilder,?x)用VC/JBuilder开发一个Hello WorldE序Q就忙不q的向世界宣告,"我会(x)软g开发了"Q简历上也大a不惭地写?_NVC/Java"。结果到软g公司面试时要么被三两下打发走了,要么被驳的体无完肤,无地自容。到处碰壁之后才知道捧v《C++~程思想》《Java~程思想》仔l钻研,早知如此何必当初呀?
"你现在讲I简单方便,你以后的路就长了"Q好象也是佛(jng)l中的劝戒?br />
1.4 多实?快实?
彭端淑的《ؓ(f)学一首示子侄》中有穷和尚与富和尚的故事?
从前Q四川边境有两个和尚Q一个IP一个有钱。一天,I和对富和说Q?我打去南v朝圣Q你看怎么P"富和说Q?q里dh几千里远Q你靠什么去呢?"I和说Q?我只要一个水钵,一个饭就够了?富和ؓ(f)隑֜_(d)(x)"几年前我打买条船dP可至今没LQ你q是别去吧!" 一q以后,富和还在ؓ(f)U赁船只{wQ穷和尚却已l从南v朝圣回来了?
q个故事可解Mؓ(f)QQ何事情,一旦考虑好了Q就要马上上路,不要{到准备周全之后Q再d事情。假如事情准备考虑周全了再上\的话Q别人恐怕捷_M。Y件开发是一门工E学U,注重的就是实践,"君子动口不动?对Y件开发h员来讲根本就是错误的Q他们提?动手至上"Q但别害怕,他们大多温文?dng)雅Q没有暴力們֐Q虽然有时候蓬头垢面的一?比尔盖茨"栗有前辈高h认ؓ(f)Q学?fn)编E的U诀是:(x)~程、编E、再~程Q笔者深表赞同。不仅要多实践,而且要快实践。我们在看书的时候,不要{到你完全理解了才动手敲代码Q而是应该在看书的同时敲代码,E序q行的各U情况可以让你更快更牢固的掌握知识点?

1.5 多参考程序代?
E序代码是Y件开发最重要的成果之一Q其中渗透了E序员的思想与灵。许多h被《仙剑奇侠传》中凄美的爱情故事感?(zhn)剧的结局更有一U缺憄。ؓ(f)什么要以?zhn)剧结?据说是因为写《仙剑奇侠传》的E序员失恋而安排了q样的结局Q他把自q感觉融入到游戏中Q却让众多的仙剑qh腕叹息?
多多参考代码例子,对Java而言有参考文献[4.3],有APIcȝ源代?JDK安装目录下的src.zip文g)Q也可以研究一些开源的软g或框架?

1.6 加强英文阅读能力
对学?fn)编E来_(d)不要求英? 但不能一点不?。最L(fng)像Java API文档(参考文献[4.4])q些东西q是要能看懂?q猜带懵都可以;旁边再开启一?金山词霸"。看多了׃(x)来熟l。在学Java的同时学?fn)英文,一双雕多好。另外好多Y仉要到英文|站下蝲Q你要能够找到它们,q些是最基本的要求。英语好对你学习(fn)有很大的帮助。口语好的话更有Z(x)q入理层,q而可以成为剥削程序员?周扒??

1.7 万不得已才请教别?
W者在Martix与Java论坛的在U辅导系l中解决学生问题时发玎ͼ大部分的问题学生E做思考就可以解决。请教别Z前,你应该先回答如下几个问题?
你是否在google中搜索了问题的解军_法?
你是否查看了Java API文档Q?
你是否查找过相关书籍Q?
你是否写代码试q?
如果回答都是"?的话Q而且q没有找到解军_法,再问别h不迟。要知道独立思考的能力对你很重要。要知道E序员的旉是很宝贵的?

1.8 多读好书
书中自有颜如玉。比?dng)盖茨是一个饱ȝ书的人。虽然没有读完大学,但九(ji)岁的时候比?dng)盖茨就已经d了所有的癄全书Q所以他_N天文、历双Ӏ地理等{各cdU,可以说比?茨不仅是当今世界上金q首富Q而且也可以称得上是知识的巨富?
W者在l学生上评时候经怼(x)l他们推荐书c,到后来学生实在忍无可忍开始抱怨,"天呐Q这么多书到什么时候才能看完了"Q?学Y件开发,感觉上了D"。这时候,我的回答一般是Q?别着急,什么时候带你们ȝ看我的书房,到现在每月花在技术书c上的钱400元,q在软g开发h员之中还只能够算是中{的"Q学生当场晕倒。(注:(x)q一部分学生是刚学Y件开发的Q?

1.9 使用合适的工具
工欲善其事必先利其器。Y件开发包含各U各L(fng)zdQ需求收集分析、徏立用例模型、徏立分析设计模型、编E实现、调试程序、自动化试、持l集成等{,没有工具帮忙可以说是寸步难行。工具可以提高开发效率,使Y件的质量更高BUG更少。组合称手的武器。到飞花摘叶皆可伤h的境界就很高了,无招胜有招,手中无剑心中有剑q样的境界几乎不可企?qing)?br />

2QY件开发学?fn)\U?
两千多年的儒家思想孔孟之道Q中庸的思想透入骨髓Q既不冒q也不保守ƈ非中怹道,而是扑֯学习(fn)软g开发的正确路线与规律?
从Y件开发h员的生规划来讲Q我们可以大致分Z个阶D,软g工程师→软g设计师→架构设计师或目理师。不惛_元帅的士兵不是好士兵Q不惛_架构设计师或目理师的E序员也不是好的E序员。我们应该努力往上走。让我们先整理一下开发应用Y仉要学?fn)的主要技术?
AQ基理论知识Q如操作pȝ、编译原理、数据结构与法、计机原理{,它们q不重要。如不想成ؓ(f)计算机科学家的话Q可以采?用到的时候再来学"的原则?
BQ一门编E语aQ现在基本上都是面向对象的语aQJava/C++/C#{等。如果做WEB开发的话还要学?fn)HTML/JavaScript{等?
CQ一U方法学或者说思想Q现在基本都是面向对象思想QOOA/OOD/设计模式Q。由此而衍生的Zlg开发CBD/面向斚w~程AOP{等?
DQ一U关pd数据库,ORACLE/SqlServer/DB2/MySQL{等
EQ一U提高生产率的IDE集成开发环境JBuilder/Eclipse/VS.NET{?
FQ一UUML建模工具Q用ROSE/VISIO/钢笔q行建模?
GQ一UY件过E,RUP/XP/CMM{等Q通过软gq程来组lY件开发的众多zdQ开发流E专业化规范化。当然还有其他的一些Y件工E知识?
HQ项目管理、体pȝ构、框架知识?
正确的\U应该是QB→C→E→F→G→H?
q需要补充几点:(x)
1Q.对于A与C要补充的是,我们应该在实践中逐步领?zhn)~程理论与编E思想。新技术虽然不断涌玎ͼ更新速度令hD燎ؕN看花Q但万变不离其宗Q编E理Z~程思想的变化却很慢。掌握了~程理论与编E思想你就?x)有拨云见日之感。面向对象的思想在目前来讲是相当关键的,是强势技术之一Q在上面需要多投入旉Q给你的回报也会(x)让你惊喜?
2Q.对于数据库来说是独立学习(fn)的,q个时机q你来军_吧?
3Q.~程语言作ؓ(f)学习(fn)软g开发的ȝQ而其余的作ؓ(f)辅线?
4Q.软g工程师着重于B、C、E、DQY件设计师着重于B、C、E、D、FQ架构设计师着重于C、F、H?br /> 

3Q如何学?fn)Java?
3.1 Java学习(fn)路线
3.1.1 基础语法?qing)Java原理
基础语法和Java原理是地基,地基不牢靠,犹如沙地上徏摩天大厦Q是相当危险的。学?fn)Java也是如此Q必要有扎实的基础Q你才能在J2EE、J2ME领域游刃有余。参加SCJPQSUN公司认证的JavaE序员)考试不失Z个好Ҏ(gu)Q原因之一是ؓ(f)了对得v你交?200大洋考试费,你会(x)更努力学?fn),原因之二是SCJP考试能够让你把基打得很牢靠,它要求你跟JDK一L(fng)(zhn)Java基础知识Q但是你千万不要认ؓ(f)考过了SCJP有多了不vQ就能够获得软g公司的青睐,p够获取高薪,q样的想法也是很危险的。获?真正"的SCJP只能证明你的基础q过得去Q但d际开发还有很长的一D\要走?

3.1.2 OO思想的领(zhn)?
掌握了基语法和JavaE序q行原理后,我们可以用Java语言实现面向对象的思想了。面向对象,是一U方法学;是独立于语言之外的编E思想;是CBDZlg开发的基础;属于强势技术之一。当以后因工作需要{到别的面向对象语a的时候,你会(x)感到特别的熟(zhn)亲切,学v来像喝凉水这么简单?
使用面向对象的思想q行开发的基本q程是:(x)
●调查收集需求?
●徏立用例模型?
●从用例模型中识别分析类?qing)类与类之间的静态动态关p,从而徏立分析模型?
●细化分析模型到设计模型?
●用具体的技术去实现?
●测试、部|Ӏȝ?

3.1.3 基本API的学?
q行软g开发的时候,q不是什么功能都需要我们去实现Q也是l典名言所说的"不需要重新发明轮?。我们可以利用现成的cR组件、框架来搭徏我们的应用,如SUN公司~写好了众多cdC些底层功能,以及(qing)我们下蝲q来的JAR文g中包含的c?我们可以调用cM的方法来完成某些功能或承它。那么这些类中究竟提供了哪些Ҏ(gu)l我们用?Ҏ(gu)的参C数及(qing)cd是?cȝ构造器需不需要参敎ͼM可能SUN公司的工E师打国际长途甚至飘?gu)z过h告诉你他~写的类该如何用吧。他们只能提供文档给我们查看QJava DOC文档Q参考文?.4Q就是这L(fng)文档Q它可以说是E序员与E序员交的文档?
基本API指的是实C一些底层功能的c,通用性较强的APIQ如字符串处?输入输出{等。我们又把它成ؓ(f)cd。熟(zhn)API的方法一是多查Java DOC文档Q参考文?.4Q,二是使用JBuilder/Eclipse{IDE的代码提C功能?

3.1.4 特定API的学?
Java介入的领域很q泛Q不同的领域有不同的APIQ没有h熟?zhn)所有的APIQ对一般h而言只是熟?zhn)工作中要用到的API。如果你做界面开发,那么你需要学?fn)Swing/AWT/SWT{APIQ如果你q行|络游戏开发,你需要深入了解网lAPI/多媒体API/2D3D{;如果你做WEB开发,需要熟(zhn)Servlet{API啦。MQ需要根据工作的需要或你的兴趣发展方向去选择学习(fn)特定的API?

3.1.5 开发工L(fng)用法
在学?fn)基语法与基本的面向对象概念Ӟ从锻Da熟练E度的角度考虑Q我们推荐用的工具是Editplus/JCreator+JDK,q时候不要急于上手JBuilder/Eclipse{集成开发环境,以免q于xIDE的强大功能而分散对Java技术本w的注意力。过了这一阶段你就可以开始熟(zhn)IDE了?
E序员日常工作包括很多活动,~辑、编译及(qing)构徏、调试、单元测试、版本控制、维持模型与代码同步、文档的更新{等Q几乎每一Ҏ(gu)动都有专门的工具Q如果独立用这些工L(fng)话,你将?x)很痛苦Q你需要在堆满工具的Q务栏上不断的切换Q效率很低下Q也很容易出错。在JBuilder、Eclipse{IDE中已l自动集成编辑器、编译器、调试器、单元测试工具JUnit、自动构建工具ANT、版本控制工具CVS、DOC文档生成与更新等{,甚至可以把UML建模工具也集成进去,又提供了丰富的向导帮助生成框架代码,让我们的开发变得更L。应该说IDE发展的趋势就是集成Y件开发中要用到的几乎所有工兗?
从开发效率的角度考虑Q用IDE是必l之路,也是从一个学生到一个职业程序员转变的里E碑?
Java开发用的IDE主要有Eclipse、JBuilder、JDeveloper、NetBeans{几U;而Eclipse、JBuilder占有的市Z额是最大的。JBuilder在近几年来一直是Java集成开发环境中的霸主,它是由备受程序员敬的Borland公司开发,在硝烟I漫的Java IDE大战?以其快速的版本更新击|IBM的Visual Age for Java{而成׃番伟业。IBM在Visual Age for Java上已l无利可图之下,q脆之贡献l开源社区,成ؓ(f)Eclipse的前w,真所?x花明又一?。ʎ火重生的Eclipse以其开攑ּ的插件扩展机制、免费开源获得广大程序员Q包括几乎所有的骨灰U程序员Q的青睐Q极具发展潜力?

3.1.6 学习(fn)软g工程
对小型项目而言Q你可能认ؓ(f)软g工程没太大的必要。随着目的复杂性越来越高,软g工程的必要性才?x)体现出来。参?软g开发学?fn)\U?节?

3.2学习(fn)要点
立的学?fn)\U之后,我们q需要ȝ一下Java的学?fn)要点,q些要点在前文多多少提到过Q只是笔者觉得这些地方特别要注意才对它们q行汇总,不要嫌我婆婆妈妈啊?br /> 
3.2.1勤查API文档
当程序员~写好某些类Q觉得很有成感,x它A(ch)献给各位苦难的同行。这时候你要?Javadoc"工具Q包含在JDK中)生成标准的Java DOC文档,供同行用。J2SE/J2EE/J2ME的DOC文档是程序员与程序员交流的工P几乎人手一份,除了菜鸟之外。J2SE DOC文档官方下蝲地址Q?a href="http://java.sun.com/j2se/1.5.0/download.jspQ你可以到google搜烦CHM版本下蝲。也可以在线查看Qhttp://Java.sun.com/j2se/1.5.0/docs/api/index.html? target="_blank">http://Java.sun.com/j2se/1.5.0/down...pi/index.html?/font>
对待DOC文档要像毛主席语录,早上起床念一遍,吃饭睡觉前念一遍?
当需要某功能的时候,你应该先查相应的DOC文档看看有没有现成的实现Q有的话׃必劳费心了直接用就可以了,找不到的时候才考虑自己实现。用步骤一般如下:(x)
●找特定的包Q包一般根据功能组l?
●找需要用类Q类命名规范的话我们q的名字可猜出一二?
●选择构造器Q大多数使用cȝ方式是创建对象?
●选择你需要的Ҏ(gu)?

3.2.2 查书/google->写代码测?>查看源代?>h别h
当我们遇到问题的时候该如何解决Q?
q时候不要急着问别人,太简单的问题Q没l过思考的问题Q别Z(x)因此而瞧不v你。可以先找找书,到google中搜一下看看,l大部分问题基本p决了。而像"某些c?Ҏ(gu)如何使用的问?QDOC文档是{案。对某些知识Ҏ(gu)疑惑是,写代码测试一下,?x)给你留下深ȝ印象。而有的问题,你可能需要直接看API的源代码验证你的x。万不得已才去请教别人?br /> 
3.2.3学习(fn)开源Y件的设计思想
Java领域有许多源代码开攄工具、组件、框ӞJUnit、ANT、Tomcat、Struts、Spring、Jive论坛、PetStore宠物店等{多如牛毛。这些可是前辈给我们留下的瑰宝呀。入宝山而空手归Q你心甘吗?对这些工兗框架进行分析,领会(x)其中的设计思想Q有朝一日说不定你也能写一个XXX框架什么的Q风光一把。分析开源Y件其实是你提高技术、提高实战能力的便捷Ҏ(gu)?

3.2.4 规范的重要?
没有规矩Q不成方圆。这里的规范有两层含义。第一层含义是技术规范,多到http://www.jcp.org下蝲JSRXXX规范Q?..请参?.2.2节?br />
3.2.5 不局限于Java
很不q,很幸q,要学?fn)的东西q有很多。不q的是因学的东西太多且多变,没时间陪老婆家h或女朋友Q导致n心疲惫,严重者甚臛_致抑郁症。幸q的是别抢你饭碗l非易事Q他们或她们需要付出很多才能达成心ѝ?
Java不要孤立地去学习(fn)Q需要综合学?fn)数据结构、OOP、Y件工E、UML、网l编E、数据库技术等知识Q用横向U向的比较联想的方式d?fn)?x)更有效。如学习(fn)Java集合的时候找数据l构的书看看Q学JDBC的时候复?fn)数据库技术;采取的依然是"需要的时候再?的原则?


4Q结束语
需要强调的是,学习(fn)软g开发确实有一定的隑ֺQ也很辛苦,需要付出很多努力,但千万不要半途而废。本文如果能对一直徘徊在Java殿之外的朋友有所帮助的话Q笔者也ƣ慰了。哈哈,怎么听v来老气横秋呀Q没办法Q在?sh)脑的长期辐之下,都快变成老头了。最后奉劝各位程序员其是MME序员,完成工作后赶快远ȝ(sh)脑,据《胡播ؕ报》报道,?sh)脑辐射会(x)在白皙的皮肤上面点~一些小黑点Q看h鲜艳无比…?(文章提到的大q大工IT培训。本人没有Q何攻ȝ意?


crazycy 2006-10-09 11:56 发表评论
]]>
U程中的current thread not owner异常错误http://www.tkk7.com/crazycy/archive/2006/10/08/73896.htmlcrazycycrazycySun, 08 Oct 2006 11:21:00 GMThttp://www.tkk7.com/crazycy/archive/2006/10/08/73896.htmlhttp://www.tkk7.com/crazycy/comments/73896.htmlhttp://www.tkk7.com/crazycy/archive/2006/10/08/73896.html#Feedback5http://www.tkk7.com/crazycy/comments/commentRss/73896.htmlhttp://www.tkk7.com/crazycy/services/trackbacks/73896.html 非常感谢你的阅读Q如果你觉得好或者对你有帮助Q请U极l一个留a反馈以示鼓励?/font> 

多线E常用的一些方? wait(),wait(long),notify(),notifyAll(){?br />
q些Ҏ(gu)是当前类的实例方?

wait()      是持有对象锁的U程释放?
wait(long)是持有对象锁的U程释放锁时间ؓ(f)long(毫秒)?再次获得?wait()和wait(0){h(hun);
notify()    是唤醒一个正在等待该对象锁的U程,如果{待的线E不止一?那么被唤醒的U程由jvm定;
notifyAll  是唤醒所有正在等待该对象锁的U程.

q且应该优先使用notifyAll()Ҏ(gu),因ؓ(f)唤醒所有线E比唤醒一个线E更Ҏ(gu)让jvm扑ֈ最适合被唤醒的U程.

对于上述Ҏ(gu),只有在当前线E中才能使用,否则报运行时错误java.lang.IllegalMonitorStateException: current thread not owner.

从实现角度来分析Q?br />在线E调用wait()Ҏ(gu)Ӟ需要把它放C个同步段?/font>Q即应该在调用前使用
1synchroed(this){
2  thread.wait();
3  
4}

5

否则会(x)出现"java.lang.IllegalMonitorStateException: current thread not owner"的异常?br />

Thanks very much to visit blog,  welcome your feedback,  your feedback is the Driver && Power to me

crazycy 2006-10-08 19:21 发表评论
]]>
送给Java初学?Q常被问到这个问题,ȝ一下)http://www.tkk7.com/crazycy/archive/2006/07/07/57106.htmlcrazycycrazycyFri, 07 Jul 2006 04:38:00 GMThttp://www.tkk7.com/crazycy/archive/2006/07/07/57106.htmlhttp://www.tkk7.com/crazycy/comments/57106.htmlhttp://www.tkk7.com/crazycy/archive/2006/07/07/57106.html#Feedback0http://www.tkk7.com/crazycy/comments/commentRss/57106.htmlhttp://www.tkk7.com/crazycy/services/trackbacks/57106.html只针对一些朋友的问题Q写一些自q心得Q自pq的路的l验整理出来Q?/span>share之,姑妄a之姑妄听?br />
1.
初学者学?/span>JAVA用哪本说好?

个h觉得Q初学者因为基薄弱Q从别h那里得到的徏议往往有两U情况:(x)

一是经怹c,l典书籍对于初学者往往q不适合Q?/span>

二可能是Ҏ(gu)感到好的Q但是处于的赯U不一P未必适合Q?/span>

      我觉得初学者应该充分利用手头或者朋友或者从书店C本,感觉自己能接受的Q然后好好的M下,最好是多遍Q这样下来你q道什么适合自己了,q个时候听取的往往才可以奏效。毕竟有了这个缓冲过E,CQ这个缓冲过E绝Ҏ(gu)重要的?/span>

      试想Q许多h把自ql验告诉你,是ؓ(f)了让你少走弯路;你经历过的会(x)觉得有道理;你没有经历的Q往往体会(x)不到Q经历了后才后?zhn)没有听从当初的徏议。初学者入门也是一L(fng)道理?/span>

      回想当时入门javaӞ只有c的理论基Q把自己学校老师写的一?/span>java书在一q左右的旉内读?/span>7?/span>(2002q网l上java资料相对q是匮乏?/span>)Q书上标记的密密麻麻Q突焉qL(fng)灌顶豁然开朗了Q就入门了?/span>

2. 初学者应该用什么工P对于初学都来说是?/span>jdk比较好,q是?/span>eclips比较好呢Q?/span>

如果说工P推荐Eclipse?/span>NetBeanQ而不推荐JBuilder了?/span>

不伤?/span>JBuilder拥者,我从JB6用到2006Q也是一直捍?/span>JB的。但是现在的Eclipse发展的真的不错,而且是开元的Q所以推荐?/span>

NetBean5之前Q是非常鄙视的,C5后还Z错的Q与E可以有的一|也推荐?/span>

但对新手Q更推荐?/span>JDK+Editplus+JavaDoc的;在命令行下运行。ؓ(f)什么?所有的配置文g和代码推荐自己手写,q样对于初学者可以弄清楚原理。因?/span>IDE工具往往自动l你生成了,往往初学者得不到是其工作原理是怎么q行?


3.  初学者是不是应该x语言底层的东西?

x语言底层的东西,对于以后的深入学?fn)很重要的?/span>

当然基础也很重要?/span>

问题是不?x)走的时候,惌g太费心力了?/span>

q里需要辩证的看,Z吃饭Q就得符合或者适应时下业界的趋势;Z更好的发?/span>必须深入下去Q深入下L者ؓ(f)了以后的发展靠的是个人的努力。但是没有经验的累积以及(qing)大量代码的编写,x入下去近乎不可能?/span>

所以对初学者来_(d)唯一的就是脚t实圎ͼ写,写,写。篏U后pd解决问题的办法,形成解决问题的能力后Q就能在以后的学?fn)\途上更进一步?/span>

初学者可以不要盯着架构、模式之cȝQ但是在一定的代码量后Q都要反复的思考,是否可以抽取出来形成自己的一些公用的c,是否可以做成W合自己?fn)惯的开发包Q反复这个过E后Q在h先行者,或者在|络上查扄x面的讨论Q比?/span>JavaEyeQ,便会(x)得到一个质的升华?/span>

如果代码量篏计到4w行左叛_Q你再去看你看不懂的书,?x)发现很有心得或者豁然开朗了。当然如果这个过E缺乏了思考和ȝQ或许另当别论?/span>

     ?记得与一个很有功底的朋友在网上交时,他说的一句话,让我感触颇深:其实E序是不断试出来?...


  送给初学者(二)Q?/strong>http://www.tkk7.com/crazycy/archive/2006/10/09/74030.html



crazycy 2006-07-07 12:38 发表评论
]]>
又是48Q?9JDK版本不兼容(Unsupported major.minor version 49.0Q?pd?http://www.tkk7.com/crazycy/archive/2006/06/03/50150.htmlcrazycycrazycySat, 03 Jun 2006 09:02:00 GMThttp://www.tkk7.com/crazycy/archive/2006/06/03/50150.htmlhttp://www.tkk7.com/crazycy/comments/50150.htmlhttp://www.tkk7.com/crazycy/archive/2006/06/03/50150.html#Feedback5http://www.tkk7.com/crazycy/comments/commentRss/50150.htmlhttp://www.tkk7.com/crazycy/services/trackbacks/50150.html 非常感谢你的阅读Q如果你觉得好或者对你有帮助Q请U极l一个留a反馈以示鼓励?/font> 

倒霉的孩子,看过本系列的W一?/a>之后,你搞定了?!


估计有许多h依然不能;但是IDE环境中的l对没有问题Q?br />
可是dIDEQJBuilder、Eclipse+MyEclipseQ,只在Tomcat下运行依然不行,是不是?Q不要问是不是Tomcat5.0pd不支持JDK1.5Q我?a href="../archive/2006/05/31/49225.html">W一?/a>中已l告诉你怎么q了Q可是ؓ(f)啥还不行呢?Q甚x人安装、卸载了好几ơJDK1.4 JDK1.5Q可怜啊Q抱一起哭吧;我也遇到了这个问题?br />
在捣鼓了一后Qȝ如下Q?br />只在Tomcat下运行,但是依然出现“Unsupported major.minor version 49.0”,我捣鼓了大概120分钟Q?br />   1. java -version 看显C的JDK版本
   2. 如果昄版本?.5Q但q是不能q行Q则必须验证如下两点Q?br />          * 是否?a href="../archive/2006/05/31/49225.html">W一?/a>教给你的格式做了Q(没有的话Q我则白白ȝ了,哎)
          * 查看注册表,修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft下的关于1.4的jre和jvm的\径信息改?.5的jdk的即可?br />

估计q是不行?br />为啥Q因Z安装Tomcat5.0pd时指定了JRE了啊Q难道你以ؓ(f)环境变量里修改了O(jin)K了么Q?br />
不是q样的。你q入Tomcat5.0的安装目录,bin下是不是有个tomcat5w.exe文gQ你打开看看java标签?br />
看到Java Virtual Machineq个选项是什么了吧? 不是JDK1.5?br />q等着q什么?Q?修改Q然后开始喝香槟庆祝郁闷解除了吧


   Thanks very much to visit blog,  welcome your feedback,  your feedback is the Driver && Power to me

crazycy 2006-06-03 17:02 发表评论
]]>
又是48Q?9JDK版本不兼容(Unsupported major.minor version 49.0Q?pd一)http://www.tkk7.com/crazycy/archive/2006/05/31/49225.htmlcrazycycrazycyWed, 31 May 2006 05:26:00 GMThttp://www.tkk7.com/crazycy/archive/2006/05/31/49225.htmlhttp://www.tkk7.com/crazycy/comments/49225.htmlhttp://www.tkk7.com/crazycy/archive/2006/05/31/49225.html#Feedback11http://www.tkk7.com/crazycy/comments/commentRss/49225.htmlhttp://www.tkk7.com/crazycy/services/trackbacks/49225.html 非常感谢你的阅读Q如果你觉得好或者对你有帮助Q请U极l一个留a反馈以示鼓励?/font> 

随着JDK版本的升U,其是JDK1.4升到JDK5.0Q在JavaE序中我们往往?x)遭遇两U尴:(x)
1 Unsupported major.minor version 49.0
2 当前的版本是49.0Q需要的?8.0Q大概是q个意思)

W一U情况在java应用E序、web应用E序都有遇到
W二U情冉|遇到的是表现在web应用E序?br />
问题分析Q?br />48Q?9是Java~译器内部的版本P48表示是用JDK1.4来编译运行程序的Q?9表示是用JDK~译q行E序?br />
问题解决Q?br />
  • Ҏ(gu)一
    • 方式Q重新用JDK1.4~译Qƈ在JDK1.4的环境下Q包括修改JAVA_HOME,PATH,CLASSPATH,Tomcat使用的JDKQ运行;
    • 效果Qjava应用E序可行QWeb应用E序p|?br />
  • Ҏ(gu)?
    • 方式Q采用JDK5.0~译Qƈ在JDK5.0下运行(包括修改JAVA_HOME,PATH,CLASSPATH,Tomcat使用的JDKQ?/li>
    • 效果Qjava应用E序可行QWeb应用E序可以?/li>
关于Ҏ(gu)二的两点Ҏ(gu)补充
  • Ҏ(gu)说明一Q?/li>
如果采用了方式二Q即JDK5.0Q要求Tomcat版本必须不能低于5.5*。问题是如果我需要用低于5.5*版本的Tomcat怎么办呢Q?br />{案是Q将JDK5.0的lib目录下的tools.jar覆盖 TOMCAT安装目录/common/lib下面的tools.jar,然后重启TOMCAT5.0可以了

  • Ҏ(gu)说明?
如果你选择的是Eclipse+MyEclipse开发环?q且你选择的是在Eclipse下启动Tomcat,千万C,一定要在windows菜单preference选项弹出的perference对话框中,选择MyEclipse--Application Server--Tomcat5---JDK指定JDK?.0


是不是搞定了IDE下的问题了呢Q?br />如果在Tomcat5.0pd下还有问题的话,误t系列二http://www.tkk7.com/crazycy/archive/2006/06/03/50150.html


Thanks very much to visit blog,  welcome your feedback,  your feedback is the Driver && Power to me




crazycy 2006-05-31 13:26 发表评论
]]>
异常的ȝQChecked ExceptionQ?/title><link>http://www.tkk7.com/crazycy/archive/2006/05/10/45556.html</link><dc:creator>crazycy</dc:creator><author>crazycy</author><pubDate>Wed, 10 May 2006 14:50:00 GMT</pubDate><guid>http://www.tkk7.com/crazycy/archive/2006/05/10/45556.html</guid><wfw:comment>http://www.tkk7.com/crazycy/comments/45556.html</wfw:comment><comments>http://www.tkk7.com/crazycy/archive/2006/05/10/45556.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.tkk7.com/crazycy/comments/commentRss/45556.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/crazycy/services/trackbacks/45556.html</trackback:ping><description><![CDATA[ <font style="BACKGROUND-COLOR: #ff0000">最q查了许多关于异常的资料</font>QJava 异常分ؓ(f)Checked Exception ?UnChecked Exception。对于现有的~程语言来说QJava是唯一提供Checked Exception机制的流行语a?br /><br />   我在工程的开发中Q对异常的定义常存在_度上的考虑Q如果粒度较l,定义到具体类型的异常Q总觉力不从心。所以常帔R用粗_度开发,即以包ؓ(f)_度Q一个包定义一个异常(Checked Exception Q?br /><br />   在方法相互调用时Q在各个包相互关联的时候,常常只是把这个异怽为新异常的cause抛出。在很少的时候才q行相应的处理(比如内存溢出Q做一些相应的抛弃工作Q,最多的时候只是记录日志l抛出?br /><br />   在查阅Checked Exception的作用时Q大多书c都是如下意思:(x)捕获到错误,是ؓ(f)了进行处理,如果处理不了或者不处理ql往上层传,直到一个地Ҏ(gu)处理q个异常。在我所做的工作中,实有需要处理的地方Q但是直接到最外层昄l用L(fng)更多?br /><br />   在大量的资料中,有如下归UI(x)假如调用无法Ҏ(gu)出的意外做Q何处理,抛出UnChecked ExceptionQ如果能Ҏ(gu)出的异常q行处理Q则用Checked Exception。 ?br /><br />   <img src ="http://www.tkk7.com/crazycy/aggbug/45556.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/crazycy/" target="_blank">crazycy</a> 2006-05-10 22:50 <a href="http://www.tkk7.com/crazycy/archive/2006/05/10/45556.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://whxhjc.com" target="_blank">18ëƬѹۿ</a>| <a href="http://cqshangshu.com" target="_blank">ӰԺ</a>| <a href="http://yeyaweiban.com" target="_blank">޾Ʒ˳߲va</a>| <a href="http://pite2.com" target="_blank">Ƶ߹ۿѲ</a>| <a href="http://jhmydxx.com" target="_blank">Ƶѹۿ</a>| <a href="http://zhaofeiz.com" target="_blank">޾ƷӰԺ</a>| <a href="http://rimcn.com" target="_blank">jiz zz</a>| <a href="http://szzdjl.com" target="_blank">ѿŮˬ</a>| <a href="http://xmm5pkt.com" target="_blank">ҹƬ߹ۿ</a>| <a href="http://83k5.com" target="_blank">Ļ߹ۿպ</a>| <a href="http://jomujy.com" target="_blank">999ھƷƵ</a>| <a href="http://8222se.com" target="_blank">޳˻ɫ</a>| <a href="http://tskes.com" target="_blank">ѹۿ.WWW</a>| <a href="http://bjowj.com" target="_blank">޾Ʒר߲</a>| <a href="http://tttui.com" target="_blank">ѿaɫƬ</a>| <a href="http://628669.com" target="_blank">Ʒһþ</a>| <a href="http://doubaye.com" target="_blank">ŮëƬѲƵm</a>| <a href="http://wusongtv.com" target="_blank">һһһ</a>| <a href="http://56kaifa.com" target="_blank">ˬýôƵ</a>| <a href="http://sy8989.com" target="_blank">װɫƵ</a>| <a href="http://1000hu.com" target="_blank">߹ۿҹһ</a>| <a href="http://dajiaody.com" target="_blank">һƬaѲſ</a>| <a href="http://0755szyxcm.com" target="_blank">ۺպĻv</a>| <a href="http://sdcwpfw.com" target="_blank">ձzzzzwwwƬ</a>| <a href="http://qmoread.com" target="_blank">˳վ18</a>| <a href="http://b2b-chinese.com" target="_blank">һƵѹۿ</a>| <a href="http://815389.com" target="_blank">ŷձƷ</a>| <a href="http://wivyswap.com" target="_blank">Ƭ߷ѹۿ</a>| <a href="http://adcbgy.com" target="_blank">С˵ɫͼ</a>| <a href="http://6006284.com" target="_blank">ɫWWWַ</a>| <a href="http://sjzbosite.com" target="_blank">AëƬר</a>| <a href="http://bjbanjia01.com" target="_blank">www߹ۿ</a>| <a href="http://xxxxnii.com" target="_blank">޳aƬ߹ۿʦ</a>| <a href="http://77110524.com" target="_blank">ʮ˽Ƶ߹ۿڵ </a>| <a href="http://www-92109.com" target="_blank">߹ۿƵ </a>| <a href="http://dzyong.com" target="_blank">ˮƵ߹ۿ</a>| <a href="http://szyxfhm.com" target="_blank">AVƬ߹ۿ</a>| <a href="http://321fafa.com" target="_blank">ۺϹ˶¼</a>| <a href="http://51porn3.com" target="_blank">AAƬٸAAƬֱ</a>| <a href="http://gzltchem.com" target="_blank">AVһɫ </a>| <a href="http://929119.com" target="_blank">ȫaëƬѿ</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>