??xml version="1.0" encoding="utf-8" standalone="yes"?>国产亚洲3p无码一区二区,1区1区3区4区产品亚洲,亚洲国产av一区二区三区丶http://www.tkk7.com/baizhihui19870626/category/51116.html记录?/description>zh-cnWed, 19 Sep 2012 19:47:50 GMTWed, 19 Sep 2012 19:47:50 GMT60web.xml作用 http://www.tkk7.com/baizhihui19870626/articles/388072.html白19870626白19870626Wed, 19 Sep 2012 07:15:00 GMThttp://www.tkk7.com/baizhihui19870626/articles/388072.htmlhttp://www.tkk7.com/baizhihui19870626/comments/388072.htmlhttp://www.tkk7.com/baizhihui19870626/articles/388072.html#Feedback0http://www.tkk7.com/baizhihui19870626/comments/commentRss/388072.htmlhttp://www.tkk7.com/baizhihui19870626/services/trackbacks/388072.htmlweb工程中的web.xml文g有什么作用呢Q它是每个web.xml工程都必ȝ吗?

一个web中完全可以没有web.xml文gQ也是_web.xml文gq不是web工程必须的?/p>


那什么时候需要,什么时候可以不需要呢Q?/p>

要想回答上面的问题,得先了解web.xml文g使用来干什么的。web.xml文g是用来配|:Ƣ迎cservlet、filter{的。当你的web工程没用到这些时Q你可以不用web.xml文g来配|你的web工程?/p>

那么web.xml能做的所有事情都有那些?

其实Qweb.xml的模?Schema)文g中定义了多少U标{օ素,web.xml中就可以出现它的模式文g所定义的标{օ素,它就能拥有定义出来的那些功能。web.xml的模式文件是由Sun公司定义的,每个web.xml文g的根元素<web-app>中,都必L明这个web.xml使用的是哪个模式文g。如Q?br /><?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
</web-app>

而且web.xml的模式文件中定义的标{ƈ不是定死的,模式文g也是可以改变的,一般来_随着web.mxl模式文g的版本升U,里面定义的功能会来复杂,也即标签元素的种cM来多Q但有些是不常用的,我们只需C一些常用的可以了?/p>


下面列出web.xml常用的标{օ素及q些标签元素的功能:

1、指定欢q页面,例如Q?br /><welcome-file-list>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index1.jsp</welcome-file>
</welcome-file-list>
上面的例子指定了2个欢q页面,昄时按序从第一个找P如果W一个存在,显C第一个,后面的不起作用。如果第一个不存在Q就扄二个Q以此类推?/p>

关于Ƣ迎面Q?/p>

讉K一个网站时Q默认看到的W一个页面就叫欢q页Q一般情况下是由首页来充当欢q页的。一般情况下Q我们会在web.xml中指定欢q页。但web.xmlq不是一个Web的必要文Ӟ没有web.xmlQ网站仍然是可以正常工作的。只不过|站的功能复杂v来后Qweb.xml的确有非常大用处Q所以,默认创徏的动态web工程在WEB-INF文g夹下面都有一个web.xml文g?br />对于tomcat来说Q当你只指定一个web的根名,没有指定具体面Q去讉K时一个webӞ 如果web.xml文g中配|了Ƣ迎,那么p回指定的那个面作ؓƢ迎,而在文中没有web.xml文gQ或虽然有web.xmlQ但web.xml也没指定Ƣ迎늚情况下,它默认先查找index.html文gQ如果找CQ就把index.html作ؓƢ迎还回给览器。如果没扑ֈindex.htmlQtomcat去找index.jsp。找到index.jsp把它作为欢q页面返回。而如果index.html和index.jsp都没扑ֈQ又没有用web.xml文g指定Ƣ迎面Q那此时tomcat׃知道该返回哪个文件了Q它?yu)显CThe requested resource (/XXX) is not available的页面。其中XXX表示web的根名。但如果你指定了具体面Q是可以正常讉K的?/p>

2、命名与定制URL。我们可以ؓServlet和JSP文g命名q定制URL,其中定制URL是依赖一命名的,命名必须在定制URL前。下面拿serlet来D例:
(1)、ؓServlet命名Q?br /><servlet>
<servlet-name>servlet1</servlet-name>
<servlet-class>net.test.TestServlet</servlet-class>
</servlet>

(2)、ؓServlet定制URL?br /><servlet-mapping>
<servlet-name>servlet1</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>


3、定制初始化参数Q可以定制servlet、JSP、Context的初始化参数Q然后可以再servlet、JSP、Context中获取这些参数倹{下面哪servlet来D例:
<servlet>
<servlet-name>servlet1</servlet-name>
<servlet-class>net.test.TestServlet</servlet-class>
<init-param>
<param-name>userName</param-name>
<param-value>Tommy</param-value>
</init-param>
<init-param>
<param-name>E-mail</param-name>
<param-value>Tommy@163.com</param-value>
</init-param>
</servlet>
l过上面的配|,在servlet中能够调用getServletConfig().getInitParameter("param1")获得参数名对应的倹{?/p>

4、指定错误处理页面,可以通过“异常cd”?#8220;错误?#8221;来指定错误处理页面?br /><error-page>
<error-code>404</error-code>
<location>/error404.jsp</location>
</error-page>
-----------------------------
<error-page>
<exception-type>java.lang.Exception<exception-type>
<location>/exception.jsp<location>
</error-page>

5、设|过滤器Q比如设|一个编码过滤器Q过滤所有资?br /><filter>
<filter-name>XXXCharaSetFilter</filter-name>
<filter-class>net.test.CharSetFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>XXXCharaSetFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

6、设|监听器Q?br /><listener>
<listener-class>net.test.XXXLisenet</listener-class>
</listener>

7、设|会?Session)q期旉Q其中时间以分钟为单位,假如讄60分钟时Q?br /><session-config>
<session-timeout>60</session-timeout>
</session-config>

除了q些标签元素之外Q还可以往web.xml中添加那些标{օ素呢Q那些标{օ素都能v什么作用呢Q我们只要去查看web.xml的模式文件就能知道。直接看模式文g看不懂,可以找一些中文教E来看看?/p>

白19870626 2012-09-19 15:15 发表评论
]]>
why在重写equals时还必须重写hashcodeҎ(gu)http://www.tkk7.com/baizhihui19870626/articles/388065.html白19870626白19870626Wed, 19 Sep 2012 06:20:00 GMThttp://www.tkk7.com/baizhihui19870626/articles/388065.htmlhttp://www.tkk7.com/baizhihui19870626/comments/388065.htmlhttp://www.tkk7.com/baizhihui19870626/articles/388065.html#Feedback0http://www.tkk7.com/baizhihui19870626/comments/commentRss/388065.htmlhttp://www.tkk7.com/baizhihui19870626/services/trackbacks/388065.html 

首先我们先来看下Stringcȝ源码Q可以发现String是重写了ObjectcȝequalsҎ(gu)的,q且也重写了hashcodeҎ(gu)

复制代码
public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = count;
        if (n == anotherString.count) {
        char v1[] = value;
        char v2[] = anotherString.value;
        int i = offset;
        int j = anotherString.offset;
        while (n-- != 0) {
            if (v1[i++] != v2[j++])
            return false;
        }
        return true;
        }
    }
    return false;
    }


public int hashCode() {
    int h = hash;
    if (h == 0) {
        int off = offset;
        char val[] = value;
        int len = count;

            for (int i = 0; i < len; i++) {
                h = 31*h + val[off++];
            }
            hash = h;
        }
        return h;
    }
复制代码

那ؓ什么在重写equalsҎ(gu)旉要重写equalsҎ(gu)呢:
首先equals与hashcode间的关系是这L(fng)Q?/p>

1、如果两个对象相同(即用equals比较q回trueQ,那么它们的hashCodeg定要相同Q?/p>

2、如果两个对象的hashCode相同Q它们ƈ不一定相?即用equals比较q回false)

自我的理解:׃Z提高E序的效率才实现了hashcodeҎ(gu)Q先q行hashcode的比较,如果不同Q那没就不必在进行equals的比较了Q这样就大大减少了equals比较?/p>

ơ数Q这Ҏ(gu)需要比较的数量很大的效率提高是很明昄Q一个很好的例子是在集合中的用;

我们都知道java中的List集合是有序的Q因此是可以重复的,而set集合是无序的Q因此是不能重复的,那么怎么能保证不能被攑օ重复的元素呢Q但靠equalsҎ(gu)一h较的

话,如果原来集合中以后又10000个元素了Q那么放?0001个元素,N要将前面的所有元素都q行比较Q看看是否有重复Q欧码噶的,q个效率可想而知Q因此hashcode

应遇而生了,java采用了hash表,利用哈希法Q也叫散列算法)Q就是将对象数据Ҏ(gu)该对象的特征使用特定的算法将其定义到一个地址上,那么在后面定义进来的数据

只要看对应的hashcode地址上是否有|那么qequals比较Q如果没有则直接插入Q只要就大大减少了equals的用次敎ͼ执行效率大大提高了?/p>

l箋上面的话题,Z么必要重写hashcodeҎ(gu)Q其实简单的说就是ؓ了保证同一个对象,保证在equals相同的情况下hashcode值必定相同,如果重写了equals而未重写

hashcodeҎ(gu)Q可能就会出C个没有关pȝ对象equals相同的(因ؓequal都是Ҏ(gu)对象的特征进行重写的Q,但hashcode实不相同的

 



白19870626 2012-09-19 14:20 发表评论
]]>
Vector和ArrayList区别 Hashtable和HashMap区别 ArrayList和LinkedList区别http://www.tkk7.com/baizhihui19870626/articles/388061.html白19870626白19870626Wed, 19 Sep 2012 05:51:00 GMThttp://www.tkk7.com/baizhihui19870626/articles/388061.htmlhttp://www.tkk7.com/baizhihui19870626/comments/388061.htmlhttp://www.tkk7.com/baizhihui19870626/articles/388061.html#Feedback0http://www.tkk7.com/baizhihui19870626/comments/commentRss/388061.htmlhttp://www.tkk7.com/baizhihui19870626/services/trackbacks/388061.htmlVector和ArrayList区别
Vector和ArrayList Vector和ArrayList在用上非常怼,都可用来表示一l数量可变的对象应用的集?q且可以随机地访问其中的元素?br />Vector的方法都是同步的(Synchronized),是线E安全的(thread-safe)Q而ArrayList的方法不是,
׃U程的同步必然要影响性能Q因?
ArrayList的性能比Vector好?br />当Vector或ArrayList中的元素过它的初始大小?Vector会将?br />的容量翻?而ArrayList只增?0%的大,q样,ArrayList有?br />于节U内存空间?br />Hashtable?font style="line-height: 36px; word-wrap: normal; word-break: normal" color="#ff0000">HashMap区别

a.Hashtable是承自陈旧的DictionarycȝQHashMapl承自AbstractMapcd时是Java 1.2引进的Map接口的一个实现?br />  b.也许最重要的不同是Hashtable的方法是同步的,而HashMap的方法不是。这意味着Q然你可以不用采取Q何特D的行ؓ可以在一?多线E的应用E序中用一个HashtableQ但你必d样地Z个HashMap提供外同步。一个方便的Ҏ(gu)是利用Collectionscȝ静态的synchronizedMap()Ҏ(gu)Q它创徏一个线E安全的Map对象Qƈ把它作ؓ一个封装的对象来返回。这个对象的Ҏ(gu)可以让你同步讉K潜在的HashMap。这么做的结果就是当你不需要同步时Q你不能切断Hashtable中的同步Q比如在一个单U程的应用程序中Q,而且同步增加了很多处理费用?br />  c.W三点不同是Q只有HashMap可以让你空gZ个表的条目的key或value。HashMap中只有一条记录可以是一个空的keyQ但L数量的条目可以是I的value。这是_如果在表中没有发现搜索键Q或者如果发C搜烦键,但它是一个空的|那么get()返回null。如果有必要Q用containKey()Ҏ(gu)来区别这两种情况?br />  d.HashMapL了Hashtable的containsҎ(gu)Q保留了containsValue和containsKeyҎ(gu)
  e.Hashtable中h(hun)ash数组默认大小?1Q增加的方式?old*2+1。HashMap中h(hun)ash数组的默认大是16Q而且一定是2的指?br />
ArrayList和LinkedList区别
对于处理一列数据项,Java提供了两个类ArrayList和LinkedList,ArrayList的内部实现是Z内部数组Object[],所以从概念上讲,它更象数l,但LinkedList的内部实现是Z一l连接的记录,所?它更象一个链表结构,所?它们在性能上有很大的差别?br />从上面的分析可知,在ArrayList的前面或中间插入数据?你必d其后的所有数据相应的后移,q样必然要花费较多时_所?当你的操作是在一列数据的后面d数据而不是在前面或中?q且需要随机地讉K其中的元素时,使用ArrayList会提供比较好的性能
而访问链表中的某个元素时,必M链表的一端开始沿着q接方向一个一个元素地L?直到扑ֈ所需的元素ؓ止,所?当你的操作是在一列数据的前面或中间添加或删除数据,q且按照序讉K其中的元素时,应该用LinkedList了?br />如果在编E中,1Q?两种情Ş交替出现,q时,你可以考虑使用Listq样的通用接口,而不用关心具体的实现Q在具体的情形下,它的性能由具体的实现来保证?br />配置集合cȝ初始大小
在Java集合框架中的大部分类的大是可以随着元素个数的增加而相应的增加的,我们g不用兛_它的初始大小,但如果我们考虑cȝ性能问题?׃定要考虑可能地讄好集合对象的初始大小,q将大大提高代码的性能?br />比如,Hashtable~省的初始大ؓ101,载入因子?.75,卛_果其中的元素个数过75?它就必须增加大小q新组l元素,所?如果你知道在创徏一个新的Hashtable对象时就知道元素的确切数目如?10,那么,应其初始大小设ؓ110/0.75=148,q样,可以避免重新组l内存ƈ增加大小



白19870626 2012-09-19 13:51 发表评论
]]>
java中字W集的问?http://www.tkk7.com/baizhihui19870626/articles/388054.html白19870626白19870626Wed, 19 Sep 2012 03:33:00 GMThttp://www.tkk7.com/baizhihui19870626/articles/388054.htmlhttp://www.tkk7.com/baizhihui19870626/comments/388054.htmlhttp://www.tkk7.com/baizhihui19870626/articles/388054.html#Feedback0http://www.tkk7.com/baizhihui19870626/comments/commentRss/388054.htmlhttp://www.tkk7.com/baizhihui19870626/services/trackbacks/388054.html1、JVM中单个字W占用的字节长度跟编码方式有养I而默认编码方式又跟^台是一一对应的或说^台决定了默认字符~码方式Q?/span>

2?strong>对于单个字符QISO-8859-1单字节编码,GBK双字节编码,UTF-8三字节编?/span>Q?strong>因此中文q_(中文q_默认字符集编码GBK)下一个中文字W占2个字节,而英文^?英文q_默认字符集编码Cp1252(cM于ISO-8859-1))?/span>

3?strong>getBytes()、getBytes(encoding)函数的作用是使用pȝ默认或者指定的字符集编码方式,字W串~码成字节数l?/span>?/strong>

~码方式军_字节长度Q?strong>在中文^CQ默认的字符集编码是GBKQ?/span>此时如果使用getBytes()或getBytes("GBK")Q?strong>则按照GBK的编码规则将每个中文字符?个byte表示?strong>所以我们看?中文"最lGBK~码l果是Q?-42 -48 -50 -60 ?42?48代表??字,?-50"?-60"则代表了"?字?/span>

在中文^CQ?span style="background-color: rgb(255,255,255)">如果指定的字W集~码是UTF-8Q那么按照UTF-8对中文的~码规则Q每个中文用3个字节表C,那么"中文"q两个字W最l被~码成:-28 -72 -83?26 -106 -121两组。每3个字节代表一个中文字W?/span>

在中文^CQ如果指定的字符集编码是ISO-8859-1Q由于此字符集是单字节编码,所以用getBytes("ISO-8859-1")Ӟ每个字符只取一个字节,每个汉字只取C一半的字符。另外一半的字节丢失了。由于这一半的字符在字W集中找不到对应的字W,所以默认用编?3代替Q也是??/strong>

在英文^CQ默认的字符集编码是Cp1252(cM于ISO-8859-1)Q?strong>如果使用GBK、UTF-8q行~码Q得到的字节数组依然是正的(GBK4个字节,UTF-8?个字?。因为在JVM内部是以Unicode存储字符串的Q用getBytes(encoding)会让JVMq行一ơUnicode到指定编码之间的转换?/span>对于GBKQJVM依然会{换成4个字节,对于UTF-8QJVM依然会{换成6个字节?strong>但是对于ISO-8859-1Q则׃无法转换(2个字?-->1个字节,截取了一半的字节)Q所以{换后的结果是错误的?/span>

在中文^CQ默认的字符集编码是GBKQ于是content.getBytes()得到的是什么呢Q就是下面这4个字节:

byte[0] = -42 hex string = ffffffd6

byte[1] = -48 hex string = ffffffd0

byte[2] = -50 hex string = ffffffce

byte[3] = -60 hex string = ffffffc4

如果新的encoding是GBKQ那么经q解码后Q由于一个字W用2个字节表C。于是最l的l果是Q?/span>

char[0]='? --- byte[0] + byte[1]

char[1]='? --- byte[2] + byte[3]

如果新的encoding是ISO-8859-1Q那么经q解码后Q由于一个字W用1个字节表C,于是原来本应?个字节一赯析的变成单个字节解析Q每个字节都代表了一个汉字字W的一半。这一半的字节在ISO-8859-1中找不到对应的字W,变成了"?"了,最l的l果Q?/span>

char[0]='?' ---- byte[0]

char[1]='?' ---- byte[1]

char[2]='?' ---- byte[2]

char[3]='?' ---- byte[3]

如果新的encoding是UTF-8Q那么经q解码后Q由于一个字W用3个字节表C,于是原来4个字节的数据无法正常的解析成UTF-8的数据,最l的l果也是每一个都变成"?"?/span>

char[0]='?' ---- byte[0]

char[1]='?' ---- byte[1]

char[2]='?' ---- byte[2]

char[3]='?' ---- byte[3]

如果是在英文q_下,׃默认的编码方式是Cp1252Q于是content.getBytes()得到的字节都是被截去一半的D留字符Q所以我们看到在英文q_下,不论指定的encoding是GBK、UTF-8Q其l果和ISO-8859-1都是一L(fng)?/span>

CQ这个方法再ơ证明了String的getBytes()Ҏ(gu)的危险性,如果我们使用new String(str.getBytes(), encoding)对字W串q行重新~码解码Ӟ我们一定要清楚str.getBytes()Ҏ(gu)q回的字节数l的长度、内容到底是什么,因ؓ在接下来使用新的encodingq行~码解码ӞJavaq不会自动地对字节数l进行扩展以适应新的encoding。而是按照新的~码Ҏ(gu)直接对该字节数组q行解析?/span>于是l果像上面的例子一P同样?个原始字节,有些?个一l进行解析,有些每个一l进行解析,有些?个一l进行解析。其l果只能看那种~码方式合适了?/span>


l论Q?/strong>相同的^CQ同一个中文字W,在不同的~码方式下,得到的是完全不同的字节数l。这些字节数l有可能是正的(只要该字W集支持中文)Q也可能是完全错误的(该字W集不支持中??/span>

CQ不要轻易地使用或滥用StringcȝgetBytes(encoding)Ҏ(gu)Q更要尽量避免用getBytes()Ҏ(gu)。因个方法是q_依赖的,在^C可预知的情况下完全可能得C同的l果?strong>如果一定要q行字节~码Q则用户要确保encoding的方法就是当初字W串输入时的encoding?/span>

———————————————————————————————————————————————————

 

和getBytes(encoding)不同QtoCharArray()q回的是"自然字符"。但是这?自然字符"的数目和内容却是由原始的~码方式军_?/span>?/span>

FileWriter是字W流输出,而OutputStreamWriter是字节流输出在中文q_下,如果使用FileWriterQ不Z如何讄字符集都不会起作用。因为它采用的是默认的系l字W集。即便你讄了System.setProperty("file.encoding", "ISO-8859-1")Q或者在q行时给予参?Dfile.encoding=UTF-8都不会v作用。你会发现它最l还是都?GB2312"或?GBK"的方式保存?/span>

在中文^CQ如果用OutputStreamWriterQ则在后台写入时会把字符{换成字节,此时指定的编码字W集pv作用了。可以看到在指定GBK、UTF-8的情况下中文可以正常的保存和dQ同时文件按照我们给定的方式保存了。而对于ISO-8859-1则变成了?Q这再次证明了采用ISO-8859-1是不能保存中文的Q而且会因Z文编码在ISO-8859-1的编码中找不到对应的字符而默认{换成??/span>

在英文^CQ如果用FileWriterQ不Z如何讄字符集同样都不会起作用。所有的文g都将按照ISO-8859-1的编码方式保存,毫无疑问地变成了?。在英文q_下,如果使用OutputStreamWriterQ则只有当我们把字符和文件的~码方式正确讄为GBK、UTF-8的情况下Q中文才能正的保存q显C?/span>

通过上述的实验证明,Z保在不同的q_下,客户端输入的中文可以被正地解析、保存、读取。最好的办法是使用OutputStreamWriter配合UTF-8~码?/span>如果不想使用UTF-8~码Q那么可以考虑使用GB2312Q不使用GBK、GB18030。因为对于某些老式的文本编辑器Q甚至不支持GBK、GB18030的编码,但是对于GB2312则是一定支持的。因为前两者都不是国标但后者是?/span>

关于String的getBytes()QgetBytes(encoding)和new String(bytes, encoding)q三个方法,非常值得注意QA.getBytes()Q用^台默认的~码方式(通过file.encoding属性获?方式来将字符串{换成byte[]。得到的是字W串最原始的字节编码倹{?/span>

B.getBytes(NAME_OF_CHARSET)Q?strong>使用指定的编码方式将字符串{换成byte[]Q如果想要得到正的字节数组Q程序员必须l出正确的NAME_OF_CHARSET。否则得到的׃会得到正的l果?/span>

C.new String(bytes, encoding)Q?strong>如果我们在客L(fng)使用UTF-8~码的JSP面发出hQ浏览器~码后的UTF-8字节会以ISO-8859-1的Ş式传递到服务器端。所以要得到lHTTP协议传输的原始字节,我们需要先调用getBytes("ISO-8859-1")得到原始的字节,但由于我们客L(fng)的原始编码是UTF-8Q如果l按照ISO-8859-1解码Q那么得到的不是一个中文字W,而是3个ؕ码的字符。所以我们需要再ơ调用new String(bytes,"UTF-8")Q将字节数组按照UTF-8的格式,?个一l进行解码,才能q原为客L(fng)的原始字W?/span>

D.String的getBytes()、getBytes(NAME_OF_CHARSET)Ҏ(gu)都是比较微妙的方法,原则上:传输旉用的是什么编码,我们需要按照这U编码得到字节。new String(bytes, NAME_OF_CHARSET)则更加需要小心,原则上:客户端采用的是什么编码,那么q里的NAME_OF_CHARSET必d客户端保持一致?strong>例如JSP面是GBKQ那么我们接攉面传递而来的参数时必M用new String(parameter.getBytes("ISO-8859-1"), "GBK");如果使用了错误的解码方式Q如使用了UTF-8Q那么得到的很有可能是q了。也是_GBK--->ISO-8859-1--->GBK、UTF-8--->ISO-8859-1--->UTF-8的{换过E是没有问题的。但是GBK--->ISO-8859-1--->UTF-8、UTF-8--->ISO-8859-1--->GBK的字节直接{码则可能DqQ需要另外的转换q程?/span>

CQ?/span>谨慎C用getBytes(NAME_OF_CHARSET)和new String(bytes, NAME_OF_CHARSET)Q除非你很清楚的知道原始的字W编码和传输协议使用的编码。推荐用基于服务器的配|、过滤器讄request/response的characterEncoding、content type属性。还有就是JSP面的pageEncoding属性、HTML meta元素的content type属性。尽量避免频J的在代码中q行字符串{码,即降低了效率又增加了风险?/span>

问题Q我们在web应用开发过E中l常遇到输出某种~码的字W,如iso8859-1{,如何输出一个某U编码的字符Ԍ

代码如下Q?/span>
  1. public class StringTest {
  2. public static void main(String[] args){
  3. String str="我是中国?;
  4. try {
  5. byte[] by=str.getBytes("ISO-8859-1");
  6. byte[] by1=str.getBytes("GBK");
  7. byte[] by2=str.getBytes("utf-8");
  8. System.out.println("ISO-8859-1");
  9. System.out.println(by.length);
  10. System.out.println(by[0]);
  11. System.out.println("GBK");
  12. System.out.println(by1.length);
  13. System.out.println(by1[0]);
  14. System.out.println("utf-8");
  15. System.out.println(by2.length);
  16. System.out.println(by2[0]);
  17. //先将字符串以ISO-8859-1q行~码
  18. String tempStr = new String(str.getBytes(), "ISO-8859-1");
  19. //׃中文q_一个中文占两上字节Q所以以ISO-8859-1q行~码Ӟ输出?0个字W的q
  20. System.out.println(tempStr);
  21. //再获取该字符串的ISO-8859-1字节Q以GBK解码Q?
  22. tempStr=new String(tempStr.getBytes("ISO-8859-1"),"GBK");
  23. //q原
  24. System.out.println(tempStr);
  25. }
  26. catch (Exception e) {
  27. System.err.println(e.getMessage());
  28. }
  29. }
  30. }

输出Q?
GBK
10
-50
utf-8
15
-26
???????ú??
我是中国?


白19870626 2012-09-19 11:33 发表评论
]]>
//?---java面试题及{案Q基?22道,代码?9道) http://www.tkk7.com/baizhihui19870626/articles/388040.html白19870626白19870626Wed, 19 Sep 2012 01:46:00 GMThttp://www.tkk7.com/baizhihui19870626/articles/388040.htmlhttp://www.tkk7.com/baizhihui19870626/comments/388040.htmlhttp://www.tkk7.com/baizhihui19870626/articles/388040.html#Feedback0http://www.tkk7.com/baizhihui19870626/comments/commentRss/388040.htmlhttp://www.tkk7.com/baizhihui19870626/services/trackbacks/388040.html阅读全文

白19870626 2012-09-19 09:46 发表评论
]]>
Java中Vector、ArrayList、List使用深入剖析http://www.tkk7.com/baizhihui19870626/articles/387692.html白19870626白19870626Fri, 14 Sep 2012 01:22:00 GMThttp://www.tkk7.com/baizhihui19870626/articles/387692.htmlhttp://www.tkk7.com/baizhihui19870626/comments/387692.htmlhttp://www.tkk7.com/baizhihui19870626/articles/387692.html#Feedback0http://www.tkk7.com/baizhihui19870626/comments/commentRss/387692.htmlhttp://www.tkk7.com/baizhihui19870626/services/trackbacks/387692.htmlJava开发时QJDK已经为我们提供了一pd相应的类来实现基本的数据l构。这些类均在java.util包中。本文试N过单的描述Q向读者阐q各个类的作用以及如何正用这些类?

  Collection

  ├List

  │├LinkedList

  │├ArrayList

  │└Vector

  │ └Stack

  └Set

  Map

  ├Hashtable

  ├HashMap

  └WeakHashMap

  Collection接口

  Collection是最基本的集合接口,一个Collection代表一lObjectQ即Collection的元素(ElementsQ。一?Collection允许相同的元素而另一些不行。一些能排序而另一些不行?a class="channel_keylink" target="_blank">Java SDK不提供直接承自Collection的类Q?Java SDK提供的类都是l承自Collection?#8220;子接?#8221;如List和Set?/p>

  所有实现Collection接口的类都必L供两个标准的构造函敎ͼ无参数的构造函数用于创Z个空的CollectionQ有一?Collection参数的构造函数用于创Z个新?CollectionQ这个新的Collection与传入的Collection有相同的元素。后一个构造函数允许用户复制一个Collection?/p>

  如何遍历Collection中的每一个元素?不论Collection的实际类型如何,它都支持一个iterator()的方法,该方法返回一个P代子Q用该q代子即可逐一讉KCollection中每一个元素。典型的用法如下Q?/p>

  Iterator it = collection.iterator(); // 获得一个P代子

  while(it.hasNext()) {

  Object obj = it.next(); // 得到下一个元?/p>

  }

  由Collection接口z的两个接口是List和Set?/p>

  List接口

  List是有序的CollectionQ用此接口能够_的控制每个元素插入的位置。用戯够用烦引(元素在List中的位置Q类g数组下标Q来讉KList中的元素Q这cM于Java的数l?/p>

  和下面要提到的Set不同QList允许有相同的元素?/p>

  除了hCollection接口必备的iterator()Ҏ(gu)外,Listq提供一个listIterator()Ҏ(gu)Q返回一?ListIterator接口Q和标准的Iterator接口相比QListIterator多了一些add()之类的方法,允许dQ删除,讑֮元素Q还能向前或向后遍历?/p>

  实现List接口的常用类有LinkedListQArrayListQVector和Stack?/p>

  LinkedListc?/p>

  LinkedList实现了List接口Q允许null元素。此外LinkedList提供额外的getQremoveQinsertҎ(gu)?LinkedList的首部或N。这些操作LinkedList可被用作堆栈QstackQ,队列QqueueQ或双向队列QdequeQ?/p>

  注意LinkedList没有同步Ҏ(gu)。如果多个线E同时访问一个ListQ则必须自己实现讉K同步。一U解x法是在创建List时构造一个同步的ListQ?/p>

  List list = Collections.synchronizedList(new LinkedList(...));

  ArrayListc?/p>

  ArrayList实现了可变大的数组。它允许所有元素,包括null。ArrayList没有同步?/p>

  sizeQisEmptyQgetQsetҎ(gu)q行旉为常数。但是addҎ(gu)开销为分摊的常数Q添加n个元素需要O(n)的时间。其他的Ҏ(gu)q行旉为线性?/p>

  每个ArrayList实例都有一个容量(CapacityQ,即用?a class="channel_keylink" target="_blank">存储元素的数l的大小。这个容量可随着不断d新元素而自动增加,但是增长法q没有定义。当需要插入大量元素时Q在插入前可以调用ensureCapacityҎ(gu)来增加ArrayList的容量以提高插入效率?/p>

  和LinkedList一PArrayList也是非同步的QunsynchronizedQ?/p>

  Vectorc?/p>

  Vector非常cMArrayListQ但是Vector是同步的。由Vector创徏的IteratorQ虽然和ArrayList创徏?Iterator是同一接口Q但是,因ؓVector是同步的Q当一个Iterator被创且正在被用,另一个线E改变了Vector的状态(例如Q添加或删除了一些元素)Q这时调用Iterator的方法时抛出ConcurrentModificationExceptionQ因此必L莯异常?/p>

  Stack c?/p>

  Stackl承自VectorQ实C个后q先出的堆栈。Stack提供5个额外的Ҏ(gu)使得 Vector得以被当作堆栈用。基本的push和popҎ(gu)Q还有peekҎ(gu)得到栈顶的元素,emptyҎ(gu)堆栈是否为空QsearchҎ(gu)一个元素在堆栈中的位置。Stack刚创建后是空栈?/p>

  Set接口

  Set是一U不包含重复的元素的CollectionQ即L的两个元素e1和e2都有e1.equals(e2)=falseQSet最多有一个null元素?/p>

  很明显,Set的构造函数有一个约束条Ӟ传入的Collection参数不能包含重复的元素?/p>

  h意:必须心操作可变对象QMutable ObjectQ。如果一个Set中的可变元素改变了自w状态导致Object.equals(Object)=true导致一些问题?/p>
Map接口

  h意,Map没有l承Collection接口QMap提供key到value的映。一个Map中不能包含相同的keyQ每个key只能映射一?value。Map接口提供3U集合的视图QMap的内容可以被当作一lkey集合Q一lvalue集合Q或者一lkey-value映射?/p>

  Hashtablec?/p>

  Hashtablel承Map接口Q实C个key-value映射的哈希表。Q何非I(non-nullQ的对象都可作ؓkey或者value?/p>

  d数据使用put(key, value)Q取出数据用get(key)Q这两个基本操作的时间开销为常数?/p>

  Hashtable 通过initial capacity和load factor两个参数调整性能。通常~省的load factor 0.75较好地实C旉和空间的均衡。增大load factor可以节省I间但相应的查找旉增大,q会影响像get和putq样的操作?/p>

  使用Hashtable的简单示例如下,?Q?Q?攑ֈHashtable中,他们的key分别?#8221;one”Q?#8221;two”Q?#8221;three”Q?/p>

  Hashtable numbers = new Hashtable();

  numbers.put(“one”, new Integer(1));

  numbers.put(“two”, new Integer(2));

  numbers.put(“three”, new Integer(3));

  要取Z个数Q比?Q用相应的keyQ?/p>

  Integer n = (Integer)numbers.get(“two”);

  System.out.println(“two = ” + n);

  ׃作ؓkey的对象将通过计算其散列函数来定与之对应的value的位|,因此M作ؓkey的对象都必须实现hashCode和equalsҎ(gu)。hashCode和equalsҎ(gu)l承自根cObjectQ如果你用自定义的类当作key的话Q要相当心Q按照散列函数的定义Q如果两个对象相同,即obj1.equals(obj2)=trueQ则它们的hashCode必须相同Q但如果两个对象不同Q则它们的hashCode不一定不同,如果两个不同对象的hashCode相同Q这U现象称为冲H,冲突会导致操作哈希表的时间开销增大Q所以尽量定义好的hashCode()Ҏ(gu)Q能加快哈希表的操作?/p>

  如果相同的对象有不同的hashCodeQ对哈希表的操作会出现意想不到的l果Q期待的getҎ(gu)q回nullQ,要避免这U问题,只需要牢C条:要同时复写equalsҎ(gu)和hashCodeҎ(gu)Q而不要只写其中一个?/p>

  Hashtable是同步的?/p>

  HashMapc?/p>

  HashMap和HashtablecMQ不同之处在于HashMap是非同步的,q且允许nullQ即null value和null key。,但是HashMap视ؓCollectionӞvalues()Ҏ(gu)可返回CollectionQ,其P代子操作旉开销和HashMap 的容量成比例。因此,如果q代操作的性能相当重要的话Q不要将HashMap的初始化定w讑־q高Q或者load factorq低?/p>

  WeakHashMapc?/p>

  WeakHashMap是一U改q的HashMapQ它对key实行“弱引?#8221;Q如果一个key不再被外部所引用Q那么该key可以被GC回收?/p>

  ȝ

  如果涉及到堆栈,队列{操作,应该考虑用ListQ对于需要快速插入,删除元素Q应该用LinkedListQ如果需要快速随问元素,应该使用ArrayList?/p>

  如果E序在单U程环境中,或者访问仅仅在一个线E中q行Q考虑非同步的c,其效率较高,如果多个U程可能同时操作一个类Q应该用同步的cR?/p>

  要特别注意对哈希表的操作Q作为key的对象要正确复写equals和hashCodeҎ(gu)?/p>

  量q回接口而非实际的类型,如返回List而非ArrayListQ这样如果以后需要将ArrayList换成LinkedListӞ客户端代码不用改变。这是针对抽象~程?/p>

  同步?/p>

  Vector 是同步的。这个类中的一些方法保证了Vector中的对象是线E?a class="channel_keylink" target="_blank">安全的。而ArrayList则是异步的,因此ArrayList中的对象q不是线E?a class="channel_keylink" target="_blank">安全的。因为同步的要求会媄响执行的效率Q所以如果你不需要线E安全的集合那么使用ArrayList是一个很好的选择Q这样可以避免由于同步带来的不必要的性能开销?/p>

  数据增长

  从内部实现机制来讲ArrayList和Vector都是使用数组(Array)来控刉合中的对象。当你向q两U类型中增加元素的时候,如果元素的数目超Z内部数组目前的长度它们都需要扩展内部数l的长度QVector~省情况下自动增长原来一倍的数组长度Q?ArrayList是原来的50%,所以最后你获得的这个集合所占的I间L比你实际需要的要大。所以如果你要在集合中保存大量的数据那么使用 Vector有一些优势,因ؓ你可以通过讄集合的初始化大小来避免不必要的资源开销?/p>

  使用模式

  在ArrayList和Vector中,从一个指定的位置Q通过索引Q查找数据或是在集合的末֢加、移除一个元素所p的时间是一L(fng)Q这个时间我们用 O(1)表示。但是,如果在集合的其他位置增加或移除元素那么花费的旉会呈UŞ增长QO(n-i)Q其中n代表集合中元素的个数Qi代表元素增加或移除元素的索引位置。ؓ什么会q样呢?以ؓ在进行上q操作的时候集合中Wi和第i个元素之后的所有元素都要执行位Uȝ操作。这一切意味着什么呢Q?/p>

  q意味着Q你只是查找特定位置的元素或只在集合的末端增加、移除元素,那么使用Vector或ArrayList都可以。如果是其他操作Q你最好选择其他的集合操作类。比如,LinkList集合cd增加或移除集合中M位置的元素所p的时间都是一L(fng)?O(1)Q但它在索引一个元素的使用~比较慢QO (i),其中i是烦引的位置.使用 ArrayList也很Ҏ(gu)Q因Z可以单的使用索引来代替创建iterator对象的操作。LinkList也会为每个插入的元素创徏对象Q所有你要明白它也会带来额外的开销?/p>

  最后,在《Practical Java》一书中Peter Haggar使用一个简单的数组QArrayQ来代替Vector或ArrayList。尤其是对于执行效率要求高的E序更应如此。因Z用数l?(Array)避免了同步、额外的Ҏ(gu)调用和不必要的重新分配空间的操作?/p>

  本文来自CSDN博客Q{载请标明出处Q?a >http://blog.csdn.net/cecoo/archive/2008/04/21/2311909.aspx



白19870626 2012-09-14 09:22 发表评论
]]>
cronExpression字段是定义job执行的时?http://www.tkk7.com/baizhihui19870626/articles/381613.html白19870626白19870626Wed, 27 Jun 2012 07:49:00 GMThttp://www.tkk7.com/baizhihui19870626/articles/381613.htmlhttp://www.tkk7.com/baizhihui19870626/comments/381613.htmlhttp://www.tkk7.com/baizhihui19870626/articles/381613.html#Feedback0http://www.tkk7.com/baizhihui19870626/comments/commentRss/381613.htmlhttp://www.tkk7.com/baizhihui19870626/services/trackbacks/381613.html
Java代码 复制代码 收藏代码
  1. # 字段 允许?允许的特D字W?
  2. # U?0 - 59 , - * /
  3. # ?0 - 59 , - * /
  4. # 时 0 - 23 , - * /
  5. # 日期 1 - 31 , - * ? / L W C
  6. # 月䆾 1 - 12 或?JAN-DEC , - * /
  7. # 星期 1 - 7 或?SUN-SAT , - * ? / L C #
  8. # q_可选) 留空, 1970 - 2099 , - * /
  9. # 表达式意?
  10. # "0 0 12 * * ?" 每天中午 12 点触?
  11. # "0 15 10 ? * *" 每天上午 10 : 15 触发
  12. # "0 15 10 * * ?" 每天上午 10 : 15 触发
  13. # "0 15 10 * * ? *" 每天上午 10 : 15 触发
  14. # "0 15 10 * * ? 2005" 2005 q的每天上午 10 : 15 触发
  15. # "0 * 14 * * ?" 在每天下?2 点到下午 2 : 59 期间的每 1 分钟触发
  16. # "0 0/5 14 * * ?" 在每天下?2 点到下午 2 : 55 期间的每 5 分钟触发
  17. # "0 0/5 14,18 * * ?" 在每天下?2 点到 2 : 55 期间和下?6 点到 6 : 55 期间的每 5 分钟触发
  18. # "0 0-5 14 * * ?" 在每天下?2 点到下午 2 : 05 期间的每 1 分钟触发
  19. # "0 10,44 14 ? 3 WED" 每年三月的星期三的下?2 : 10 ?2 : 44 触发
  20. # "0 15 10 ? * MON-FRI" 周一臛_五的上午 10 : 15 触发
  21. # "0 15 10 15 * ?" 每月 15 日上?10 : 15 触发
  22. # "0 15 10 L * ?" 每月最后一日的上午 10 : 15 触发
  23. # "0 15 10 ? * 6L" 每月的最后一个星期五上午 10 : 15 触发
  24. # "0 15 10 ? * 6L 2002-2005" 2002 q至 2005 q的每月的最后一个星期五上午 10 : 15 触发
  25. # "0 15 10 ? * 6#3" 每月的第三个星期五上?10 : 15 触发
  26. # 每天早上6 ?
  27. # 0 6 * * *
  28. # 每两个小?
  29. # 0 */ 2 * * *
  30. # 晚上11 点到早上 8 点之间每两个时Q早上八?
  31. # 0 23 - 7 / 2 Q?8 * * *
  32. # 每个月的4 号和每个C拜的礼拜一到礼拜三的早?11 ?
  33. # 0 11 4 * 1 - 3
  34. # 1 ?1 日早?4 ?
  35. # 0 4 1 1 *


白19870626 2012-06-27 15:49 发表评论
]]>
java mail导入证书Q?/title><link>http://www.tkk7.com/baizhihui19870626/articles/381188.html</link><dc:creator>白19870626</dc:creator><author>白19870626</author><pubDate>Wed, 20 Jun 2012 09:01:00 GMT</pubDate><guid>http://www.tkk7.com/baizhihui19870626/articles/381188.html</guid><wfw:comment>http://www.tkk7.com/baizhihui19870626/comments/381188.html</wfw:comment><comments>http://www.tkk7.com/baizhihui19870626/articles/381188.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/baizhihui19870626/comments/commentRss/381188.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/baizhihui19870626/services/trackbacks/381188.html</trackback:ping><description><![CDATA[<p style="text-align: left; margin-bottom: 5.25pt; text-autospace: ; margin-left: 0cm; margin-right: 0cm; mso-margin-top-alt: 5.25pt" class="MsoNormal" align="left"><span style="font-family: 宋体; color: #1f497d">linux<br />1.java mail导入证书Q?o:p></o:p></span></p> <p style="text-align: left; margin-bottom: 5.25pt; text-autospace: ; margin-left: 0cm; margin-right: 0cm; mso-margin-top-alt: 5.25pt" class="MsoNormal" align="left"><span style="font-family: 宋体; color: #1f497d">cd jdk1.6.0_13\jre\lib\security<o:p></o:p></span></p> <p style="text-align: left; margin-bottom: 5.25pt; text-autospace: ; margin-left: 0cm; margin-right: 0cm; mso-margin-top-alt: 5.25pt" class="MsoNormal" align="left"><span style="font-family: 宋体; color: #1f497d">keytool -import -alias cacerts -keystore cacerts -file </span><span style="font-family: 宋体; color: red">?$INSTALL/</span><span style="font-family: 宋体; color: red">exchange_certnew.cer </span><span style="font-family: 宋体; color: #1f497d">-trustcacerts<br />标红处ؓ证书的全路径<br /><o:p></o:p></span></p> <p style="text-align: left; margin-bottom: 5.25pt; text-autospace: ; margin-left: 0cm; margin-right: 0cm; mso-margin-top-alt: 5.25pt" class="MsoNormal" align="left"><span style="font-family: 宋体; color: #1f497d">此时命o行会提示你输入cacerts证书库密?o:p></o:p></span></p> <p style="text-align: left; margin-bottom: 5.25pt; text-autospace: ; margin-left: 0cm; margin-right: 0cm; mso-margin-top-alt: 5.25pt" class="MsoNormal" align="left"><span style="font-family: 宋体; color: #1f497d">java中cacerts证书库默认密码ؓchangeit<o:p></o:p></span></p> <p style="text-align: left; margin-bottom: 5.25pt; text-autospace: ; margin-left: 0cm; margin-right: 0cm; mso-margin-top-alt: 5.25pt" class="MsoNormal" align="left"><span style="font-family: 宋体; color: #1f497d">Y认卛_QOKQ认证已d至keystore<br /><br /><br /><br />windows<br /></p> <p>W一步:</p> <p>IE打开该网站,把要导入java证书库的证书下蝲在该|页安全警报弹出H口上查看证?-详细信息--复制到文件会弹出一个证书导出向导对话框Q按提示一直下一步直到完成。我把证书保存在C盘,test.cer</p> <p>W二步:</p> <p>q入C:\Program Files\Java\jre6\lib\security 目录下。注意观察Eclipse控制C调用哪个jreQ通常JDK中包?个jreQ一个是开发的Q一个是JAVA使用的,Eclipse通常是jre6而不是jre1.6.0_02</p> <p>然后调用命oQ?/p> <p>keytool -import -alias cacerts -keystore cacerts -file C:\test.cer -trustcacerts</p> <p style="text-align: left; margin-bottom: 5.25pt; text-autospace: ; margin-left: 0cm; margin-right: 0cm; mso-margin-top-alt: 5.25pt" class="MsoNormal" align="left">-alias后面是别名,可以随便写?</p> <p>此时命o行会提示你输入cacerts证书库密?</p> <p>java中cacerts证书库默认密码ؓchangeit</p> <p>Y认卛_QOKQ认证已d至keystore</p> <p style="text-align: left; margin-bottom: 5.25pt; text-autospace: ; margin-left: 0cm; margin-right: 0cm; mso-margin-top-alt: 5.25pt" class="MsoNormal" align="left"><o:p></o:p></span></p><img src ="http://www.tkk7.com/baizhihui19870626/aggbug/381188.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/baizhihui19870626/" target="_blank">白19870626</a> 2012-06-20 17:01 <a href="http://www.tkk7.com/baizhihui19870626/articles/381188.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>获取当前旉的ȝ http://www.tkk7.com/baizhihui19870626/articles/373790.html白19870626白19870626Wed, 11 Apr 2012 05:10:00 GMThttp://www.tkk7.com/baizhihui19870626/articles/373790.htmlhttp://www.tkk7.com/baizhihui19870626/comments/373790.htmlhttp://www.tkk7.com/baizhihui19870626/articles/373790.html#Feedback0http://www.tkk7.com/baizhihui19870626/comments/commentRss/373790.htmlhttp://www.tkk7.com/baizhihui19870626/services/trackbacks/373790.htmlimport java.text.SimpleDateFormat; SimpleDateFormat formatter = new SimpleDateFormat ("yyyyqMM月dd? HH:mm:ss "); Date curDate = new Date(System.currentTimeMillis());//获取当前旉 String str = formatter.format(curDate);

可以获取当前的年月时?也可以分开?

如果惌取当前的q月,则可以这样写(只获取时间或U种一?:

当然q有是可以指定时区的时??:

df=DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.FULL,Locale.CHINA);
System.out.println(df.format(new Date()));



白19870626 2012-04-11 13:10 发表评论
]]>
JAVA Map 的三U遍历方?/title><link>http://www.tkk7.com/baizhihui19870626/articles/373642.html</link><dc:creator>白19870626</dc:creator><author>白19870626</author><pubDate>Mon, 09 Apr 2012 08:20:00 GMT</pubDate><guid>http://www.tkk7.com/baizhihui19870626/articles/373642.html</guid><wfw:comment>http://www.tkk7.com/baizhihui19870626/comments/373642.html</wfw:comment><comments>http://www.tkk7.com/baizhihui19870626/articles/373642.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/baizhihui19870626/comments/commentRss/373642.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/baizhihui19870626/services/trackbacks/373642.html</trackback:ping><description><![CDATA[<span style="color: #0000ff">import</span><span style="color: #000000"> java.util.Collection;<br /></span><span style="color: #0000ff">import</span><span style="color: #000000"> java.util.HashMap;<br /></span><span style="color: #0000ff">import</span><span style="color: #000000"> java.util.Iterator;<br /></span><span style="color: #0000ff">import</span><span style="color: #000000"> java.util.List;<br /></span><span style="color: #0000ff">import</span><span style="color: #000000"> java.util.Map;<br /></span><span style="color: #0000ff">import</span><span style="color: #000000"> java.util.Set;<br /></span><span style="color: #0000ff">import</span><span style="color: #000000"> java.util.Map.Entry;<br /><br /><br /></span><span style="color: #008000">/**</span><span style="color: #008000"><br />* map遍历的三U办?br />* </span><span style="color: #808080">@author</span><span style="color: #008000"> us<br />*<br /></span><span style="color: #008000">*/</span><span style="color: #000000"><br /></span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000"> test2<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 />{ <br /></span><span style="color: #008000">/**</span><span style="color: #008000"><br />* new一个mapQ然后添加内?br /></span><span style="color: #008000">*/</span><span style="color: #000000"><br />Map map</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000"> HashMap();<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"> </span><span style="color: #000000">0</span><span style="color: #000000">; i </span><span style="color: #000000"><</span><span style="color: #000000"> </span><span style="color: #000000">10</span><span style="color: #000000">; i</span><span style="color: #000000">++</span><span style="color: #000000">)<br />{<br />map.put(i</span><span style="color: #000000">+</span><span style="color: #000000">""</span><span style="color: #000000">,i</span><span style="color: #000000">+</span><span style="color: #000000">""</span><span style="color: #000000">);<br />System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">d</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">i</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">);<br />}<br />System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">map大小</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">map.size());<br /><br /></span><span style="color: #008000">/**</span><span style="color: #008000"><br />* 1.把值放C个集合力Q然后便利集?br /></span><span style="color: #008000">*/</span><span style="color: #000000"><br /></span><span style="color: #008000">//</span><span style="color: #008000"> Collection c=map.values();<br /></span><span style="color: #008000">//</span><span style="color: #008000"> Iterator it= c.iterator();<br /></span><span style="color: #008000">//</span><span style="color: #008000"> for (; it.hasNext();)<br /></span><span style="color: #008000">//</span><span style="color: #008000"> {<br /></span><span style="color: #008000">//</span><span style="color: #008000"> System.out.println(it.next());<br /></span><span style="color: #008000">//</span><span style="color: #008000"> }</span><span style="color: #008000"><br /></span><span style="color: #000000"><br /></span><span style="color: #008000">/**</span><span style="color: #008000"><br />* 2.把key攑ֈ一个集合里Q遍历key值同时根据key得到?(推荐)<br /></span><span style="color: #008000">*/</span><span style="color: #000000"><br /></span><span style="color: #008000">//</span><span style="color: #008000"> Set set =map.keySet();<br /></span><span style="color: #008000">//</span><span style="color: #008000"> Iterator it=set.iterator();<br /></span><span style="color: #008000">//</span><span style="color: #008000"> while(it.hasNext()){<br /></span><span style="color: #008000">//</span><span style="color: #008000"> String s= (String) it.next();<br /></span><span style="color: #008000">//</span><span style="color: #008000"> System.out.println(map.get(s));<br /></span><span style="color: #008000">//</span><span style="color: #008000"> }<br /></span><span style="color: #008000">//</span><span style="color: #008000"> </span><span style="color: #008000"><br /></span><span style="color: #000000"></span><span style="color: #008000">/**</span><span style="color: #008000"><br />* 3.把一个map对象攑ֈ攑ֈentry里,然后Ҏ(gu)entry同时得到key和?br /></span><span style="color: #008000">*/</span><span style="color: #000000"><br />Set set </span><span style="color: #000000">=</span><span style="color: #000000">map.entrySet();<br />Iterator it</span><span style="color: #000000">=</span><span style="color: #000000">set.iterator();<br /></span><span style="color: #0000ff">while</span><span style="color: #000000">(it.hasNext()){<br />Map.Entry</span><span style="color: #000000"><</span><span style="color: #000000">String, String</span><span style="color: #000000">></span><span style="color: #000000"> entry</span><span style="color: #000000">=</span><span style="color: #000000">(Entry</span><span style="color: #000000"><</span><span style="color: #000000">String, String</span><span style="color: #000000">></span><span style="color: #000000">) it.next();<br />System.out.println(entry.getKey()</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">entry.getValue());<br /><br />}<br /><br />}<br />}</span><img src ="http://www.tkk7.com/baizhihui19870626/aggbug/373642.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/baizhihui19870626/" target="_blank">白19870626</a> 2012-04-09 16:20 <a href="http://www.tkk7.com/baizhihui19870626/articles/373642.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java dcsv文gQ实?http://www.tkk7.com/baizhihui19870626/articles/373026.html白19870626白19870626Fri, 30 Mar 2012 01:34:00 GMThttp://www.tkk7.com/baizhihui19870626/articles/373026.htmlhttp://www.tkk7.com/baizhihui19870626/comments/373026.htmlhttp://www.tkk7.com/baizhihui19870626/articles/373026.html#Feedback0http://www.tkk7.com/baizhihui19870626/comments/commentRss/373026.htmlhttp://www.tkk7.com/baizhihui19870626/services/trackbacks/373026.htmlCSV文g?br />逗号分隔型取值格式(英文全称为Comma Separated ValuesQ简UCSVQ,是一U纯文本格式Q用来存储数据。在CSV中,数据的字D는逗号分开Q程序通过d文g重新创徏正确的字D,Ҏ(gu)是每ơ遇到逗号时开始新一D|据?/p>

CSV文g是一个计机数据文g用于执行审判和真正的l织工具Q逗号分隔的清单。常常被用于Ud表格数据之间的两个不同的计算机程序,例如关系数据库程序和?sh)子表格E序?/p>

本文以下面这个CSV文gZQ向大家要介lJava语言的CSVd操作的一U实现方法?/p>

writers.csv

张艺?1951,1114
沈?1981,0507
孙红?1970,0816
闫妮,1971,0310

CSVd操作
CSV文gd主要用到java.io.BufferedReadercdjava.util.StringTokenizerc,BufferedReader用来d文gQStringTokenizer用来一行数据分成多个字Dc?/p>

下面是用来读取CSV文g内容的类Q?/p>

package tip;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.StringTokenizer;

public class ReadCSV {

public static void main(String[] args) {
try {
File csv = new File("C:\\writers.csv"); // CSV文g

BufferedReader br = new BufferedReader(new FileReader(csv));

// d直到最后一?
String line = "";
while ((line = br.readLine()) != null) {
// 把一行数据分割成多个字段
StringTokenizer st = new StringTokenizer(line, ",");

while (st.hasMoreTokens()) {
// 每一行的多个字段用TAB隔开表示
System.out.print(st.nextToken() + "\t");
}
System.out.println();
}
br.close();

} catch (FileNotFoundException e) {
// 捕获File对象生成时的异常
e.printStackTrace();
} catch (IOException e) {
// 捕获BufferedReader对象关闭时的异常
e.printStackTrace();
}
}
}

执行l果如下所C:

CSV写操?br />CSV文gd主要用到java.io.BufferedWritercR?/p>

下面是写CSV文g的类Q?/p>

package tip;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;

public class WriteCSV {

public static void main(String[] args) {
try {
File csv = new File("C:\\writers.csv"); // CSV文g
// q记模式
BufferedWriter bw = new BufferedWriter(new FileWriter(csv, true));
// 新增一行数?
bw.newLine();
bw.write("三枪拍案惊奇" + "," + "2009" + "," + "1212");
bw.close();
} catch (FileNotFoundException e) {
// 捕获File对象生成时的异常
e.printStackTrace();
} catch (IOException e) {
// 捕获BufferedWriter对象关闭时的异常
e.printStackTrace();
}
}
}

执行之后的writers.csv文g如下所C:

张艺?1951,1114
沈?1981,0507
孙红?1970,0816
闫妮,1971,0310
三枪拍案惊奇,2009,1212

 

本文来自CSDN博客Q{载请标明出处Q?a >http://blog.csdn.net/aerchi/archive/2010/03/10/5364056.aspx



白19870626 2012-03-30 09:34 发表评论
]]>
javad某个文g夹下的所有文?/title><link>http://www.tkk7.com/baizhihui19870626/articles/372872.html</link><dc:creator>白19870626</dc:creator><author>白19870626</author><pubDate>Wed, 28 Mar 2012 01:53:00 GMT</pubDate><guid>http://www.tkk7.com/baizhihui19870626/articles/372872.html</guid><wfw:comment>http://www.tkk7.com/baizhihui19870626/comments/372872.html</wfw:comment><comments>http://www.tkk7.com/baizhihui19870626/articles/372872.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/baizhihui19870626/comments/commentRss/372872.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/baizhihui19870626/services/trackbacks/372872.html</trackback:ping><description><![CDATA[<p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: ˎ̥; mso-hansi-font-family: ˎ̥">q不错徏议看?/span><span style="font-family: 'ˎ̥','serif'; mso-bidi-font-size: 10.5pt" lang="EN-US">.<o:p></o:p></span></p> <p style="margin: 0cm 0cm 0pt" class="MsoNormal"><span style="font-family: 'ˎ̥','serif'; mso-bidi-font-size: 10.5pt" lang="EN-US">import java.io.FileNotFoundException;<br />import java.io.IOException;<br />import java.io.File;<br /><br />public class ReadFile {<br />        public ReadFile() {<br />        }<br />        /**<br />         * </span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: ˎ̥; mso-hansi-font-family: ˎ̥">d某个文g夹下的所有文?/span><span style="font-family: 'ˎ̥','serif'; mso-bidi-font-size: 10.5pt" lang="EN-US"><br />         */<br />        public static boolean readfile(String filepath) throws FileNotFoundException, IOException {<br />                try {<br /><br />                        File file = new File(filepath);<br />                        if (!file.isDirectory()) {<br />                                System.out.println("</span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: ˎ̥; mso-hansi-font-family: ˎ̥">文g</span><span style="font-family: 'ˎ̥','serif'; mso-bidi-font-size: 10.5pt" lang="EN-US">");<br />                                System.out.println("path=" + file.getPath());<br />                                System.out.println("absolutepath=" + file.getAbsolutePath());<br />                                System.out.println("name=" + file.getName());<br /><br />                        } else if (file.isDirectory()) {<br />                                System.out.println("</span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: ˎ̥; mso-hansi-font-family: ˎ̥">文g?/span><span style="font-family: 'ˎ̥','serif'; mso-bidi-font-size: 10.5pt" lang="EN-US">");<br />                                String[] filelist = file.list();<br />                                for (int i = 0; i < filelist.length; i++) {<br />                                        File readfile = new File(filepath + "\\" + filelist[i]);<br />                                        if (!readfile.isDirectory()) {<br />                                                System.out.println("path=" + readfile.getPath());<br />                                                System.out.println("absolutepath="<br />                                                                + readfile.getAbsolutePath());<br />                                                System.out.println("name=" + readfile.getName());<br /><br />                                        } else if (readfile.isDirectory()) {<br />                                                readfile(filepath + "\\" + filelist[i]);<br />                                        }<br />                                }<br /><br />                        }<br /><br />                } catch (FileNotFoundException e) {<br />                        System.out.println("readfile()   Exception:" + e.getMessage());<br />                }<br />                return true;<br />        }<br /><br />        /**<br />         * </span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: ˎ̥; mso-hansi-font-family: ˎ̥">删除某个文g夹下的所有文件夹和文?/span><span style="font-family: 'ˎ̥','serif'; mso-bidi-font-size: 10.5pt" lang="EN-US"><br />         */<br />        <br />        <br />        /*public static boolean deletefile(String delpath)<br />                        throws FileNotFoundException, IOException {<br />                try {<br /><br />                        File file = new File(delpath);<br />                        if (!file.isDirectory()) {<br />                                System.out.println("1");<br />                                file.delete();<br />                        } else if (file.isDirectory()) {<br />                                System.out.println("2");<br />                                String[] filelist = file.list();<br />                                for (int i = 0; i < filelist.length; i++) {<br />                                        File delfile = new File(delpath + "\\" + filelist[i]);<br />                                        if (!delfile.isDirectory()) {<br />                                                System.out.println("path=" + delfile.getPath());<br />                                                System.out.println("absolutepath="<br />                                                                + delfile.getAbsolutePath());<br />                                                System.out.println("name=" + delfile.getName());<br />                                                delfile.delete();<br />                                                System.out.println("</span><span style="font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: ˎ̥; mso-hansi-font-family: ˎ̥">删除文g成功</span><span style="font-family: 'ˎ̥','serif'; mso-bidi-font-size: 10.5pt" lang="EN-US">");<br />                                        } else if (delfile.isDirectory()) {<br />                                                deletefile(delpath + "\\" + filelist[i]);<br />                                        }<br />                                }<br />                                file.delete();<br /><br />                        }<br /><br />                } catch (FileNotFoundException e) {<br />                        System.out.println("deletefile()   Exception:" + e.getMessage());<br />                }<br />                return true;<br />        }*/<br />        <br />        public static void main(String[] args) {<br />                try {<br />                        readfile("e:/videos");<br />                        // deletefile("D:/file");<br />                } catch (FileNotFoundException ex) {<br />                } catch (IOException ex) {<br />                }<br />                System.out.println("ok");<br />        }<br /><br />}</span></p><img src ="http://www.tkk7.com/baizhihui19870626/aggbug/372872.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/baizhihui19870626/" target="_blank">白19870626</a> 2012-03-28 09:53 <a href="http://www.tkk7.com/baizhihui19870626/articles/372872.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解决“Y件包 javax.servlet 不存在”错误的Ҏ(gu) http://www.tkk7.com/baizhihui19870626/articles/372684.html白19870626白19870626Mon, 26 Mar 2012 02:27:00 GMThttp://www.tkk7.com/baizhihui19870626/articles/372684.htmlhttp://www.tkk7.com/baizhihui19870626/comments/372684.htmlhttp://www.tkk7.com/baizhihui19870626/articles/372684.html#Feedback0http://www.tkk7.com/baizhihui19870626/comments/commentRss/372684.htmlhttp://www.tkk7.com/baizhihui19870626/services/trackbacks/372684.html~译Qjavac Servlet.java 出现

软g?javax.servlet 不存?/span>

软g包javax.servlet.http 不存?{错?/span>

 

׃servlet和JSP不是Javaq_JavaSEQ标准版Q的一部分Q而是Java EEQ企业版Q的一部分Q因此,必须告知~译器servlet的位|?/span>

解决“软g?javax.servlet不存?#8221;错误的方法:

1. 搜烦servlet-api.jar

所在文件夹QC:\Tomcat5.5\common\lib

2. 环境变量CLASSPATH的D|ؓQ?/span>

.;C:\Tomcat5.5\common\lib\servlet-api.jar

3. 除了讄classpath以及servlet-api.jar外,q有一点!Q!

把COMMON/LIB下的SERVLET-API.JAR 拯到JDK/jre\lib\ext?/p>

白19870626 2012-03-26 10:27 发表评论
]]>
java打包 jar http://www.tkk7.com/baizhihui19870626/articles/372527.html白19870626白19870626Fri, 23 Mar 2012 03:21:00 GMThttp://www.tkk7.com/baizhihui19870626/articles/372527.htmlhttp://www.tkk7.com/baizhihui19870626/comments/372527.htmlhttp://www.tkk7.com/baizhihui19870626/articles/372527.html#Feedback0http://www.tkk7.com/baizhihui19870626/comments/commentRss/372527.htmlhttp://www.tkk7.com/baizhihui19870626/services/trackbacks/372527.htmljava打包 jar
关键? java jar
发布Java应用E序时你会感到困难?好在Java提供了一pd打包和发布工P可以显著的简化发布过E该文章提供了打包Java code的几U方法,我们会探讨Java manifest 文gQ给出用于管理JAR文g所依赖文g、估计跨q_发布所需的CLasspath的合适方?我也会解释如何用manifest包版本特性来认包的兼容?..
什么是JAR文gQ?
在开发过E中Q我们可以直接用Java class文g来运行程序,但这q不是一个好方式Q好在Java 提供?JAR(Java Archive)文g来提供发布和q行?
jar 文g实际上是class 文g的ZIP压羃存档Q这U格式被q泛使用Q因此易与用,有很多中工具可以操作q种格式的文件。也正是因ؓq个原因Qjar文g本nq不能表达所包含应用E序的标{信息?
Manifest 因此得以出现
Z要提供存档的标签信息Qjar 文g指定了一个特定目录来存放标签信息QMETA-INF 目录Q其中我们来x该目录中的MANIFEST.MF文gQ他是JAR的manifest文gQ他包含了JAR文g的内Ҏ(gu)qͼq在q行时向JVM提供应用E序的信息,大多数JAR文g含有一个默认生成的manifest 文g,执行JAR命o或用zip工具Q都可以产生?
如果是由jar命o产生?manifest 文gQŞ?
Manifest-Version: 1.0
Created-By:1.4.0-beta
(Sun Microsystems Inc.)
q些信息没甚么用,仅仅告诉我们使用的是1.0的manifest文g,W一行定义manifest的格式,W二行说明?SUN 的JDK1.4的jar工具生成该文Ӟ如果manifest文g是由其他 Q如antQ?创徏的,那将会出?“Created-By: Ant 1.2” 之类的内容,如果你是自己创徏manifest文gQ你可以加入自己的一些相关信?
基础格式
manifest 文g的格?是很单的Q每一行都?名-?对应?属性名开_接着?":" Q然后是属性|每行最?2个字W,如果需要增加,你可以在下一行箋行,l行以空格开_以空格开头的行都会被视ؓ前一行的l行?
所有在开头的属性都是全局的,你也可以定义特定class 或package的属性,E后介l这U?
把manifest文g插入JAR文g
使用 m 选项Q把指定文g名的manifest文g 传入Q例?
jar cvfm myapplication.jar myapplication.mf [-C]classdir
如果你用ant来创建时Q在ant 的build.xml 加入如下条目
<target name="jar">
<jar jarfile ="myapplication.jar"
manifest="myapplication.mf">
<fileset dir="classdir"
includes="**/*.class"/>
</jar>
</target>
q行JavaE序
现在我们来体验一下manifest文g的作用,如果现在我们有一个Java 应用E序打包在myapplication.jar中, main class?com.example.myapp.MyAppMain Q那么我们可以用以下的命令来q行
java -classpath myapplication.jar com.example.myapp.MyAppMain
q显然太ȝ了,现在我们来创qmanifest文gQ如下:
Manifest-Version: 1.0
Created-By: JDJ example
Main-Class: com.example.myapp.MyAppMain
q样我们可以用如下的命o来运行程序了Q(明显单多了,也不会造成无谓的拼写错误)
java -jar myapplication.jar
理JAR的依赖资?
很少Java应用会仅仅只有一个jar文gQ一般还需?其他cd。比如我的应用程序用CSun ?Javamail classes Q在classpath中我需要包含activation.jar ?mail.jar,q样在运行程序时,相比上面的例?我们要增加一?
java -classpath mail.jar:activation.jar -jar myapplication.jar
在不同的操作pȝ?jar包间的分隔符也不一P在UNIX?#8220;Q?#8221;Q在window中?“Q?#8221;Q这样也不方?
同样Q我们改写我们的manifest文gQ如?
Manifest-Version: 1.0
Created-By: JDJ example
Main-Class: com.example.myapp.MyAppMain
Class-Path: mail.jar activation.jar
Q加入了Class-Path: mail.jar activation.jarQ用I格分隔两个jar包)
q样我们仍然可以使用和上例中相同的命令来执行该程序:
java -jar myapplication.jar
Class-Path属性中包含了用I格分隔的jar文gQ在q些jar文g名中要对特定的字W用逃逸符Q比如空|要表C成"%20"Q在路径的表CZQ都采用“/”来分隔目录,无论是在什么操作系l中Q?即在window?Q而且q里用的是相对\径(相对于本w的JAR文gQ:
Manifest-Version: 1.0
Created-By: JDJ example
Main-Class: com.example.myapp.MyAppMain
Class-Path: ext/mail.jar ext/activation.jar
Multiple Main ClassesQ多ȝQ?
q有一UMultiple Main Classes情况Q如果你的应用程序可能有命o行版?和GUI版本Q或者一些不同的应用却共享很多相同的代码Q这时你可能有多个Main ClassQ我们徏议你采取q样的策略:把共享的cL成lib包,然后把不同的应用打成不同的包Q分别标志主c:如下
Manifest for myapplicationlib.jar:
Manifest-Version: 1.0
Created-By: JDJ example
Class-Path: mail.jar activation.jar
Manifest for myappconsole.jar:
Manifest-Version: 1.0
Created-By: JDJ example
Class-Path: myapplicationlib.jar
Main-Class: com.example.myapp.MyAppMain
Manifest for myappadmin.jar:
Manifest-Version: 1.0
Created-By: JDJ example
Class-Path: myapplicationlib.jar
Main-Class: com.example.myapp.MyAdminTool
在myappconsole.jar ?myappadmin.jar的manifest文g中分别注明各自的 Main Class
Package Versioning
完成发布后,如果使用者想了解 Q哪些代码是谁的Q目前是什么版本?使用什么版本的cdQ解决的Ҏ(gu)很多 Qmanifest提供了一个较好的Ҏ(gu)Q你可以在manifest文g中描q每一个包的信息?
Java U承了实现说明与描述分离的原则,package 的描q?定义了package 是什么,实现说明 定义了谁提供了描q的实现Q描q和实现包含 名、版本号和提供者。要得到q些信息Q可以查看JVM的系l属性(使用 java.lang.System.getProperty() Q?
在manifest文g中,我可以ؓ每个package定义描述和实现版本,声明名字Qƈ加入描述属性和实现属性,q些属性是
Specification-Title
Specification-Version
Specification-Vendor
Implementation-Title
Implementation-Version
Implementation-Vendor
当要提供一个类库或~程接口Ӟ描述信息昑־是很重要Q见以下范例Q?
Manifest-Version: 1.0
Created-By: JDJ example
Class-Path: mail.jar activation.jar
Name: com/example/myapp/
Specification-Title: MyApp
Specification-Version: 2.4
Specification-Vendor: example.com
Implementation-Title: com.example.myapp
Implementation-Version: 2002-03-05-A
Implementation-Vendor: example.com
Package Version 查询
在manifest文g中加入package描述后,可以用Java提供的java.lang.Package classq行Package 的信息查询,q里列D3个最基本的获取package object的方?
1.Package.getPackages():q回pȝ中所有定义的package列表
2.Package.getPackage(String packagename):按名q回package
3.Class.getPackage():q回l定class所在的package
使用者这Ҏ(gu)可以动态的获取package信息.
需要注意的是如果给定的package中没有class被加?则也无法获得package 对象
Manifest 技?
L以Manifest-Version属性开?
每行最?2个字W,如果过的化Q采用箋?
认每行都以回Rl束Q否则改行将会被忽略
如果Class-Path 中的存在路径Q?/"分隔目录Q与q_无关
使用I分隔d性和package属?
使用"/"而不?."来分隔package 和class ,比如 com/example/myapp/
class 要以.classl尾Qpackage 要以 / l尾


白19870626 2012-03-23 11:21 发表评论
]]>
介绍一下eclipseq个软ghttp://www.tkk7.com/baizhihui19870626/articles/371899.html白19870626白19870626Thu, 15 Mar 2012 01:01:00 GMThttp://www.tkk7.com/baizhihui19870626/articles/371899.htmlhttp://www.tkk7.com/baizhihui19870626/comments/371899.htmlhttp://www.tkk7.com/baizhihui19870626/articles/371899.html#Feedback0http://www.tkk7.com/baizhihui19870626/comments/commentRss/371899.htmlhttp://www.tkk7.com/baizhihui19870626/services/trackbacks/371899.htmlEclipse的本w只是一个框架^収ͼ但是众多插g的支持,使得Eclipse拥有较佳的灵zL。许多Y件开发商以Eclipse为框架开发自qIDE?br />
历史

Eclipse最初是由IBM公司开发的替代商业软gVisual Age for Java的下一代IDE开发环境,2001q?1月A(ch)献给开源社区,现在它由非营利Y件供应商联盟Eclipse基金会(Eclipse FoundationQ管理?2003q_Eclipse 3.0选择OSGi服务q_规范行时架构?2007q?月,E_?.3发布Q?008q?月发布代号ؓGanymede?.4版;2009q?月发布代号ؓGalileo?.5版;2010q?月发布代号ؓHelios?.6?br />架构

Eclipse的基是富客户机^収ͼRich Client PlatformQ即RCPQ。RCP包括下列lgQ?br />核心q_Q启动EclipseQ运行插Ӟ
OSGiQ标准集束框Ӟ
SWTQ可UL构g工具包)
JFaceQ文件缓Ԍ文本处理Q文本编辑器Q?br />Eclipse工作収ͼ即Workbench Q包含视图(viewsQ、编辑器QeditorsQ、视角(perspectivesQ、和向导QwizardsQ)
Eclipse采用的技术是IBM公司开发的QSWTQ,q是一U基于Java的窗口组ӞcMJava本n提供的AWT和SwingH口lgQ不qIBM声称SWT比其他JavaH口lg更有效率。Eclipse的用L(fng)面还使用了GUI中间层JFaceQ从而简化了ZSWT的应用程序的构徏?br />Eclipse的插件机制是d软glg化架构。在富客hq_上,Eclipse使用插g来提供所有的附加功能Q例如支持Java以外的其他语a?已有的分ȝ插g已经能够支持C/C++QCDTQ、PHP、Perl、RubyQPython、telnet和数据库开发。插件架构能够支持将L的扩展加入到现有环境中,例如配置理Q而决不仅仅限于支持各U编E语a?br />Eclipse的设计思想是:一切皆插g。Eclipse核心很小Q其它所有功能都以插件的形式附加于Eclipse核心之上。Eclipse基本内核包括Q图形API (SWT/Jface)Q?Java开发环境插ӞJDTQ,插g开发环境(PDEQ等?br />
Eclipse计划

Eclipse由各U不同的计划l成。以下列Z部分计划Q更完整全面的列表在此(英文Q?br />Eclipse计划Q本w包括Eclipseq_QEclipse富客L(fng)q_QRCPQ和Java开发工PJDTQ?br />Eclipse试和性能工具q_QTPTPQ:提供一个允许Y件开发者构如测试调试、概况分析、基准评等试和性能工具的^台?br />Eclipse Web工具q_计划QWTPQ:用Java企业版Web应用E序开发工h扩展Eclipseq_。它׃下部分组成:HTML、JavaScript、CSS、JSP、SQL、XML、DTD、XSD和W(xu)SDL的源代码~辑器;XSD和W(xu)SDL的图形界面编辑器QJava企业版的“目性质”Qproject natureQ、徏构器QbuilderQ和模型QmodelQ,与一个Java企业版的DQnavigatorQ;一个Web服务QWeb serviceQ向导和览器,q有一个WS-I试工具Q最后是数据库访问查询的工具与模型?br />Eclipse商业和报表工兯划(BIRTQ:提供Web应用E序Q特别是ZJava企业版的Q的报表开发工兗?br />Eclipse可视化界面编辑器计划QVEPQ:一个Eclipse下创建图形用L(fng)面代码生成器的框架?br />Eclipse建模框架QEMFQ:依据使用XMI描述的徏模规|生成l构化数据模型的工具和其他应用程序的代码?br />囑Ş化编辑器框架QGEFQ:能让开发者采用一个现成的应用E序模型来轻村֜创徏富图形化~辑器?br />UML2QEclipseq_下的一个UML 2.0元模型的实现Q用以支持徏模工L(fng)开发?br />AspectJQ一U针对Java的面向侧面语a扩展?br />Eclipse通讯框架QECFQ:专注于在Eclipseq_上创建通讯应用E序的工作?br />Eclipse数据工具q_计划QDTPQ?br />Eclipse讑֤驱动软g开发计划(DSDPQ?br />C/C++开发工兯划(CDTQ:努力为Eclipseq_提供一个全功能C和C++的集成开发环境(IDEQ,它用GCC作ؓ~译器?br />PHP开发工兯划(PDTQ:努力为Eclipseq_提供一个全功能PHP的集成开发环境(IDEQ?br />Eclipseq_COBOL集成开发环境子计划QCOBOLQ:构Z个Eclipseq_上的全功能COBOL集成开发环境?br />q行工具q_QPTPQ:开发一个对q行计算机架构下的一l工兯行集成的q工具q_Q而且q个q_是可UL的,可׾~的q基于标准的?br />嵌入式富客户端^収ͼeRCPQ:计划Eclipse富客L(fng)q_扩展到嵌入式讑֤上。这个^C要是一个富客户端^収ͼRCPQ组件子集的集合。它能让桌面环境下的应用E序模型能够大致同样地能q用在嵌入式讑֤上?br />
发行版本

版本代号 发行日期 q_版本 计划名称
CallistoQ卡利斯托) 2006q??0?3.2 Callisto projects
EuropaQ欧|巴Q?2007q??9?3.3 Europa projects
GanymedeQ伽倪墨得斯Q?2008q??5?3.4 Ganymede projects
GalileoQ伽利略Q?2009q??4?3.5 Galileo projects
HeliosQ赫利俄斯) 2010q??3?3.6 Helios Projects
IndigoQ靛青) 2011q??3.7 Indigo Projects

白19870626 2012-03-15 09:01 发表评论
]]>
(?熔岩)Java 反射机制---学习中。。?/title><link>http://www.tkk7.com/baizhihui19870626/articles/371816.html</link><dc:creator>白19870626</dc:creator><author>白19870626</author><pubDate>Tue, 13 Mar 2012 09:46:00 GMT</pubDate><guid>http://www.tkk7.com/baizhihui19870626/articles/371816.html</guid><wfw:comment>http://www.tkk7.com/baizhihui19870626/comments/371816.html</wfw:comment><comments>http://www.tkk7.com/baizhihui19870626/articles/371816.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/baizhihui19870626/comments/commentRss/371816.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/baizhihui19870626/services/trackbacks/371816.html</trackback:ping><description><![CDATA[    只有注册用户d后才能阅读该文?a href='http://www.tkk7.com/baizhihui19870626/articles/371816.html'>阅读全文</a><img src ="http://www.tkk7.com/baizhihui19870626/aggbug/371816.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/baizhihui19870626/" target="_blank">白19870626</a> 2012-03-13 17:46 <a href="http://www.tkk7.com/baizhihui19870626/articles/371816.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在MyEclipse中直接查看class文gQ在没有源码的情况下Q?http://www.tkk7.com/baizhihui19870626/articles/371795.html白19870626白19870626Tue, 13 Mar 2012 04:54:00 GMThttp://www.tkk7.com/baizhihui19870626/articles/371795.htmlhttp://www.tkk7.com/baizhihui19870626/comments/371795.htmlhttp://www.tkk7.com/baizhihui19870626/articles/371795.html#Feedback0http://www.tkk7.com/baizhihui19870626/comments/commentRss/371795.htmlhttp://www.tkk7.com/baizhihui19870626/services/trackbacks/371795.html阅读全文

白19870626 2012-03-13 12:54 发表评论
]]>
վ֩ģ壺 þþþ޾Ʒϵ| Ƶ| ޾ƷԲ߹ۿ| AV鶹Ʒ| ѹۿ| aƵѹۿƵ| ޹Ʒһ| ޳aëƬ| ŮƵaƵȫվɫ| AVˬҹҹ | Ʒѹۿ| a߹ۿƵ| þ޾Ʒ߳ۺɫaƬ| Ů߹| ƷƷþһʽ| һëƬѿ˾| һɫþۺ޾Ʒ| AV˾þԭ| Ů18һëƬѹۿ| a߹a| ѲƵ| ѹۿڵwwwСƵ| ƷƵ| ߿һ| ˳ɵӰ߲| ëƬavպav| պ߹ۿ| ޹һ߹ۿ| ѿŮճˮƵ| ββ8xѾþ| ձѵӰһ| ĻӰѹۿַ| ձaaaaaƬƵ| ĻƵ| þþƷѹۿ| Ƶ| һ˿wwwƵ߹ۿ| ޸ëƬһ| Ůۺɫһ| þþƷAV鶹| պaëƬѹۿ|