﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-专注于 Java EE 技术-随笔分类-Java SE</title><link>http://www.blogjava.net/yanfa120/category/35396.html</link><description>゛利用业余时间，赶超你的竞争对手゛</description><language>zh-cn</language><lastBuildDate>Tue, 09 Feb 2010 10:01:41 GMT</lastBuildDate><pubDate>Tue, 09 Feb 2010 10:01:41 GMT</pubDate><ttl>60</ttl><item><title>门球三方单打赛编排</title><link>http://www.blogjava.net/yanfa120/archive/2010/02/07/312274.html</link><dc:creator>小-熊</dc:creator><author>小-熊</author><pubDate>Sun, 07 Feb 2010 13:40:00 GMT</pubDate><guid>http://www.blogjava.net/yanfa120/archive/2010/02/07/312274.html</guid><wfw:comment>http://www.blogjava.net/yanfa120/comments/312274.html</wfw:comment><comments>http://www.blogjava.net/yanfa120/archive/2010/02/07/312274.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yanfa120/comments/commentRss/312274.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yanfa120/services/trackbacks/312274.html</trackback:ping><description><![CDATA[<p>9人比赛,3个人一场,打一个循环,共4轮12场球.要求在每场比赛中相遇过的对手不能重复.如:9人比赛的安排,第一轮,1.4.7,&nbsp; 2.5.8,&nbsp; 3.6.9,第二轮2.4.9&nbsp; 3.5.7,&nbsp; 1.6.8,&nbsp; 第三轮,1.5.9,&nbsp; 2.6.7,&nbsp; 3.4.8,&nbsp; 第四轮,1.2.3,&nbsp; 4.5.6,&nbsp; 7.8.9,&nbsp; <br />
现在,15人比赛,进行一个循环,共7轮35场球,我编到31场就怎么也编不下去了,怎么编都会重复一个人<br />
这题该怎么写算法。随便用什么语言实<br />
可分两步实现:（<span style="color: red">提示</span>）<br />
1. 实现35个不重复队<br />
2. 从35个队中实现7轮,每轮不重复队员</p>
<img src ="http://www.blogjava.net/yanfa120/aggbug/312274.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yanfa120/" target="_blank">小-熊</a> 2010-02-07 21:40 <a href="http://www.blogjava.net/yanfa120/archive/2010/02/07/312274.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>迅雷亲历面经：笔试+上机+面试（完整JAVA面试题求解大讨论）</title><link>http://www.blogjava.net/yanfa120/archive/2009/12/24/307209.html</link><dc:creator>小-熊</dc:creator><author>小-熊</author><pubDate>Thu, 24 Dec 2009 12:27:00 GMT</pubDate><guid>http://www.blogjava.net/yanfa120/archive/2009/12/24/307209.html</guid><wfw:comment>http://www.blogjava.net/yanfa120/comments/307209.html</wfw:comment><comments>http://www.blogjava.net/yanfa120/archive/2009/12/24/307209.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.blogjava.net/yanfa120/comments/commentRss/307209.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yanfa120/services/trackbacks/307209.html</trackback:ping><description><![CDATA[<p>迅雷亲历面经：笔试+上机+面试（完整JAVA面试题求解大讨论）[</p>
<p><br />
迅雷面试回来，用了整整一下午（不知道怎么说了，其中等待时间都快2小时了），自己感觉笔试和上机还可以，但技术面谈这一关答得不太好，现在再次感觉互联网公司与一般软件公司的区别了，其中一点就是互联网应用在性能上要求很高，谈了一个小时大部分题目感觉都在谈论性能问题，自己在方面一直是弱项，汗啊：（ </p>
<p>仔细回忆了一下整个面试过程的题目，记录下来，希望大家多多给点意见讨论下啊 </p>
<p>一、笔试题： <br />
A)JAVA基础多项选择题，比较简单，略 </p>
<p>B)问答： <br />
1）ajax原理、如何实现刷新数据及优点？ <br />
2）门面模式的解释、适用场合？ <br />
3）写6个linux常用命令？ <br />
4）SQL语句题，较简单 </p>
<p>C)编程： <br />
1）有三个线程ID分别是A、B、C,请有多线编程实现，在屏幕上循环打印10次ABCABC&#8230; <br />
2）假如有字符串&#8220;6sabcsssfsfs33&#8221; ，用最有快速的方法去掉字符&#8220;ab3&#8221;，不能用java内置字符串方法（indeOf,substring,replaceAll等）？ </p>
<p>二、上机题： <br />
Java上机实现统计某一目录下每个文件中出现的字母个数、数字个数、空格个数及行数？ </p>
<p>三、面试题： <br />
1、说说JVM原理？内存泄露与溢出区别，何时产生内存泄露？ <br />
2、用java怎么实现有每天有1亿条记录的DB存储？mysql上亿记录数据量的数据库如何设计？ <br />
3、mysql支持事务吗？DB存储引擎有哪些？ <br />
4、mvc原理，mvc模式的优缺点,如果让你设计你会怎么改造MVC？ <br />
5、hibernate支持集群吗？如何实现集群？ <br />
6、tomcat 最多支持并发多少用户？ <br />
7、map原理，它是如何快速查找key的？map与set区别？ <br />
8、描术算法，如何有效合并两个文件：一个是1亿条的用户基本信息，另一个是用户每天看电影连续剧等的记录，5000万条。内存只有1G？？？ <br />
9、在1亿条用户记录里，如何快速查询统计出看了5个电影以上的用户？ <br />
10、Spring如何实现IOC与AOP的，说出实现原理？ </p>
<p>期待大家的探讨，共同提高，多谢 </p>
<img src ="http://www.blogjava.net/yanfa120/aggbug/307209.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yanfa120/" target="_blank">小-熊</a> 2009-12-24 20:27 <a href="http://www.blogjava.net/yanfa120/archive/2009/12/24/307209.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>张龙讲座后精华</title><link>http://www.blogjava.net/yanfa120/archive/2009/12/09/305330.html</link><dc:creator>小-熊</dc:creator><author>小-熊</author><pubDate>Wed, 09 Dec 2009 12:43:00 GMT</pubDate><guid>http://www.blogjava.net/yanfa120/archive/2009/12/09/305330.html</guid><wfw:comment>http://www.blogjava.net/yanfa120/comments/305330.html</wfw:comment><comments>http://www.blogjava.net/yanfa120/archive/2009/12/09/305330.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yanfa120/comments/commentRss/305330.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yanfa120/services/trackbacks/305330.html</trackback:ping><description><![CDATA[<p>敢于优秀，敢于拔尖。<br />
不要受限于所处的环境，将眼睛放远点。<br />
随波逐流是对自己的不负责。<br />
拥有自己的核心竞争力。</p>
<p>每天上/下班路上看几页书，思考一个问题。（在大城市工作的地方与住的地方都是比较远的）</p>
<p><br />
程序员是最好的职业选手</p>
<p><br />
在工作的时候尽量不要问别人问题，自己能解决的问题都自己解决。（当你有问题的时候，别人也会有和你一样问题，去网上搜搜就知道了）<br />
当别人有问题问你的时候，热情的帮人家解决。（别人会认为你很热情，技术高超，同时自己又提高自己的知识）</p>
<p>学习强势技术<br />
工作中所用的技术务必扎实<br />
学习当前热门的技术<br />
积极应用到工作中</p>
<p>&nbsp;</p>
<p>如何学习？<br />
Google,Baidu 是用来解决问题的<br />
系统的学习必须要看书<br />
辅以高质量的视频教程<br />
电脑+互联网==几乎所有的资源=》true<br />
&nbsp;</p>
<p><br />
如何看书？<br />
没必要逐字逐句阅读，扫读<br />
没必要从头读到尾，带着问题去读，跳读<br />
运行随书代码<br />
一本书远远解不了问题<br />
敢于阅读英文技术书</p>
<p>培养适合自己的学习方法<br />
一生的知识积累，自学的起码占90%<br />
程序员行业是最适合自学的行业，网络是程序员的天堂</p>
<p>没有自学能力的程序员一定会被淘汰<br />
任何一门新技术、新语言、新思想的学习，开始总是最难的，过了这道坎很可能是一马平川<br />
多种语言、技术同时学是大忌。</p>
<p>工作时绝对不要开IM软件，培养专注的品质<br />
工作是工作，生活是生活</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>www.codeproject.com<br />
www.cnblogs.com<br />
www.javaeye.com<br />
www.blogjava.net<br />
www.asp.net<br />
www.infoq.com/cn<br />
www.apache.org</p>
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/yanfa120/aggbug/305330.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yanfa120/" target="_blank">小-熊</a> 2009-12-09 20:43 <a href="http://www.blogjava.net/yanfa120/archive/2009/12/09/305330.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何寻找好书？</title><link>http://www.blogjava.net/yanfa120/archive/2009/11/03/300961.html</link><dc:creator>小-熊</dc:creator><author>小-熊</author><pubDate>Tue, 03 Nov 2009 10:56:00 GMT</pubDate><guid>http://www.blogjava.net/yanfa120/archive/2009/11/03/300961.html</guid><wfw:comment>http://www.blogjava.net/yanfa120/comments/300961.html</wfw:comment><comments>http://www.blogjava.net/yanfa120/archive/2009/11/03/300961.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yanfa120/comments/commentRss/300961.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yanfa120/services/trackbacks/300961.html</trackback:ping><description><![CDATA[<p>所谓好书，就是适合自己的书！每个人的情况不一样，要根据自身的情况选择书籍，有的同学没有任何编程基础，上来就读设计模式，估计要吐血，有的人已经写过多个项目，你要他去读Java入门，他也会郁闷，所以，请灵活，千万别把东西学死了，总有同学会认为有那么一条路，沿着路一步一步的走就一定能达到顶峰，我要告诉你的是，如果真有一条固定死的学习之路，这门学科就没什么可发展的了。不要按照应试教育的思维去考虑实际的问题，请灵活一点，再灵活一点，要有走弯路、读错书的准备，不能指望一点弯路都不走，哪怕是在别人的指导之下。</p>
<p>这里讲一个简单的找书的方法，非常简单。</p>
<p>比如你要学习JavaScript，那么登陆一个卖书的网站，比如china-pub、dearbook、当当，输入JavaScript进行搜索，按照销量排行，（一定是按照销量排行哦）排在前面的基本上都是不错的书。</p>
<p>如果你慎重的话，应该去下载这本书，或者到书店找到它，读上几章（前后都要读，有的书前面的翻译的不错，后面由于时间紧，翻译就变得特别烂了），感觉对自己有帮助，适合自己的，就可以买了。</p>
<p>不要害怕买错书，读错书，其实任何一本书，哪怕是用两三周时间，到处扫描抄袭攒出来的书，不可能对你一点帮助没有，观其大略，找到对你有帮助的地方，折上角，可以了。但是如果你非得一个字一个字去读，一边读一边骂娘，是没什么帮助的，只能让你读书籍市场充满失望。所以，不要这样做，采用正确的读书方法吧。</p>
<img src ="http://www.blogjava.net/yanfa120/aggbug/300961.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yanfa120/" target="_blank">小-熊</a> 2009-11-03 18:56 <a href="http://www.blogjava.net/yanfa120/archive/2009/11/03/300961.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA自学路线图</title><link>http://www.blogjava.net/yanfa120/archive/2009/11/03/300959.html</link><dc:creator>小-熊</dc:creator><author>小-熊</author><pubDate>Tue, 03 Nov 2009 10:55:00 GMT</pubDate><guid>http://www.blogjava.net/yanfa120/archive/2009/11/03/300959.html</guid><wfw:comment>http://www.blogjava.net/yanfa120/comments/300959.html</wfw:comment><comments>http://www.blogjava.net/yanfa120/archive/2009/11/03/300959.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yanfa120/comments/commentRss/300959.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yanfa120/services/trackbacks/300959.html</trackback:ping><description><![CDATA[<div>JAVA自学之路 二:JAVA自学路线图</div>
<div></div>
<div>
<div>[转载请注明出处:http://www.bjsxt.com/zixue/zixuezhilu_1.html]<br />
<p>有不少的同学发信给我，和我探讨java的自学过程应该是什么样的，毕竟有很多人因为各种各样的原因不能参加培训。我试着给出自己的见解，抛砖引玉吧。</p>
<p>这个路线图是给那些为了就业的人准备的，如果只是兴趣，不一定照这个走。<br />
这里只是讲了路线图，关于路线中的各个阶段，学到什么程度，如何学习等，可以参考后面的JAVA自学之路 七:《路线图明细》。</p>
<p>首先要学JavaSE，这是无庸置疑的。<br />
与此同时，是的，与此同时，和JavaSE的学习同步，建议大家研究一下数据结构与算法。<br />
在这儿之后，你可以选择向J2ME、或者Java GUI、Socket编程等方向努力，但是通过第一篇的办法，你可以很容易就将这方向过滤掉（永远不要忘了我们是为了就业），好吧，暂时和它们诀别，还是向着J2EE的方向前进吧。<br />
在JavaSE完成之后，可以试着完成一些小项目，同时关注一下设计模式的内容，不必强求自己能够完全掌握各种细节，往前走吧。<br />
掌握一种编程工具，比如说Eclipse。<br />
数据库，可以选择使用Oracle或者MySQL开始<br />
。 JDBC，用Java连接数据库。<br />
可以选择在这个地方切入Hibernate，也可以选择在Struts<br />
之后。 HTML CSS JavaScript，这些东西是做web项目必需的内容<br />
。 Servlet JSP，服务器端必需。<br />
XML AJAX，新的流行趋势不能不了解。<br />
作一些小项目吧。比如BBS、留言系统、学籍管理、商城等等，随便着一些业务逻辑比较简单的来做一做。 Struts，MVC的典型应用<br />
Hibernate，OR Mapping的典范之作。<br />
Spring IOC + AOP， 面向对象 ＋ 面向切面，完善的旅程。<br />
把以前自己的小项目加入Struts、Spring、Hibernate的元素吧。<br />
去研究各种商业项目的业务逻辑吧，才能在你的简历中加入浓重的一笔。<br />
EJB3.0，java在走了很多弯路后的回归之作，值得研究。<br />
SOA，业界铁定的未来趋势，要紧紧跟随。<br />
</p>
在后面，我会告诉你每一步的学习方法和学习重点。<br />
</div>
</div>
<img src ="http://www.blogjava.net/yanfa120/aggbug/300959.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yanfa120/" target="_blank">小-熊</a> 2009-11-03 18:55 <a href="http://www.blogjava.net/yanfa120/archive/2009/11/03/300959.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA自学之路</title><link>http://www.blogjava.net/yanfa120/archive/2009/11/03/300958.html</link><dc:creator>小-熊</dc:creator><author>小-熊</author><pubDate>Tue, 03 Nov 2009 10:54:00 GMT</pubDate><guid>http://www.blogjava.net/yanfa120/archive/2009/11/03/300958.html</guid><wfw:comment>http://www.blogjava.net/yanfa120/comments/300958.html</wfw:comment><comments>http://www.blogjava.net/yanfa120/archive/2009/11/03/300958.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yanfa120/comments/commentRss/300958.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yanfa120/services/trackbacks/300958.html</trackback:ping><description><![CDATA[<div class="tit_bg">JAVA自学之路 一:学会选择</div>
<div class="blank5"></div>
<div class="zx">
<div class="padding10">[转载请注明出处:http://www.bjsxt.com/zixue/zixuezhilu_1.html]<br />
<p>为了就业，不少同学参加各种各样的培训。<br />
决心做软件的，大多数人选的是java，或是.net，也有一些选择了手机、嵌入式、游戏、3G、测试等。<br />
</p>
<p>那么究竟应该选择什么方向呢？<br />
我的意见是，不要太过相信各种培训机构或是抢手文章的说法（包括我），当你要走向社会的时候，就不要再把自己当成学生，不要把自己的将来交给别人，学会运用自己的眼睛去观察，去了解这个世界吧。<br />
</p>
<div class="blank5"></div>
每个培训机构都会宣传自己的好处，并不能说明大的趋势。<br />
一些新闻文章很有可能是枪手写的，不必太过相信。<br />
国外背景的教师和课程，未必适合你。<br />
<div class="blank5"></div>
那么怎么才能确定自己将来的方向？如何才能从纷繁复杂、或真或假的数据世界中挖出一条路？<br />
我讲一个通过招聘网站的观察方法。<br />
可以到各种招聘的网站上查询信息（可以到google上查询招聘的网站），例如:<br />
<a href="http://www.51job.com/" target="_blank">http://www.51job.com</a> <br />
<a href="http://www.chinahr.com/" target="_blank">http://www.chinahr.com </a><br />
<a href="http://www.zhaopin.com/" target="_blank">http://www.zhaopin.com</a> <br />
以及csdn的招聘频道等<br />
还有一个网站也不错，http://www.jobui.com，综合了各大招聘网站的数据。<br />
这些数据都是最真实不掺假的原始数据，你可以每隔一段时间搜索一次，一些规律就会被总结出来了。<br />
<div class="blank5"></div>
比如说我在http://www.jobui.com中搜索java，全国大概提供了3万个职位。<br />
然后要多翻几页，这样不仅能够看清楚大概有多少是有效的职位，而且还可以看清楚用人单位最关心的技能是什么，这个很重要，决定着你将来要花多少时间和精力在特定的知识点上，比如说swing，搜了一下，全国只有700个左右的职位，仔细读了一下，也并非全是有效的职位，花太多时间和精力在这个上面就不值得了，当然自己感兴趣或者为了研究的话另当别论。不过如果是为了快速的就业，把太多时间和精力花在很多职业生涯的前一、二年用不到的知识上就太可惜了。
<div class="blank5"></div>
同时，并非某一个行业的职位数目少，就不能当作一个方向进行选择，比如.NET，我搜索到的职位数是1.6万左右，比java少，是不是就选java了呢？不一定，因为java职位虽然多，但是可能竞争者可能也多，有些方向虽然职位数不多，但是和你竞争这些职位的人数量也少，不见得就不能选择。<br />
<div class="blank5"></div>
不过，如果某一个方向的职位数目过少，你可就要小心了，选择这样的方向风险会非常大，如J2ME。<br />
我个人觉得java/J2EE、.net、嵌入式开发是不错的三个方向。<br />
如果非要在java和.net中选择的话，我个人是推荐java的，原因：<br />
1：Java能够开发linux、unix服务器上的程序<br />
2：JavaEE和.NET在企业应用方面的关注点是差不多的，但是学习了java如果将来想转到.net上会比较简单，几天的学习然后上手开发应该是问题不大的，但是反之就不行了。 当然如果有了些经验之后，你就会发现语言或者平台不再是技术上的阻碍，一些原理性的东西学到手，然后再加上项目经验，使用什么平台，反而不是最重要的。不过如果非要用一种平台进入企业开发的领域，至少在目前，2007年9月，我推荐java。<br />
<div class="blank5"></div>
完全可以不同意我的观点，但是无庸置疑，如果是为了就业，多到招聘网站阅读阅读职位的信息，对你将来的方向和学习是大有益处的。<br />
选择是最痛苦的，看看《天生购物狂》中的刘青云就知道了，不过既然无法逃避，就作出自己的选择吧。<br />
每个人都会受到别人的影响，在作出决定之前，要想尽各种办法让自己理性一些吧。这样，你的选择会离正确的方向更近一些。<br />
</div>
</div>
<img src ="http://www.blogjava.net/yanfa120/aggbug/300958.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yanfa120/" target="_blank">小-熊</a> 2009-11-03 18:54 <a href="http://www.blogjava.net/yanfa120/archive/2009/11/03/300958.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java程序设计B卷评分标准</title><link>http://www.blogjava.net/yanfa120/archive/2009/10/24/299623.html</link><dc:creator>小-熊</dc:creator><author>小-熊</author><pubDate>Sat, 24 Oct 2009 13:45:00 GMT</pubDate><guid>http://www.blogjava.net/yanfa120/archive/2009/10/24/299623.html</guid><wfw:comment>http://www.blogjava.net/yanfa120/comments/299623.html</wfw:comment><comments>http://www.blogjava.net/yanfa120/archive/2009/10/24/299623.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yanfa120/comments/commentRss/299623.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yanfa120/services/trackbacks/299623.html</trackback:ping><description><![CDATA[&nbsp;
<p style="text-indent: 112.45pt"><strong><span style="font-size: 16pt; font-family: 黑体">Java</span></strong><strong><span style="font-size: 16pt; font-family: 黑体">程序设计B卷评分标准</span></strong></p>
<p><span style="font-family: 宋体">一：选择题：</span><br />
<span style="font-family: 宋体">１～５</span>CDCCD<span style="font-family: 宋体">　６～１０</span>CBDDB<span style="font-family: 宋体">　１１～１５</span>CCAAC</p>
<p><span style="font-family: 宋体">二：程序阅读</span></p>
<p>(1)&nbsp;&nbsp; 1234 &nbsp;&nbsp;&nbsp;&nbsp; (2)&nbsp;&nbsp; in&nbsp;Second&nbsp;class&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (3)abdcbdcb</p>
<p><span style="font-family: 宋体">三：编程题</span></p>
<p>1<span style="font-family: 宋体">．</span></p>
<p>import java.io.*;</p>
<p>import java.util.*;</p>
<p>public class E01_FileIntoList {</p>
<p>&nbsp;// Report all exceptions to console:</p>
<p>&nbsp;public static void main(String args[])</p>
<p>&nbsp;throws Exception {</p>
<p>&nbsp;&nbsp;&nbsp; LinkedList lines = new LinkedList();</p>
<p>&nbsp;&nbsp;&nbsp; BufferedReader in =</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new BufferedReader(</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new FileReader("E01_FileIntoList.java"));</p>
<p>&nbsp;&nbsp;&nbsp; String s;</p>
<p>&nbsp;&nbsp;&nbsp; while((s = in.readLine())!= null)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lines.add(s);</p>
<p>&nbsp;&nbsp;&nbsp; in.close();</p>
<p>&nbsp;&nbsp;&nbsp; ListIterator it =</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lines.listIterator(lines.size());</p>
<p>&nbsp;&nbsp;&nbsp; while(it.hasPrevious())</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(it.previous());</p>
<p>&nbsp;}</p>
<p>}</p>
<img src ="http://www.blogjava.net/yanfa120/aggbug/299623.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yanfa120/" target="_blank">小-熊</a> 2009-10-24 21:45 <a href="http://www.blogjava.net/yanfa120/archive/2009/10/24/299623.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>第二届全国ITAT教育工程就业技能大赛预赛试题Java程序设计（B卷）</title><link>http://www.blogjava.net/yanfa120/archive/2009/10/24/299622.html</link><dc:creator>小-熊</dc:creator><author>小-熊</author><pubDate>Sat, 24 Oct 2009 13:44:00 GMT</pubDate><guid>http://www.blogjava.net/yanfa120/archive/2009/10/24/299622.html</guid><wfw:comment>http://www.blogjava.net/yanfa120/comments/299622.html</wfw:comment><comments>http://www.blogjava.net/yanfa120/archive/2009/10/24/299622.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yanfa120/comments/commentRss/299622.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yanfa120/services/trackbacks/299622.html</trackback:ping><description><![CDATA[&nbsp;
<p style="line-height: 150%; text-align: center" align="center"><strong><span style="font-size: 18pt; line-height: 150%; font-family: 黑体">第二届全国ITAT教育工程就业技能大赛预赛试题</span></strong><strong><span style="font-size: 16pt; line-height: 150%; font-family: 幼圆"><br />
</span></strong><strong>Java</strong><strong>程序设计（B卷）</strong></p>
<p style="line-height: 150%"><span style="font-size: 10.5pt; line-height: 150%">姓名：____________________&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 准考证号:_______________________&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
<div align="center">
<table style="border-right: medium none; border-top: medium none; margin-left: 14.4pt; border-left: medium none; width: 321.4pt; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" width="429" border="1">
    <tbody>
        <tr style="height: 18.9pt">
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1.5pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1.5pt solid; width: 72pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 18.9pt" width="96">
            <p style="layout-grid-mode: both; line-height: 150%; text-align: center; tab-stops: 21.0pt" align="center"><span style="line-height: 150%; font-family: 宋体">题号</span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1.5pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 63pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 18.9pt" width="84">
            <p style="layout-grid-mode: both; line-height: 150%; text-align: center; tab-stops: 21.0pt" align="center"><span style="line-height: 150%; font-family: 宋体">一</span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1.5pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 60.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 18.9pt" valign="top" width="81">
            <p style="layout-grid-mode: both; line-height: 150%; text-align: center; tab-stops: 21.0pt" align="center"><span style="line-height: 150%; font-family: 宋体">二</span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1.5pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 60.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 18.9pt" width="81">
            <p style="layout-grid-mode: both; line-height: 150%; text-align: center; tab-stops: 21.0pt" align="center"><span style="line-height: 150%; font-family: 宋体">三</span></p>
            </td>
            <td style="border-right: windowtext 1.5pt solid; padding-right: 5.4pt; border-top: windowtext 1.5pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 65.6pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 18.9pt" width="87">
            <p style="layout-grid-mode: both; line-height: 150%; text-align: center; tab-stops: 21.0pt" align="center"><span style="line-height: 150%; font-family: 宋体">总分</span></p>
            </td>
        </tr>
        <tr style="height: 17.9pt">
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1.5pt solid; width: 72pt; padding-top: 0cm; border-bottom: windowtext 1.5pt solid; height: 17.9pt" width="96">
            <p style="layout-grid-mode: both; line-height: 150%; text-align: center; tab-stops: 21.0pt" align="center"><span style="line-height: 150%; font-family: 宋体">得分</span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 63pt; padding-top: 0cm; border-bottom: windowtext 1.5pt solid; height: 17.9pt" width="84"></td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 60.4pt; padding-top: 0cm; border-bottom: windowtext 1.5pt solid; height: 17.9pt" valign="top" width="81"></td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 60.4pt; padding-top: 0cm; border-bottom: windowtext 1.5pt solid; height: 17.9pt" width="81"></td>
            <td style="border-right: windowtext 1.5pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 65.6pt; padding-top: 0cm; border-bottom: windowtext 1.5pt solid; height: 17.9pt" width="87"></td>
        </tr>
    </tbody>
</table>
</div>
<p style="line-height: 150%"><strong><span style="font-family: 宋体">注意：</span></strong><span style="font-family: 宋体">在指定的路径下创建以姓名和准考证号命名的文件夹，并将试题答案存放在以题号命名的子文件夹中。凡未按照要求将试题存放在相应文件夹中的考生成绩一律作废。</span></p>
<p><span style="font-family: 宋体">一．选择题（每道题</span>3<span style="font-family: 宋体">分，共</span>45<span style="font-family: 宋体">分）</span></p>
<table style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 28.45pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38">
            <p style="text-align: center" align="center">1</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.45pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38">
            <p style="text-align: center" align="center">2</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.45pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38">
            <p style="text-align: center" align="center">3</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 1cm; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38">
            <p style="text-align: center" align="center">4</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38">
            <p style="text-align: center" align="center">5</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38">
            <p style="text-align: center" align="center">6</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38">
            <p style="text-align: center" align="center">7</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38">
            <p style="text-align: center" align="center">8</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38">
            <p style="text-align: center" align="center">9</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38">
            <p style="text-align: center" align="center">10</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38">
            <p style="text-align: center" align="center">11</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38">
            <p style="text-align: center" align="center">12</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38">
            <p style="text-align: center" align="center">13</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38">
            <p style="text-align: center" align="center">14</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38">
            <p style="text-align: center" align="center">15</p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 28.45pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38"></td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.45pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38"></td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.45pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38"></td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 1cm; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38"></td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38"></td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38"></td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38"></td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38"></td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38"></td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38"></td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38"></td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38"></td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38"></td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38"></td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38"></td>
        </tr>
    </tbody>
</table>
<p><span style="font-family: 宋体">（</span>1<span style="font-family: 宋体">）下列关于</span>Java<span style="font-family: 宋体">语言的特点，描述错误的是（</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">）</span></p>
<p>A<span style="font-family: 宋体">．</span>Java<span style="font-family: 宋体">是跨平台的编程语言</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B<span style="font-family: 宋体">．</span>Java<span style="font-family: 宋体">支持分布式计算</span></p>
<p>C<span style="font-family: 宋体">．</span>Java<span style="font-family: 宋体">是面向过程的编程语言</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D<span style="font-family: 宋体">．</span>Java<span style="font-family: 宋体">支持多线程</span></p>
<p><span style="font-family: 宋体">（</span>2<span style="font-family: 宋体">）下述概念中不属于面向对象方法的是</span>________<span style="font-family: 宋体">。</span></p>
<p>A<span style="font-family: 宋体">．对象、消息</span>&nbsp;&nbsp; &nbsp;B<span style="font-family: 宋体">．继承、多态</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C<span style="font-family: 宋体">．类、封装</span> &nbsp;&nbsp;&nbsp;&nbsp;D<span style="font-family: 宋体">．过程调用</span></p>
<p><span style="font-family: 宋体">（</span>3<span style="font-family: 宋体">）结构化程序设计所规定的三种基本控制结构是</span> <span style="font-family: 宋体">（</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">）</span></p>
<p>A<span style="font-family: 宋体">．输入、处理、输出　　</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B<span style="font-family: 宋体">．树形、网形、环形</span></p>
<p>C<span style="font-family: 宋体">．顺序、选择、循环　　</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D<span style="font-family: 宋体">．主程序、子程序、函数</span></p>
<p><span style="font-family: 宋体">（</span>4<span style="font-family: 宋体">）下列关于构造方法的叙述中，错误的是（</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">）</span></p>
<p>A<span style="font-family: 宋体">．</span>Java<span style="font-family: 宋体">语言规定构造方法名与类名必须相同</span></p>
<p>B<span style="font-family: 宋体">．</span>Java<span style="font-family: 宋体">语言规定构造方法没有返回值，但不用</span>void<span style="font-family: 宋体">声明</span></p>
<p>C<span style="font-family: 宋体">．</span>Java<span style="font-family: 宋体">语言规定构造方法不可以重载</span></p>
<p>D<span style="font-family: 宋体">．</span>Java<span style="font-family: 宋体">语言规定构造方法只能通过</span>new<span style="font-family: 宋体">自动调用</span></p>
<p><span style="font-family: 宋体">（</span>5<span style="font-family: 宋体">）下列哪个类的声明是正确的？</span></p>
<p>A<span style="font-family: 宋体">．</span>abstract&nbsp;final&nbsp;class&nbsp;HI{}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;B<span style="font-family: 宋体">．</span>abstract&nbsp;private&nbsp;move(){}&nbsp;&nbsp;&nbsp; <br />
C<span style="font-family: 宋体">．</span>protected&nbsp;private&nbsp;number;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D<span style="font-family: 宋体">．</span>public&nbsp;abstract&nbsp;class&nbsp;Car{}</p>
<p><span style="font-family: 宋体">（</span>6<span style="font-family: 宋体">）关于被私有访问控制符</span>private<span style="font-family: 宋体">修饰的成员变量，以下说法正确的是（</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">）</span></p>
<p>A<span style="font-family: 宋体">．可以被三种类所引用：该类自身、与它在同一个包中的其他类、在其他包中的该类的子类</span></p>
<p>B<span style="font-family: 宋体">．可以被两种类访问和引用：该类本身、该类的所有子类</span></p>
<p>C<span style="font-family: 宋体">．只能被该类自身所访问和修改</span></p>
<p>D<span style="font-family: 宋体">．只能被同一个包中的类访问</span></p>
<p><span style="font-family: 宋体">（</span>7<span style="font-family: 宋体">）以下声明合法的是（</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">）</span></p>
<p>A<span style="font-family: 宋体">．</span>default&nbsp;String&nbsp;s<span style="font-family: 宋体">；</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B<span style="font-family: 宋体">．</span>public&nbsp;final&nbsp;static&nbsp;native&nbsp;int&nbsp;w( )</p>
<p>C<span style="font-family: 宋体">．</span>abstract&nbsp;double&nbsp;d<span style="font-family: 宋体">；</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D<span style="font-family: 宋体">．</span>abstract&nbsp;final&nbsp;double&nbsp;hyperbolicCosine( )</p>
<p><span style="font-family: 宋体">（</span>8<span style="font-family: 宋体">）</span>Applet<span style="font-family: 宋体">可以做下列哪些操作？</span></p>
<p>A<span style="font-family: 宋体">．读取客户端文件　　</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;B<span style="font-family: 宋体">．在客户端主机上创建新文件　</span></p>
<p>C<span style="font-family: 宋体">．在客户端装载程序库　</span> <span style="font-family: 宋体">　</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D<span style="font-family: 宋体">．读取客户端部分系统变量</span></p>
<p><span style="font-family: 宋体">（</span>9<span style="font-family: 宋体">）下列关于</span>for<span style="font-family: 宋体">循环和</span>while<span style="font-family: 宋体">循环的说法中哪个是正确的？</span>&nbsp;&nbsp;&nbsp; <br />
A<span style="font-family: 宋体">．</span>while<span style="font-family: 宋体">循环能实现的操作，</span>for<span style="font-family: 宋体">循环也都能实现　　</span>&nbsp;&nbsp;&nbsp; <br />
B<span style="font-family: 宋体">．</span>while<span style="font-family: 宋体">循环判断条件一般是程序结果，</span>for<span style="font-family: 宋体">循环判断条件一般是非程序结果　　</span>&nbsp;&nbsp;&nbsp; <br />
C<span style="font-family: 宋体">．两种循环任何时候都可替换　　</span>&nbsp;&nbsp;&nbsp; <br />
D<span style="font-family: 宋体">．两种循环结构中都必须有循环体，循环体不能为空</span></p>
<p><span style="font-family: 宋体">（</span>10<span style="font-family: 宋体">）类</span>Test1<span style="font-family: 宋体">定义如下：</span></p>
<p>1<span style="font-family: 宋体">．</span>public&nbsp;class&nbsp;Test1{</p>
<p>2<span style="font-family: 宋体">．</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public&nbsp;float&nbsp;aMethod<span style="font-family: 宋体">（</span>float&nbsp;a<span style="font-family: 宋体">，</span>float&nbsp;b<span style="font-family: 宋体">）</span>{&nbsp;&nbsp; }</p>
<p>3<span style="font-family: 宋体">．</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>4<span style="font-family: 宋体">．</span>}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p><span style="font-family: 宋体">将以下哪种方法插入行</span>3<span style="font-family: 宋体">是不合法的。（</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">）</span></p>
<p>A<span style="font-family: 宋体">、</span>public&nbsp;float&nbsp;aMethod<span style="font-family: 宋体">（</span>float&nbsp;a<span style="font-family: 宋体">，</span> float&nbsp;b<span style="font-family: 宋体">，</span>float&nbsp;c<span style="font-family: 宋体">）</span>{&nbsp;}</p>
<p>B<span style="font-family: 宋体">、</span>public&nbsp;float&nbsp;aMethod<span style="font-family: 宋体">（</span>float&nbsp;c<span style="font-family: 宋体">，</span>float d<span style="font-family: 宋体">）</span>{&nbsp;}</p>
<p>C<span style="font-family: 宋体">、</span>public&nbsp;int&nbsp;aMethod<span style="font-family: 宋体">（</span>int&nbsp;a<span style="font-family: 宋体">，</span> int b<span style="font-family: 宋体">）</span>{&nbsp;}</p>
<p>D<span style="font-family: 宋体">、</span>private float aMethod<span style="font-family: 宋体">（</span>int a<span style="font-family: 宋体">，</span>int b<span style="font-family: 宋体">，</span>int c<span style="font-family: 宋体">）</span>{&nbsp;}</p>
<p><span style="font-family: 宋体">（</span>11<span style="font-family: 宋体">）阅读以下代码：</span></p>
<p>import java.io.*;</p>
<p>import java.util.*;</p>
<p>public class foo{</p>
<p style="text-indent: 21pt">public static void main (String[] args){</p>
<p style="margin-left: 21pt; text-indent: 21pt">String s;</p>
<p style="margin-left: 21pt; text-indent: 21pt">System.out.println("s=" + s);</p>
<p style="text-indent: 21pt">}</p>
<p>}</p>
<p><span style="font-family: 宋体">输出结果应该是：（</span>&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">）</span></p>
<p>A<span style="font-family: 宋体">．代码得到编译，并输出</span>&#8220;s=&#8221; </p>
<p>B<span style="font-family: 宋体">．代码得到编译，并输出</span>&#8220;s=null&#8221; </p>
<p>C<span style="font-family: 宋体">．由于</span>String s<span style="font-family: 宋体">没有初始化，代码不能编译通过</span></p>
<p>D<span style="font-family: 宋体">．代码得到编译，但捕获到</span> NullPointException<span style="font-family: 宋体">异常</span></p>
<p><span style="font-family: 宋体">（</span>12<span style="font-family: 宋体">）编译运行以下程序后，关于输出结果的说明正确的是</span> <span style="font-family: 宋体">（</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">）</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public&nbsp;class&nbsp;&nbsp; Conditional{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public&nbsp;static&nbsp;void&nbsp;main(String&nbsp;args[&nbsp;]){</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int&nbsp;x=4;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&#8220;value&nbsp;is&nbsp;&#8220;+ ((x&gt;4) ? 99.9 :9));</p>
<p>}</p>
<p>}</p>
<p>A<span style="font-family: 宋体">．输出结果为：</span>value&nbsp;is&nbsp;99.99&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B<span style="font-family: 宋体">．输出结果为：</span>value&nbsp;is&nbsp;9</p>
<p>C<span style="font-family: 宋体">．输出结果为：</span>value&nbsp;is&nbsp;9.0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D<span style="font-family: 宋体">．编译错误</span></p>
<p>&nbsp;<span style="font-family: 宋体">（</span>13<span style="font-family: 宋体">）执行完以下代码</span>int [ ]&nbsp;x = new int[10]<span style="font-family: 宋体">；后，以下哪项说明是正确的（</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">）</span></p>
<p>A<span style="font-family: 宋体">．</span>x[9]<span style="font-family: 宋体">为</span>0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B<span style="font-family: 宋体">．</span>x[9]<span style="font-family: 宋体">未定义</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C<span style="font-family: 宋体">．</span>x[10]<span style="font-family: 宋体">为</span>0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D<span style="font-family: 宋体">．</span>x[0]<span style="font-family: 宋体">为空</span></p>
<p><span style="font-family: 宋体">（</span>14<span style="font-family: 宋体">）关于以下程序段，正确的说法是（</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">）</span></p>
<p>1<span style="font-family: 宋体">．</span>&nbsp;String&nbsp;s1=&#8220;a&#8221;+&#8220;b&#8221;;</p>
<p>2<span style="font-family: 宋体">．</span>&nbsp;&nbsp; String&nbsp;s2=new&nbsp;String<span style="font-family: 宋体">（</span>s1<span style="font-family: 宋体">）；</span></p>
<p>3<span style="font-family: 宋体">．</span>&nbsp;&nbsp;&nbsp; if<span style="font-family: 宋体">（</span>s1= =s2<span style="font-family: 宋体">）</span></p>
<p>4<span style="font-family: 宋体">．</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&#8220;= = &nbsp;is succeeded&#8221;);</p>
<p>5<span style="font-family: 宋体">．</span>&nbsp;&nbsp;&nbsp;&nbsp; if (s1.equals(s2))</p>
<p>6<span style="font-family: 宋体">．</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&#8220;.equals() is succeeded&#8221;);</p>
<p>A<span style="font-family: 宋体">．行</span>4<span style="font-family: 宋体">与行</span>6<span style="font-family: 宋体">都将执行</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B<span style="font-family: 宋体">．行</span>4<span style="font-family: 宋体">执行，行</span>6<span style="font-family: 宋体">不执行</span></p>
<p>C<span style="font-family: 宋体">．行</span>6<span style="font-family: 宋体">执行，行</span>4<span style="font-family: 宋体">不执行</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C<span style="font-family: 宋体">．行</span>4<span style="font-family: 宋体">、行</span>6<span style="font-family: 宋体">都不执行</span></p>
<p><span style="font-family: 宋体">（</span>15<span style="font-family: 宋体">）以下程序的运行结果是：（</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">）</span></p>
<p>public class Increment{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static void main(String args[]){</p>
<p style="text-indent: 21pt">int c;</p>
<p style="text-indent: 21pt">c = 2;</p>
<p style="text-indent: 21pt">System.out.println(c);</p>
<p style="text-indent: 21pt">System.out.println(c++);</p>
<p style="text-indent: 21pt">System.out.println(c);</p>
<p style="text-indent: 21pt">}</p>
<p>}</p>
<p>A<span style="font-family: 宋体">．</span>2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;B<span style="font-family: 宋体">．</span>2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C<span style="font-family: 宋体">．</span>2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D<span style="font-family: 宋体">．</span>3</p>
<p style="text-indent: 15.75pt">2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4</p>
<p style="text-indent: 15.75pt">2&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4</p>
<p><span style="font-family: 宋体">二．写出以下程序的运行结果。（每道题</span>10<span style="font-family: 宋体">分，共</span>30<span style="font-family: 宋体">分）</span></p>
<p>1<span style="font-family: 宋体">、写出以下程序的运行结果。</span></p>
<p>public&nbsp;class&nbsp;ChangeStrDemo&nbsp;{ </p>
<p style="text-indent: 21pt">public&nbsp;static&nbsp;void&nbsp;changestr(String&nbsp;str){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str="welcome"; <br />
&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp; public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;{ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String&nbsp;str="1234"; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; changestr(str); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(str); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
}</p>
<p>2<span style="font-family: 宋体">、写出以下程序的运行结果。</span></p>
<p>class&nbsp;First{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public&nbsp;First(){</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; aMethod();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public&nbsp;void&nbsp;aMethod(){</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&#8220;in&nbsp;First&nbsp;class&#8221;);}</p>
<p>}</p>
<p>public&nbsp;class&nbsp;Second&nbsp;extends&nbsp;First{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public&nbsp;void&nbsp;aMethod(){</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&#8220;in&nbsp;Second&nbsp;class&#8221;);}</p>
<p>public static void main(String[ ]&nbsp;args){</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new&nbsp;Second( );&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>}</p>
<p>3<span style="font-family: 宋体">、写出以下程序的运行结果。</span></p>
<p>public&nbsp;class&nbsp;FooDemo{ </p>
<p style="text-indent: 21pt">static&nbsp;boolean&nbsp;foo(char&nbsp;c)&nbsp;{ </p>
<p style="margin-left: 21pt; text-indent: 21pt">System.out.print(c); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return&nbsp;true; <br />
&nbsp;} <br />
&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args&nbsp;)&nbsp;{ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int&nbsp;i&nbsp;=0; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for&nbsp;(&nbsp;foo(&#8217;a&#8217;);&nbsp;foo(&#8217;b&#8217;)&amp;&amp;(i&lt;2);&nbsp;foo(&#8217;c&#8217;)){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i++&nbsp;; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foo(&#8217;d&#8217;); <br />
&nbsp;&nbsp; &nbsp;} <br />
} </p>
<p>}</p>
<p><span style="font-family: 宋体">三．编程题（</span>45<span style="font-family: 宋体">分）</span></p>
<p>1<span style="font-family: 宋体">．编写一个</span>Java<span style="font-family: 宋体">程序要求：开启一个文本文件，一次读取其内的一行文本。令每一行形成一个</span>String<span style="font-family: 宋体">，并将读出的</span>String<span style="font-family: 宋体">对象置于</span>LinkedList<span style="font-family: 宋体">中。请以相反次序印出</span>LinkedList<span style="font-family: 宋体">内的所有文本行。</span></p>
<p><strong><span style="font-size: 16pt; font-family: 宋体"></span></strong><strong><span style="font-size: 16pt; font-family: 宋体">&nbsp;&nbsp; </span></strong></p>
<img src ="http://www.blogjava.net/yanfa120/aggbug/299622.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yanfa120/" target="_blank">小-熊</a> 2009-10-24 21:44 <a href="http://www.blogjava.net/yanfa120/archive/2009/10/24/299622.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>第二届全国ITAT教育工程就业技能大赛预赛试题Java程序设计（A卷）</title><link>http://www.blogjava.net/yanfa120/archive/2009/10/24/299620.html</link><dc:creator>小-熊</dc:creator><author>小-熊</author><pubDate>Sat, 24 Oct 2009 13:42:00 GMT</pubDate><guid>http://www.blogjava.net/yanfa120/archive/2009/10/24/299620.html</guid><wfw:comment>http://www.blogjava.net/yanfa120/comments/299620.html</wfw:comment><comments>http://www.blogjava.net/yanfa120/archive/2009/10/24/299620.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yanfa120/comments/commentRss/299620.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yanfa120/services/trackbacks/299620.html</trackback:ping><description><![CDATA[&nbsp;
<p style="line-height: 150%; text-align: center" align="center"><strong><span style="font-size: 18pt; line-height: 150%; font-family: 黑体">第二届全国ITAT教育工程就业技能大赛预赛试题</span></strong><strong><span style="font-size: 16pt; line-height: 150%; font-family: 幼圆"><br />
</span></strong><strong>Java</strong><strong>程序设计（A卷）</strong></p>
<p style="line-height: 150%"><span style="font-size: 10.5pt; line-height: 150%">姓名：____________________&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 准考证号:_______________________&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
<div align="center">
<table style="border-right: medium none; border-top: medium none; margin-left: 14.4pt; border-left: medium none; width: 321.4pt; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" width="429" border="1">
    <tbody>
        <tr style="height: 18.9pt">
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1.5pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1.5pt solid; width: 72pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 18.9pt" width="96">
            <p style="layout-grid-mode: both; line-height: 150%; text-align: center; tab-stops: 21.0pt" align="center"><span style="line-height: 150%; font-family: 宋体">题号</span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1.5pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 63pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 18.9pt" width="84">
            <p style="layout-grid-mode: both; line-height: 150%; text-align: center; tab-stops: 21.0pt" align="center"><span style="line-height: 150%; font-family: 宋体">一</span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1.5pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 60.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 18.9pt" valign="top" width="81">
            <p style="layout-grid-mode: both; line-height: 150%; text-align: center; tab-stops: 21.0pt" align="center"><span style="line-height: 150%; font-family: 宋体">二</span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1.5pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 60.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 18.9pt" width="81">
            <p style="layout-grid-mode: both; line-height: 150%; text-align: center; tab-stops: 21.0pt" align="center"><span style="line-height: 150%; font-family: 宋体">三</span></p>
            </td>
            <td style="border-right: windowtext 1.5pt solid; padding-right: 5.4pt; border-top: windowtext 1.5pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 65.6pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 18.9pt" width="87">
            <p style="layout-grid-mode: both; line-height: 150%; text-align: center; tab-stops: 21.0pt" align="center"><span style="line-height: 150%; font-family: 宋体">总分</span></p>
            </td>
        </tr>
        <tr style="height: 17.9pt">
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1.5pt solid; width: 72pt; padding-top: 0cm; border-bottom: windowtext 1.5pt solid; height: 17.9pt" width="96">
            <p style="layout-grid-mode: both; line-height: 150%; text-align: center; tab-stops: 21.0pt" align="center"><span style="line-height: 150%; font-family: 宋体">得分</span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 63pt; padding-top: 0cm; border-bottom: windowtext 1.5pt solid; height: 17.9pt" width="84"></td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 60.4pt; padding-top: 0cm; border-bottom: windowtext 1.5pt solid; height: 17.9pt" valign="top" width="81"></td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 60.4pt; padding-top: 0cm; border-bottom: windowtext 1.5pt solid; height: 17.9pt" width="81"></td>
            <td style="border-right: windowtext 1.5pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 65.6pt; padding-top: 0cm; border-bottom: windowtext 1.5pt solid; height: 17.9pt" width="87"></td>
        </tr>
    </tbody>
</table>
</div>
<p style="line-height: 150%"><strong><span style="font-family: 宋体">注意：</span></strong><span style="font-family: 宋体">在指定的路径下创建以姓名和准考证号命名的文件夹，并将试题答案存放在以题号命名的子文件夹中。凡未按照要求将试题存放在相应文件夹中的考生成绩一律作废。</span></p>
<p><span style="font-family: 宋体">一．选择题（每道题</span>3<span style="font-family: 宋体">分，共</span>45<span style="font-family: 宋体">分）</span></p>
<table style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 28.45pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38">
            <p style="text-align: center" align="center">1</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.45pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38">
            <p style="text-align: center" align="center">2</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.45pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38">
            <p style="text-align: center" align="center">3</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 1cm; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38">
            <p style="text-align: center" align="center">4</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38">
            <p style="text-align: center" align="center">5</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38">
            <p style="text-align: center" align="center">6</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38">
            <p style="text-align: center" align="center">7</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38">
            <p style="text-align: center" align="center">8</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38">
            <p style="text-align: center" align="center">9</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38">
            <p style="text-align: center" align="center">10</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38">
            <p style="text-align: center" align="center">11</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38">
            <p style="text-align: center" align="center">12</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38">
            <p style="text-align: center" align="center">13</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38">
            <p style="text-align: center" align="center">14</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38">
            <p style="text-align: center" align="center">15</p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 28.45pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38"></td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.45pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38"></td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.45pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38"></td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 1cm; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38"></td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38"></td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38"></td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38"></td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38"></td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38"></td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38"></td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38"></td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38"></td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38"></td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38"></td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 28.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="38"></td>
        </tr>
    </tbody>
</table>
<p><span style="font-family: 宋体">（１）</span>Java<span style="font-family: 宋体">语言具有许多优点和特点，下列选项中，哪个反映了</span>Java<span style="font-family: 宋体">程序并行机制的特点？</span></p>
<p>A<span style="font-family: 宋体">、安全性　　</span>B<span style="font-family: 宋体">、多线性　　</span>C<span style="font-family: 宋体">、跨平台　　</span>D<span style="font-family: 宋体">、可移植</span></p>
<p><span style="font-family: 宋体">（</span>2<span style="font-family: 宋体">）</span>Character<span style="font-family: 宋体">流与</span>Byte<span style="font-family: 宋体">流的区别是</span></p>
<p>A<span style="font-family: 宋体">、每次读入的字节数不同　　</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B<span style="font-family: 宋体">、前者带有缓冲，后者没有　　</span></p>
<p>C<span style="font-family: 宋体">、前者是块读写，后者是字节读写　　</span>D<span style="font-family: 宋体">、二者没有区别，可以互换使用</span></p>
<p><span style="font-family: 宋体">（</span>3<span style="font-family: 宋体">）监听事件和处理事件</span></p>
<p>A<span style="font-family: 宋体">、都由</span>Listener<span style="font-family: 宋体">完成　　</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B<span style="font-family: 宋体">、都由相应事件</span>Listener<span style="font-family: 宋体">处登记过的构件完成</span></p>
<p>C<span style="font-family: 宋体">、由</span>Listener<span style="font-family: 宋体">和构件分别完成　　</span>D<span style="font-family: 宋体">、由</span>Listener<span style="font-family: 宋体">和窗口分别完成</span></p>
<p><span style="font-family: 宋体">（</span>4<span style="font-family: 宋体">）</span>Applet<span style="font-family: 宋体">可以做下列哪些操作？</span></p>
<p>A<span style="font-family: 宋体">、读取客户端文件　　</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B<span style="font-family: 宋体">、在客户端主机上创建新文件　</span></p>
<p>C<span style="font-family: 宋体">、在客户端装载程序库　　</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D<span style="font-family: 宋体">、读取客户端部分系统变量</span></p>
<p><span style="font-family: 宋体">（</span>5<span style="font-family: 宋体">）下列哪个属于容器的构件？</span></p>
<p>A<span style="font-family: 宋体">、</span>JFrame &nbsp;B<span style="font-family: 宋体">、</span>JButton &nbsp;C<span style="font-family: 宋体">、</span>JPanel &nbsp;D<span style="font-family: 宋体">、</span>JApplet</p>
<p><span style="font-family: 宋体">（</span>6<span style="font-family: 宋体">）以下声明合法的是（</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">）</span></p>
<p style="text-indent: 21pt">A<span style="font-family: 宋体">、</span>default&nbsp;String&nbsp;s<span style="font-family: 宋体">；</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B<span style="font-family: 宋体">、</span>public&nbsp;final&nbsp;static&nbsp;native&nbsp;int&nbsp;w( )</p>
<p style="text-indent: 21pt">C<span style="font-family: 宋体">、</span>abstract&nbsp;double&nbsp;d<span style="font-family: 宋体">；</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D<span style="font-family: 宋体">、</span>abstract&nbsp;final&nbsp;double&nbsp;hyperbolicCosine( )</p>
<p>&nbsp;<span style="font-family: 宋体">（</span>7<span style="font-family: 宋体">）关于以下</span>application<span style="font-family: 宋体">的说明，正确的是（</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">）</span></p>
<p>1<span style="font-family: 宋体">．</span>&nbsp;class&nbsp;&nbsp; StaticStuff</p>
<p>2<span style="font-family: 宋体">．</span> { </p>
<p>3<span style="font-family: 宋体">．</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static&nbsp;int&nbsp;x=10<span style="font-family: 宋体">；</span></p>
<p>4<span style="font-family: 宋体">．</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static&nbsp;{ x+=5<span style="font-family: 宋体">；</span>}</p>
<p>5<span style="font-family: 宋体">．</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public&nbsp;static&nbsp;void&nbsp;main<span style="font-family: 宋体">（</span>String&nbsp;args[ ]<span style="font-family: 宋体">）</span></p>
<p>6<span style="font-family: 宋体">．</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>7<span style="font-family: 宋体">．</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&#8220;x=&#8221; + x);</p>
<p>8<span style="font-family: 宋体">．</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>9<span style="font-family: 宋体">．</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static&nbsp;{ x/=3;}</p>
<p>10.&nbsp;&nbsp; }</p>
<p>A<span style="font-family: 宋体">、</span>4<span style="font-family: 宋体">行与</span>9<span style="font-family: 宋体">行不能通过编译，因为缺少方法名和返回类型</span>&nbsp;&nbsp; </p>
<p>B<span style="font-family: 宋体">、</span>9<span style="font-family: 宋体">行不能通过编译，因为只能有一个静态初始化器</span></p>
<p>C<span style="font-family: 宋体">、编译通过，执行结果为：</span>x=5</p>
<p>D<span style="font-family: 宋体">、编译通过，执行结果为：</span>x=3</p>
<p>&nbsp;<span style="font-family: 宋体">（</span>8<span style="font-family: 宋体">）关于以下程序代码的说明正确的是（</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">）</span></p>
<p>1<span style="font-family: 宋体">．</span>class&nbsp;HasStatic{</p>
<p>2<span style="font-family: 宋体">．</span>&nbsp;&nbsp;&nbsp; private&nbsp;static&nbsp;int&nbsp;x=100<span style="font-family: 宋体">；</span></p>
<p>3<span style="font-family: 宋体">．</span>&nbsp;&nbsp;&nbsp; public&nbsp;static&nbsp;void&nbsp;main(String&nbsp;args[&nbsp;]){</p>
<p>4<span style="font-family: 宋体">．</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HasStatic&nbsp;hs1=new&nbsp;HasStatic(&nbsp;);</p>
<p>5<span style="font-family: 宋体">．</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hs1.x++;</p>
<p>6<span style="font-family: 宋体">．</span>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HasStatic&nbsp;hs2=new&nbsp;HasStatic(&nbsp;);</p>
<p>7<span style="font-family: 宋体">．</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hs2.x++;</p>
<p>8<span style="font-family: 宋体">．</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hs1=new&nbsp;HasStatic( );</p>
<p>9<span style="font-family: 宋体">．</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hs1.x++;</p>
<p>10<span style="font-family: 宋体">．</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HasStatic.x- -;</p>
<p>11<span style="font-family: 宋体">．</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; System.out.println(&#8220;x=&#8221;+x);</p>
<p>12<span style="font-family: 宋体">．</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>13<span style="font-family: 宋体">．</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>A<span style="font-family: 宋体">、</span> 5<span style="font-family: 宋体">行不能通过编译，因为引用了私有静态变量</span></p>
<p>B<span style="font-family: 宋体">、</span> 10<span style="font-family: 宋体">行不能通过编译，因为</span>x<span style="font-family: 宋体">是私有静态变量</span></p>
<p>C<span style="font-family: 宋体">、</span> <span style="font-family: 宋体">程序通过编译，输出结果为：</span>x=103</p>
<p>D<span style="font-family: 宋体">、</span> <span style="font-family: 宋体">程序通过编译，输出结果为：</span>x=102</p>
<p>&nbsp;<span style="font-family: 宋体">（</span>9<span style="font-family: 宋体">）以下选项中循环结构合法的是（</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">）</span></p>
<p>A<span style="font-family: 宋体">、</span>while (int&nbsp;i&lt;7)</p>
<p>{&nbsp;&nbsp;&nbsp;&nbsp; i++;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&#8220;i is &#8220;+i);</p>
<p>&nbsp;}</p>
<p>B<span style="font-family: 宋体">、</span> int&nbsp;j=3;</p>
<p>while(j)</p>
<p>&nbsp;&nbsp; {&nbsp;System.out.println(&#8220; j&nbsp;is &#8220;+j);</p>
<p>}</p>
<p>C<span style="font-family: 宋体">、</span>int&nbsp;j=0;</p>
<p>for(int&nbsp;k=0; j + k !=10; j++,k++)</p>
<p>{&nbsp;&nbsp;&nbsp; System.out.println(&#8220; j&nbsp;is &#8220;+ j + &#8220;k&nbsp;is&#8221;+ k);</p>
<p>}</p>
<p>D<span style="font-family: 宋体">、</span>&nbsp; int&nbsp;j=0;</p>
<p>do{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println( &#8220;j&nbsp;is &#8220;+j++);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (j = = 3) {continue&nbsp;loop;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }while&nbsp;(j&lt;10);</p>
<p><span style="font-family: 宋体">（</span>10<span style="font-family: 宋体">）类</span>Test1<span style="font-family: 宋体">定义如下：</span></p>
<p>1<span style="font-family: 宋体">．</span>public&nbsp;class&nbsp;Test1{</p>
<p>2<span style="font-family: 宋体">．</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public&nbsp;float&nbsp;aMethod<span style="font-family: 宋体">（</span>float &nbsp;a<span style="font-family: 宋体">，</span>float&nbsp;b<span style="font-family: 宋体">）</span>{&nbsp;&nbsp; }</p>
<p>3<span style="font-family: 宋体">．</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>4<span style="font-family: 宋体">．</span>}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p><span style="font-family: 宋体">将以下哪种方法插入行</span>3<span style="font-family: 宋体">是不合法的。（</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">）</span></p>
<p>A<span style="font-family: 宋体">、</span>public&nbsp;float&nbsp;aMethod<span style="font-family: 宋体">（</span>float&nbsp;a<span style="font-family: 宋体">，</span> float&nbsp;b<span style="font-family: 宋体">，</span>float&nbsp;c<span style="font-family: 宋体">）</span>{&nbsp;}</p>
<p>B<span style="font-family: 宋体">、</span>public&nbsp;float&nbsp;aMethod<span style="font-family: 宋体">（</span>float&nbsp;c<span style="font-family: 宋体">，</span>float d<span style="font-family: 宋体">）</span>{&nbsp;}</p>
<p>C<span style="font-family: 宋体">、</span>public&nbsp;int&nbsp;aMethod<span style="font-family: 宋体">（</span>int&nbsp;a<span style="font-family: 宋体">，</span> int b<span style="font-family: 宋体">）</span>{&nbsp;}</p>
<p>D<span style="font-family: 宋体">、</span>private float aMethod<span style="font-family: 宋体">（</span>int a<span style="font-family: 宋体">，</span>int b<span style="font-family: 宋体">，</span>int c<span style="font-family: 宋体">）</span>{&nbsp;}</p>
<p>&nbsp;<span style="font-family: 宋体">（</span>11<span style="font-family: 宋体">）类</span>Test1<span style="font-family: 宋体">、</span>Test2<span style="font-family: 宋体">定义如下：</span></p>
<p>1<span style="font-family: 宋体">．</span>&nbsp;public class&nbsp;Test1</p>
<p>2<span style="font-family: 宋体">．</span>{ public&nbsp;float&nbsp;aMethod<span style="font-family: 宋体">（</span>float a<span style="font-family: 宋体">，</span>float b<span style="font-family: 宋体">）</span> throws</p>
<p>3<span style="font-family: 宋体">．</span>&nbsp;IOException {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>4<span style="font-family: 宋体">．</span>&nbsp;&nbsp;&nbsp; }</p>
<p>5<span style="font-family: 宋体">．</span>&nbsp;&nbsp;&nbsp; public&nbsp;class&nbsp;Test2&nbsp;extends&nbsp;Test1{</p>
<p>6<span style="font-family: 宋体">．</span></p>
<p>7<span style="font-family: 宋体">．</span>}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">将以下哪种方法插入行</span>6<span style="font-family: 宋体">是不合法的。（</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">）</span></p>
<p>A<span style="font-family: 宋体">、</span>float&nbsp;aMethod<span style="font-family: 宋体">（</span>float&nbsp;a<span style="font-family: 宋体">，</span>float&nbsp;b<span style="font-family: 宋体">）</span>{ }</p>
<p>B<span style="font-family: 宋体">、</span>public&nbsp;int&nbsp;aMethod<span style="font-family: 宋体">（</span>int a<span style="font-family: 宋体">，</span>int b<span style="font-family: 宋体">）</span>throws&nbsp;Exception{ }</p>
<p>C<span style="font-family: 宋体">、</span>public&nbsp;float&nbsp;aMethod<span style="font-family: 宋体">（</span>float&nbsp;p<span style="font-family: 宋体">，</span>float q<span style="font-family: 宋体">）</span>{ }</p>
<p>D<span style="font-family: 宋体">、</span>public&nbsp;int&nbsp;aMethod<span style="font-family: 宋体">（</span>int a<span style="font-family: 宋体">，</span>int&nbsp;b<span style="font-family: 宋体">）</span>throws IOException{ }</p>
<p><span style="font-family: 宋体">（</span>12<span style="font-family: 宋体">）关于以下程序段，正确的说法是（</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">）</span></p>
<p>1<span style="font-family: 宋体">．</span>&nbsp;String&nbsp;s1=&#8221;abc&#8221;+&#8221;def&#8221;;</p>
<p>2<span style="font-family: 宋体">．</span>&nbsp;&nbsp; String&nbsp;s2=new&nbsp;String<span style="font-family: 宋体">（</span>s1<span style="font-family: 宋体">）；</span></p>
<p>3<span style="font-family: 宋体">．</span>&nbsp;&nbsp;&nbsp; if<span style="font-family: 宋体">（</span>s1= =s2<span style="font-family: 宋体">）</span></p>
<p>4<span style="font-family: 宋体">．</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&#8220;= = succeeded&#8221;);</p>
<p>5<span style="font-family: 宋体">．</span>&nbsp;&nbsp;&nbsp;&nbsp; if (s1.equals(s2))</p>
<p>6<span style="font-family: 宋体">．</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&#8220;.equals()&nbsp;succeeded&#8221;);</p>
<p>A<span style="font-family: 宋体">、行</span>4<span style="font-family: 宋体">与行</span>6<span style="font-family: 宋体">都将执行</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B<span style="font-family: 宋体">、行</span>4<span style="font-family: 宋体">执行，行</span>6<span style="font-family: 宋体">不执行</span></p>
<p>C<span style="font-family: 宋体">、行</span>6<span style="font-family: 宋体">执行，行</span>4<span style="font-family: 宋体">不执行</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C<span style="font-family: 宋体">、行</span>4<span style="font-family: 宋体">、行</span>6<span style="font-family: 宋体">都不执行</span></p>
<p><span style="font-family: 宋体">（</span>13<span style="font-family: 宋体">）以下说法哪项是正确的（</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">）</span></p>
<p>1<span style="font-family: 宋体">．</span>class&nbsp;MyListener</p>
<p>2<span style="font-family: 宋体">．</span>extends&nbsp;MouseAdapter&nbsp;implements&nbsp;MouseListener{</p>
<p>3<span style="font-family: 宋体">．</span>&nbsp;&nbsp;&nbsp; public void mouseEntered<span style="font-family: 宋体">（</span>MouseEvent&nbsp;mev<span style="font-family: 宋体">）</span></p>
<p>4<span style="font-family: 宋体">．</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Mouse&nbsp;entered.");&nbsp;}</p>
<p>5<span style="font-family: 宋体">．</span>&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>A<span style="font-family: 宋体">、以上代码可通过编译</span></p>
<p>B<span style="font-family: 宋体">、不能通过编译，因为没有实现</span>MouseListener<span style="font-family: 宋体">接口中的所有方法</span></p>
<p>C<span style="font-family: 宋体">、不能通过编译，因为类头定义不能分行</span></p>
<p>D<span style="font-family: 宋体">、能通过编译，若组件用该类作为</span>Mouse<span style="font-family: 宋体">的监听者并且接收了</span>mouse-exited<span style="font-family: 宋体">事件，则在执行过程中会抛出异常</span></p>
<p><span style="font-family: 宋体">（</span>14<span style="font-family: 宋体">）关于以下程序段的说法，正确的是（</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">）</span></p>
<p>1<span style="font-family: 宋体">．</span>class&nbsp;&nbsp;MyListener&nbsp;implements</p>
<p>2<span style="font-family: 宋体">．</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ActionListener<span style="font-family: 宋体">，</span>ItemListener{</p>
<p>3<span style="font-family: 宋体">．</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void&nbsp;actionPerformed<span style="font-family: 宋体">（</span>ActionEvent&nbsp;ae<span style="font-family: 宋体">）</span>{</p>
<p>4<span style="font-family: 宋体">．</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Action");}</p>
<p>5<span style="font-family: 宋体">．</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;itemStateChanged(ItemEvent&nbsp;ie){</p>
<p>6<span style="font-family: 宋体">．</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Item");</p>
<p>7<span style="font-family: 宋体">．</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>8<span style="font-family: 宋体">．</span>}</p>
<p>A<span style="font-family: 宋体">、可通过编译</span></p>
<p>B<span style="font-family: 宋体">、第</span>2<span style="font-family: 宋体">行产生编译错误</span></p>
<p>C<span style="font-family: 宋体">、第</span>3<span style="font-family: 宋体">行产生编译错误</span></p>
<p>D<span style="font-family: 宋体">、第</span>5<span style="font-family: 宋体">行产生编译错误</span></p>
<p><span style="font-family: 宋体">（</span>15<span style="font-family: 宋体">）通过调用</span> new&nbsp;List<span style="font-family: 宋体">（</span>10<span style="font-family: 宋体">，</span>false<span style="font-family: 宋体">）创建一个列表，以下关于该列表的说法哪项是错误的。（</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">）</span></p>
<p>A<span style="font-family: 宋体">、该列表不支持复选</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B<span style="font-family: 宋体">、该列表有</span>10<span style="font-family: 宋体">个选项</span></p>
<p>C<span style="font-family: 宋体">、根据需要该列表可能有垂直滚动条</span>&nbsp;&nbsp;&nbsp;&nbsp; D<span style="font-family: 宋体">、该列表支持</span>10<span style="font-family: 宋体">个可见选项</span></p>
<p><span style="font-family: 宋体">二．写出以下程序的运行结果。（每道题</span>10<span style="font-family: 宋体">分，共</span>30<span style="font-family: 宋体">分）</span></p>
<p>1<span style="font-family: 宋体">．写出以下程序的运行结果。</span></p>
<p>class OverloadDemo{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; void&nbsp;&nbsp; testOverload( int&nbsp;i ){</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&#8220;int&#8221;);&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; void&nbsp;testOverload(String&nbsp;s){</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&#8220;String&#8221;);&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public&nbsp;static&nbsp;void main(String&nbsp;args[ ]){</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OverloadDemo &nbsp;&nbsp;a=new&nbsp;OverloadDemo ( );</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char&nbsp;&nbsp;&nbsp; ch=&#8217;x&#8217;;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a.testOverload(ch);&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>} </p>
<p>2<span style="font-family: 宋体">．阅读以下程序，写出输出结果。</span></p>
<p>class&nbsp;First{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public&nbsp;First(){</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; aMethod();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public&nbsp;void&nbsp;aMethod(){</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&#8220;in&nbsp;First&nbsp;class&#8221;);}</p>
<p>}</p>
<p>public&nbsp;class&nbsp;Second&nbsp;extends&nbsp;First{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public&nbsp;void&nbsp;aMethod(){</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&#8220;in&nbsp;Second&nbsp;class&#8221;);}</p>
<p>public static void main(String[ ]&nbsp;args){</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new&nbsp;Second( );&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>}</p>
<p>3<span style="font-family: 宋体">．写出以下程序的运行结果。</span></p>
<p>import java.io.*;</p>
<p>public class UseLabel</p>
<p>{&nbsp;&nbsp;&nbsp;&nbsp; public static void main(String[] args)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {Loop:&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; for(int &nbsp;i=2; i&lt;10;&nbsp;i++)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp; for(int&nbsp;j=2;j&lt;i;j++)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;if( i%j == 0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; continue&nbsp;Loop; &nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.print(i+" &nbsp;");&nbsp;&nbsp; } &nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>}</p>
<p><span style="font-family: 宋体">三．编程题（</span>45<span style="font-family: 宋体">分）</span></p>
<p>1<span style="font-family: 宋体">．编写一个</span>Java<span style="font-family: 宋体">程序要求：开启一个文本文件，一次读取其内的一行文本。令每一行形成一个</span>String<span style="font-family: 宋体">，并将读出的</span>String<span style="font-family: 宋体">对象置于</span>LinkedList<span style="font-family: 宋体">中。请以相反次序印出</span>LinkedList<span style="font-family: 宋体">内的所有文本行。</span></p>
 <img src ="http://www.blogjava.net/yanfa120/aggbug/299620.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yanfa120/" target="_blank">小-熊</a> 2009-10-24 21:42 <a href="http://www.blogjava.net/yanfa120/archive/2009/10/24/299620.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA相关基础知识120问</title><link>http://www.blogjava.net/yanfa120/archive/2009/10/24/299616.html</link><dc:creator>小-熊</dc:creator><author>小-熊</author><pubDate>Sat, 24 Oct 2009 13:39:00 GMT</pubDate><guid>http://www.blogjava.net/yanfa120/archive/2009/10/24/299616.html</guid><wfw:comment>http://www.blogjava.net/yanfa120/comments/299616.html</wfw:comment><comments>http://www.blogjava.net/yanfa120/archive/2009/10/24/299616.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yanfa120/comments/commentRss/299616.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yanfa120/services/trackbacks/299616.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;JAVA相关基础知识120问1、面向对象的特征有哪些方面&nbsp;&nbsp; 1.抽象：抽象就是忽略一个主题中与当前目标无关的那些方面，以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题，而只是选择其中的一部分，暂时不用部分细节。抽象包括两个方面，一是过程抽象，二是数据抽象。2.继承：继承是一种联结类的层次模型，并且允许和鼓励类的...&nbsp;&nbsp;<a href='http://www.blogjava.net/yanfa120/archive/2009/10/24/299616.html'>阅读全文</a><img src ="http://www.blogjava.net/yanfa120/aggbug/299616.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yanfa120/" target="_blank">小-熊</a> 2009-10-24 21:39 <a href="http://www.blogjava.net/yanfa120/archive/2009/10/24/299616.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA相关基础知识120问</title><link>http://www.blogjava.net/yanfa120/archive/2009/10/24/299609.html</link><dc:creator>小-熊</dc:creator><author>小-熊</author><pubDate>Sat, 24 Oct 2009 13:29:00 GMT</pubDate><guid>http://www.blogjava.net/yanfa120/archive/2009/10/24/299609.html</guid><wfw:comment>http://www.blogjava.net/yanfa120/comments/299609.html</wfw:comment><comments>http://www.blogjava.net/yanfa120/archive/2009/10/24/299609.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yanfa120/comments/commentRss/299609.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yanfa120/services/trackbacks/299609.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;JAVA相关基础知识120问1、面向对象的特征有哪些方面&nbsp;&nbsp; 1.抽象：抽象就是忽略一个主题中与当前目标无关的那些方面，以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题，而只是选择其中的一部分，暂时不用部分细节。抽象包括两个方面，一是过程抽象，二是数据抽象。2.继承：继承是一种联结类的层次模型，并且允许和鼓励类的...&nbsp;&nbsp;<a href='http://www.blogjava.net/yanfa120/archive/2009/10/24/299609.html'>阅读全文</a><img src ="http://www.blogjava.net/yanfa120/aggbug/299609.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yanfa120/" target="_blank">小-熊</a> 2009-10-24 21:29 <a href="http://www.blogjava.net/yanfa120/archive/2009/10/24/299609.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>于将java程序做成exe文件的几种做法（ZT）</title><link>http://www.blogjava.net/yanfa120/archive/2009/10/24/299606.html</link><dc:creator>小-熊</dc:creator><author>小-熊</author><pubDate>Sat, 24 Oct 2009 13:27:00 GMT</pubDate><guid>http://www.blogjava.net/yanfa120/archive/2009/10/24/299606.html</guid><wfw:comment>http://www.blogjava.net/yanfa120/comments/299606.html</wfw:comment><comments>http://www.blogjava.net/yanfa120/archive/2009/10/24/299606.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yanfa120/comments/commentRss/299606.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yanfa120/services/trackbacks/299606.html</trackback:ping><description><![CDATA[<p>关于将java程序做成exe文件的几种做法（ZT） <br />
可以把普通的Java程序做成真正的exe,也就是单一个exe就可以在没有安装JVM的机器上运行。这样的工具常见的有JET和gcj.前者是收费的，而且做出来的exe还是需要一堆dll。推荐使用gcj.他有windows和Linux版，直接下载zip包，不需要安装，里面有不少例子，一些build的批处理文件。从原理来说gcj自己实现了JVM规范，也就是你编写一个HelloWorld.java,其中的main方法为System.out.println("foo"); <br />
当使用gcj把它做成exe(大约2M)，运行这个exe时，会启动里面的一个小型jvm,在这上面跑HelloWorld。 </p>
<p>其实，把Java做成纯exe实在是吃力不讨好，有很多限制，文件又大。 </p>
<p>我比较倾向另几种做法： </p>
<p>. 使用InstallAnywhere等工具，制作一个exe的安装包 <br />
用户可以选择使用他机器上的JRE或是这个安装包内的JRE来运行程序 <br />
这是很常见的一种做法，如JBuilder就是这么做的。 <br />
这样的好处是不要求对方机器上装有JRE，而且你原来的程序不需要任何改动。 <br />
InstallAnywhere中一个压缩的JRE大概是8M。 </p>
<p>. 制作成可执行的jar,也就是在META-INF的MANIFEST文件制定Main-Class <br />
可以通过命令行java -jar jarfile.jar来执行，windows默认的把*.jar使用javaw -jar打开，所以有些机器上可以直接双击jar运行。 </p>
<p>. 制作伪exe,其实和上一种做法是一样的，只不过做成exe,调用系统的java.exe来运行它，这样的工具有nativeJ,exe4j等 </p>
<p><br />
其实Java不像VB,Delphi只是一个语言，而是一个平台。 <br />
jar是最常用的部署单元，做成exe没什么意思。 <br />
一、exe4j。 <br />
说明：exe4j可以将Jar文件制作成exe文件，但需jre支持，也可将Jar文件放在外面。 <br />
软件性质：共享软件 <br />
下载地址：http://www.ej-technologies.com/products/exe4j/overview.html <br />
二、JBuilder。 <br />
说明：新版本的JBuilder可以直接把工程制作成各系统的可执行文件，包括Windows系统。 <br />
软件性质：商业软件 <br />
下载地址：略。我是从eMule下载的。 <br />
三、NativeJ。 <br />
说明：与exe4j功能类似。 <br />
软件性质：共享软件 <br />
下载地址：http://www.dobysoft.com/products/nativej/download.html <br />
四、Excelsior JET。 <br />
说明：可以直接将Java类文件制作成exe文件，除AWT和Swing及第三方图形接口外可不需jre支持（Java5.0不行）。 <br />
软件性质：共享软件 <br />
下载地址：http://excelsior-usa.com/home.html <br />
五、jshrink。 <br />
说明：可将Jar文件打包进exe文件。同时具有混淆功能（这才是它的主要功能）。 <br />
软件性质：共享软件 <br />
下载地址：http://www.e-t.com/jshrink.html <br />
六、InstallAnywhere。 <br />
说明：打包工具，对Java打包最好用。可打包成各操作系统运行包。包括Windows系统。 <br />
软件性质：商业软件。 <br />
下载地址：http://www.zerog.com/ <br />
七、InstallShieldX。 <br />
说明：与InstallAnywhere类似，但比InstallAnywhere功能强大。相对的，比较复杂，不易上手，我现在还没学会。 <br />
软件性质：商业软件。 <br />
下载地址：http://www.installshield.com/</p>
<img src ="http://www.blogjava.net/yanfa120/aggbug/299606.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yanfa120/" target="_blank">小-熊</a> 2009-10-24 21:27 <a href="http://www.blogjava.net/yanfa120/archive/2009/10/24/299606.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个牛人给java初学者的建议</title><link>http://www.blogjava.net/yanfa120/archive/2009/10/24/299604.html</link><dc:creator>小-熊</dc:creator><author>小-熊</author><pubDate>Sat, 24 Oct 2009 13:26:00 GMT</pubDate><guid>http://www.blogjava.net/yanfa120/archive/2009/10/24/299604.html</guid><wfw:comment>http://www.blogjava.net/yanfa120/comments/299604.html</wfw:comment><comments>http://www.blogjava.net/yanfa120/archive/2009/10/24/299604.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yanfa120/comments/commentRss/299604.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yanfa120/services/trackbacks/299604.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;一个牛人给java初学者的建议给初学者之一：浅谈java及应用学java不知不觉也已经三年了从不知java为何物到现在一个小小的j2ee项目经理虽说不上此道高手，大概也算有点斤两了吧每次上网，泡bbs逛论坛，没少去java相关的版面总体感觉初学者多，高手少，精通的更少由于我国高等教育制度教材陈旧，加上java自身发展不过十年左右的时间还有一个很重要的...&nbsp;&nbsp;<a href='http://www.blogjava.net/yanfa120/archive/2009/10/24/299604.html'>阅读全文</a><img src ="http://www.blogjava.net/yanfa120/aggbug/299604.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yanfa120/" target="_blank">小-熊</a> 2009-10-24 21:26 <a href="http://www.blogjava.net/yanfa120/archive/2009/10/24/299604.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java初学者容易混淆的几个问题</title><link>http://www.blogjava.net/yanfa120/archive/2009/10/24/299602.html</link><dc:creator>小-熊</dc:creator><author>小-熊</author><pubDate>Sat, 24 Oct 2009 13:25:00 GMT</pubDate><guid>http://www.blogjava.net/yanfa120/archive/2009/10/24/299602.html</guid><wfw:comment>http://www.blogjava.net/yanfa120/comments/299602.html</wfw:comment><comments>http://www.blogjava.net/yanfa120/archive/2009/10/24/299602.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yanfa120/comments/commentRss/299602.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yanfa120/services/trackbacks/299602.html</trackback:ping><description><![CDATA[<p>Java初学者容易混淆的几个问题<br />
2004-05-31 09:37 作者： Javazealot 出处： 论坛 责任编辑：方舟 　　<br />
1.String类和StringBuffer类 </p>
<p>　　它们都是处理字符串的类,但是它们有一个最大的区别,那就是。</p>
<p>&nbsp;</p>
<p>　　eg1: </p>
<p>...... <br />
//omit some code <br />
String s1="You are hired!"; <br />
System.out.println(s1.replace(&#8242;h&#8242;,&#8242;f&#8242;));//用f把字串中的h替换了 <br />
System.out.println(s1); <br />
...... <br />
//omit some code&nbsp; </p>
<p>　　运行结果: </p>
<p>　　　You are fired! <br />
　　　You are hired! </p>
<p>　　结果分析: </p>
<p>　　从结果,明显可知,s1的值并没有被改变,而第一行结果只是屏幕内容的替换. </p>
<p>　　eg2: </p>
<p>...... <br />
//omit some code <br />
StringBuffer s2=new StringBuffer("Hello from Java!"); <br />
s2.replace(6,10,"to"); <br />
System.out.println(s2); <br />
...... <br />
//omit some code&nbsp; </p>
<p>　　运行结果: </p>
<p>　　Hello to Java! </p>
<p>　　结果分析: </p>
<p>　　显然,s2的值已改变. <br />
　<br />
　　2.位逻辑与条件逻辑 </p>
<p>　　首先声明, 为了与位逻辑更好区分开来,我把通常所说的逻辑取了个别名叫做条件逻辑. </p>
<p>　　它们都有各自的操作符,位逻辑操作符有:&amp;(与运算),^(异或运算),|(或运算);条件逻辑操作符有:&amp;&amp;(并 <br />
且),||(或者)。 </p>
<p>　　位逻辑运算通常是针对两个数而言,实行位操作;而条件逻辑运算是针对两个条件表达式而言,实行条件操作.其实,位逻辑操作符一样可以实现条件操作,但是此时有一个重要的区别:用位操作符时,不管操作符两边的条件表达式成不成立,它都要通通进行运算判断,而条件逻辑操作符不一样了,如果通过左侧的操作数就可以进行它们需要的判断,那么它就不会再计算右侧的操作数了,这种情况叫短路.废话少说!且看下例. </p>
<p>　　eg1: </p>
<p>...... <br />
//omit some code <br />
double value=0; <br />
if(value!=0 &amp;&amp; 1/value&lt;1000){ <br />
System.out.println("The value is not too small."); <br />
} <br />
else{ <br />
System.out.println("The value is too small."); <br />
} <br />
...... <br />
//omit some code&nbsp; </p>
<p>　　运行结果: </p>
<p>　　The value is too small. </p>
<p>　　结果分析: </p>
<p>　　照理说应会出现除数为0的错误,但是我刚才说了,由于条件逻辑操作符是短路操作符,显然,value!=0不成立,立即就可作出判断应执行else后的语句,所以它就不再会运算判断1/value&lt;1000了.如果不懂请再看一 <br />
例: </p>
<p>　　 eg2: </p>
<p>...... <br />
//omit some code <br />
double int1=0,int2=1,int3=1; <br />
if(int1!=0 &amp; (int2=2)==1){} <br />
System.out.println("int2="+int2); <br />
if(int1!=0 &amp;&amp; (int3=2)==1){} <br />
System.out.println("int3="+int3); <br />
...... <br />
//omit some code&nbsp; </p>
<p>　　运行结果: </p>
<p>　　　int2=2.0 <br />
　　　int3=1.0 </p>
<p>　　结果分析: </p>
<p>　　我想不用我分析了,你应该懂了吧. </p>
<p>　　3.实例变量与类变量 </p>
<p>　　可以通过两种方法在类中存储数据───作为实例变量和类变量.实例变量是特定于对象的,如果你有两个对象(即一个类的两个实例),每一个对象中的实例变量独立于另一个对象中的实例变量的;另一方面,两个对象的类变量均指向相同的数据,并因此面保存相同的值,换句话说,类变量被类中的所有对象共享.差点忘了,它们在形式上的区别,类变量在声明时比实例变量多一个static. </p>
<p>　　eg: </p>
<p>class data <br />
{ <br />
public int intdata=0;//显然,intdata在这儿是实例变量 <br />
} <br />
public class exam <br />
{ <br />
public static void main(String[] args) <br />
{ <br />
data a,b; <br />
a=new data(); <br />
b=new data(); <br />
a.intdata=1; <br />
System.out.println("b.indata="+b.intdata); <br />
} <br />
}&nbsp; </p>
<p>　　运行结果: </p>
<p>　　b.intdata=0 </p>
<p>　　结果分析: </p>
<p>　　可以看出,a.intdata的值虽然变了,但并没有影响b.intdata.但是如果在data类中声明intdata时,在其前面加上static就变成类变量了(即:public static int intdata=0;),则此时运行结果会变为: </p>
<p>　　b.intdata=1 </p>
<p>　　这次a.intdata值的改变可把b.intdata影响了,事实上,对象a和b的类变量均指向相同的数据,所有值一样,这就是类变量的作用。</p>
<p>&nbsp;</p>
<p><br />
4.实例方法,类方法,构造器方法 </p>
<p>　　我们通常所说的方法系指实例方法,就像c语言中的函数一样,其具体方法我就不用说了,在这里我主要是用它来区分类方法和构造器方法.类方法与实例方法最大的区别是:在形式上类方法多一个static,在用法上, <br />
不必创建对象就可直接调用类方法(而实例方法却一定要先创建对象,再通过对象调用)。</p>
<p>　　eg: </p>
<p>class add <br />
{ <br />
static int addem(int op1,int op2) <br />
{ <br />
return op1+op2; <br />
} <br />
} <br />
public class xxf <br />
{ <br />
public static void main(String[] args) <br />
{ <br />
System.out.println("addem(2,2)="+add.addem(2,2)); <br />
} //直接用类名作为对象调用类方法 <br />
}&nbsp; </p>
<p>　　注: 也可按通常的方法,即先创建对象,再调用方法,不过,这时static就无任何意义了。</p>
<p>　　再说说构造器方法,它是用来初始化对象中的数据的一种方法,创建很容易,只需在类中加上一个与这个类同名的方法,不需要在前面加任何访问说明符或者返回类型,另外,构造器也一样可以向方法一样传递参数. </p>
<p>　　eg: </p>
<p>class data <br />
{ <br />
private String data1;//事先声明 </p>
<p>data(String s) <br />
{ <br />
data1=s; /*通过接收数据来初始化变量.(注:不能在构造器内 <br />
声明变量,事先在外就要声明.)*/ <br />
} </p>
<p>public String getdata() <br />
{ <br />
return data1; <br />
} <br />
} </p>
<p>public class xxf <br />
{ <br />
public static void main(String[] args) <br />
{ <br />
System.out.println((new data("I love you")).getdata());/*通过传递参数调用构造器新建一 <br />
个对象,再通过对象调用方法得到数据*/ <br />
} <br />
} <br />
&nbsp;</p>
<p>　　5.接口与类 </p>
<p>　　类是对一类特定对象的规格说明,我们可以类定义创建对象,通过创建对象来组合所有属于该类的组件,而接口不能这样做.而接口实质上就是一个常量和抽象方法的集合,要使用一个接口,就需要在类中实现这个接口,然后作为类定义的一部分,编写接口中声明的每一个方法,接口中的方法永远是public,abstract,接口中的常量永远是public static和final,因此不需要为它们说明属性。</p>
<p>　　因为在Java中不支持多重继承,但是,可以用接口来实现类似的功能,这是接口的重要作用之一。</p>
<p>　　eg: </p>
<p>interface anyone //定义一个接口 <br />
{ <br />
final double PI=3.1416; <br />
void setNumber(int number); <br />
int getNumber(); <br />
} <br />
interface anyother //定义另一个接口 <br />
{ <br />
void setString(String str); <br />
String getString(); <br />
} </p>
<p>class xxf implement anyone,anyother //定义一个类,并使用两个接口 <br />
{ <br />
int number; <br />
String str; <br />
public xxf(){} <br />
void setNumber(int number) <br />
{ <br />
this.number=number; <br />
} <br />
void setString(String str) <br />
{ <br />
this.str=str; <br />
} <br />
void int getNumber(){}//可以为一个空实现. <br />
void String getString(){} <br />
} <br />
//在类中必须实现接口中声明的所有方法.(当然也可不必,但是要用到适配器类或用抽象类)&nbsp; <br />
&nbsp;<br />
</p>
<img src ="http://www.blogjava.net/yanfa120/aggbug/299602.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yanfa120/" target="_blank">小-熊</a> 2009-10-24 21:25 <a href="http://www.blogjava.net/yanfa120/archive/2009/10/24/299602.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA环境变量的设置</title><link>http://www.blogjava.net/yanfa120/archive/2009/10/24/299601.html</link><dc:creator>小-熊</dc:creator><author>小-熊</author><pubDate>Sat, 24 Oct 2009 13:24:00 GMT</pubDate><guid>http://www.blogjava.net/yanfa120/archive/2009/10/24/299601.html</guid><wfw:comment>http://www.blogjava.net/yanfa120/comments/299601.html</wfw:comment><comments>http://www.blogjava.net/yanfa120/archive/2009/10/24/299601.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yanfa120/comments/commentRss/299601.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yanfa120/services/trackbacks/299601.html</trackback:ping><description><![CDATA[<p>JAVA环境变量的设置<br />
（转载http://blog.lib.gdpu.edu.cn/u/tower/archives/2007/2007330104255.htm）</p>
<p>Java环境配置过很多次了，每次配置都到网上去查找配置方法，现记录下来，避免重复劳动。</p>
<p>关于jdk环境变量的配置：</p>
<p>jdk版本：jdk1.6.0</p>
<p>首先安装jdk于C，安装后目录为：C:\Program Files\Java\jdk1.6.0</p>
<p>然后右健我的电脑，选择高级---&gt;环境变量，配置如下：</p>
<p>JAVA_HOME=C:\Program Files\Java\jdk1.6.0;</p>
<p>path=%JAVA_HOME%\bin;</p>
<p>classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tool.jar;</p>
<p>点击确定完成。<br />
&nbsp;<br />
HelloWorld.java经典测试代码：</p>
<p>public class HelloWorld{<br />
&nbsp; public static void main(String args[]){<br />
&nbsp; System.out.println("hello world !")<br />
&nbsp; }<br />
}</p>
<p>命令行输入：javac HelloWorld.java</p>
<p>生成HelloWorld.class</p>
<p>命令行输入：java HelloWorld</p>
<p>屏幕上打印"hello world !"</p>
<p>以下为置JAVA_HOME,CLASSPATH,PATH的目的:<br />
1,设置JAVA_HOME: <br />
&nbsp;&nbsp;&nbsp; 一、为了方便引用，比如，你JDK安装在C:\Program Files\Java\jdk1.6.0目录里，则设置JAVA_HOME为该目录路径, 那么以后你要使用这个路径的时候, 只需输入%JAVA_HOME%即可, 避免每次引用都输入很长的路径串; <br />
&nbsp;&nbsp;&nbsp; 二、归一原则, 当你JDK路径被迫改变的时候, 你仅需更改JAVA_HOME的变量值即可, 否则,你就要更改任何用绝对路径引用JDK目录的文档, 要是万一你没有改全, 某个程序找不到JDK, 后果是可想而知的----系统崩溃! <br />
&nbsp;&nbsp;&nbsp; 三、第三方软件会引用约定好的JAVA_HOME变量, 不然, 你将不能正常使用该软件, 以后用JAVA久了就会知道, 要是某个软件不能正常使用, 不妨想想是不是这个问题. </p>
<p>2，设置CLASSPATH: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这是一个很有趣,当然也比较折磨初学者的问题, 这个变量设置的目的是为了程序能找到相应的".class"文件, 不妨举个例子: 你编译一个JAVA程序---A.java, 会得到一个A.class的类文件,你在当前目录下执行java A, 将会得到相应的结果(前提是你已经设置CLASSPATH为"."). 现在, 你把A.class移到别的目录下(例如:"e:\"), 执行java A, 将会有NoClassDefFindError的异常,原因就是找不到.class文件, 现在你把CLASSPATH增加为:".;e:\"再运行java A, 看看会有什么结果~~:)~~~, 一切正常, java命令通过CLASSPATH找到了.class文件! </p>
<p>3，设置PATH: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 道理很简单, 你想在任何时候都使用%JAVA_HOME%\bin\java 等来执行java命令吗, 当然不会, 于是, 你可以选择把 %JAVA_HOME%\bin添加到PATH路径下, 这样, 我们在任何路径下就可以仅用java来执行命令了.(当你在命令提示符窗口输入你个代码时,操作系统会在当前目录和PATH变量目录里查找相应的应用程序, 并且执行.) </p>
<p><br />
&nbsp;&nbsp; 另外安装了Jcreator4.0，比较好用，有语法提示功能，以前以为没有，记得Jcreator2.5里面安装后就有，Jcreator2.5以后需要进行设置才能用，在Configure-&gt;Option-&gt;WorkSpace-&gt;Class View中选中右边的提示选项，点确定，再到代码区一个对象后面输入&#8220;.&#8221;, 类的方法用下拉框的形式提示出来，hooray<br />
</p>
<img src ="http://www.blogjava.net/yanfa120/aggbug/299601.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yanfa120/" target="_blank">小-熊</a> 2009-10-24 21:24 <a href="http://www.blogjava.net/yanfa120/archive/2009/10/24/299601.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>彻底明白 Java 语言中的IO系统</title><link>http://www.blogjava.net/yanfa120/archive/2009/10/24/299599.html</link><dc:creator>小-熊</dc:creator><author>小-熊</author><pubDate>Sat, 24 Oct 2009 13:23:00 GMT</pubDate><guid>http://www.blogjava.net/yanfa120/archive/2009/10/24/299599.html</guid><wfw:comment>http://www.blogjava.net/yanfa120/comments/299599.html</wfw:comment><comments>http://www.blogjava.net/yanfa120/archive/2009/10/24/299599.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yanfa120/comments/commentRss/299599.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yanfa120/services/trackbacks/299599.html</trackback:ping><description><![CDATA[<p>彻底明白 Java 语言中的IO系统<br />
Java的核心库java.io提供了全面的IO接口，包括：文件读写，标准设备输出等等。Java中IO是以流为基础进行输入输出的，所有数据被串行化写入输出流，或者从输入流读入。在具体使用中很多初学者对Java.io包的使用非常含糊，本文将详细解说关于Java.io的使用。</p>
<p>　　一． Input和Output </p>
<p>　　1. stream代表的是任何有能力产出数据的数据源，或是任何有能力接收数据的接收源。在Java的IO系统中，所有的stream（包括Input和Out stream）都包括两种类型：</p>
<p>　　1.1 以字节为导向的stream</p>
<p>　　以字节为导向的stream，表示以字节为单位从stream中读取或往stream中写入信息。以字节为导向的stream包括下面几种类型：</p>
<p>　　input</p>
<p>　　stream：</p>
<p>　　1) ByteArrayInputStream：把内存中的一个缓冲区作为InputStream使用</p>
<p>　　2) StringBufferInputStream：把一个String对象作为InputStream</p>
<p>　　3) FileInputStream：把一个文件作为InputStream，实现对文件的读取操作</p>
<p>　　4) PipedInputStream：实现了pipe的概念，主要在线程中使用</p>
<p>　　5) SequenceInputStream：把多个InputStream合并为一个InputStream</p>
<p>　　Out</p>
<p>　　stream</p>
<p>　　1) ByteArrayOutputStream：把信息存入内存中的一个缓冲区中</p>
<p>　　2) FileOutputStream：把信息存入文件中</p>
<p>　　3) PipedOutputStream：实现了pipe的概念，主要在线程中使用</p>
<p>　　4) SequenceOutputStream：把多个OutStream合并为一个OutStream</p>
<p>　　1.2 以Unicode字符为导向的stream</p>
<p>　　以Unicode字符为导向的stream，表示以Unicode字符为单位从stream中读取或往stream中写入信息。以Unicode字符为导向的stream包括下面几种类型：</p>
<p>　　Input</p>
<p>　　Stream</p>
<p>　　1) CharArrayReader：与ByteArrayInputStream对应</p>
<p>　　2) StringReader：与StringBufferInputStream对应</p>
<p>　　3) FileReader：与FileInputStream对应</p>
<p>　　4) PipedReader：与PipedInputStream对应</p>
<p>　　Out</p>
<p>　　Stream</p>
<p>　　1) CharArrayWrite：与ByteArrayOutputStream对应</p>
<p>　　2) StringWrite：无与之对应的以字节为导向的stream</p>
<p>　　3) FileWrite：与FileOutputStream对应</p>
<p>　　4) PipedWrite：与PipedOutputStream对应</p>
<p>　　以字符为导向的stream基本上对有与之相对应的以字节为导向的stream。两个对应类实现的功能相同，字是在操作时的导向不同。如 CharArrayReader：和ByteArrayInputStream的作用都是把内存中的一个缓冲区作为InputStream使用，所不同的 是前者每次从内存中读取一个字节的信息，而后者每次从内存中读取一个字符。</p>
<p>　　1.3 两种不现导向的stream之间的转换</p>
<p>　　InputStreamReader和OutputStreamReader：把一个以字节为导向的stream转换成一个以字符为导向的stream。</p>
<p>　　2. stream添加属性</p>
<p>　　2.1 &#8220;为stream添加属性&#8221;的作用</p>
<p>　　运用上面介绍的Java中操作IO的API，我们就可完成我们想完成的任何操作了。但通过FilterInputStream和FilterOutStream的子类，我们可以为stream添加属性。下面以一个例子来说明这种功能的作用。</p>
<p>　　如果我们要往一个文件中写入数据，我们可以这样操作：</p>
<p>FileOutStream fs = new FileOutStream(&#8220;test.txt&#8221;);</p>
<p>　　然后就可以通过产生的fs对象调用write()函数来往test.txt文件中写入数据了。但是，如果我们想实现&#8220;先把要写入文件的数据先缓存到内存 中，再把缓存中的数据写入文件中&#8221;的功能时，上面的API就没有一个能满足我们的需求了。但是通过FilterInputStream和 FilterOutStream的子类，为FileOutStream添加我们所需要的功能。</p>
<p>　　2.2 FilterInputStream的各种类型</p>
<p>　　2.2.1 用于封装以字节为导向的InputStream</p>
<p>　　1) DataInputStream：从stream中读取基本类型（int、char等）数据。</p>
<p>　　2) BufferedInputStream：使用缓冲区</p>
<p>　　3) LineNumberInputStream：会记录input stream内的行数，然后可以调用getLineNumber()和setLineNumber(int)</p>
<p>　　4) PushbackInputStream：很少用到，一般用于编译器开发</p>
<p>　　2.2.2 用于封装以字符为导向的InputStream</p>
<p>　　1) 没有与DataInputStream对应的类。除非在要使用readLine()时改用BufferedReader，否则使用DataInputStream</p>
<p>　　2) BufferedReader：与BufferedInputStream对应</p>
<p>　　3) LineNumberReader：与LineNumberInputStream对应</p>
<p>　　4) PushBackReader：与PushbackInputStream对应</p>
<p>　　2.3 FilterOutStream的各种类型</p>
<p>　　2.2.3 用于封装以字节为导向的OutputStream</p>
<p>　　1) DataIOutStream：往stream中输出基本类型（int、char等）数据。</p>
<p>　　2) BufferedOutStream：使用缓冲区</p>
<p>　　3) PrintStream：产生格式化输出</p>
<p>　　2.2.4 用于封装以字符为导向的OutputStream</p>
<p>　　1) BufferedWrite：与对应</p>
<p>　　2) PrintWrite：与对应</p>
<p>　　3. RandomAccessFile</p>
<p>　　1) 可通过RandomAccessFile对象完成对文件的读写操作</p>
<p>　　2) 在产生一个对象时，可指明要打开的文件的性质：r，只读；w，只写；rw可读写</p>
<p>　　3) 可以直接跳到文件中指定的位置</p>
<p>　　4. I/O应用的一个例子</p>
<p>　　java 代码</p>
<p>import java.io.*; <br />
public class TestIO{ <br />
　public static void main(String[] args) <br />
　throws IOException{ <br />
　//1.以行为单位从一个文件读取数据 <br />
　BufferedReader in = new BufferedReader( <br />
　　new FileReader("F:\\nepalon\\TestIO.java")); <br />
　String s, s2 = new String(); <br />
　while((s = in.readLine()) != null) <br />
　s2 += s + "\n"; <br />
　in.close(); <br />
　//1b. 接收键盘的输入 <br />
　BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in)); <br />
　System.out.println("Enter a line:"); <br />
　System.out.println(stdin.readLine()); <br />
　//2. 从一个String对象中读取数据 <br />
　StringReader in2 = new StringReader(s2); <br />
　int c; <br />
　while((c = in2.read()) != -1) <br />
　System.out.println((char)c); <br />
　in2.close(); <br />
　//3. 从内存取出格式化输入 <br />
　try{ <br />
　　DataInputStream in3 =new DataInputStream(new ByteArrayInputStream(s2.getBytes())); <br />
　　while(true) <br />
　　　System.out.println((char)in3.readByte()); <br />
　} <br />
　catch(EOFException e){ <br />
　　System.out.println("End of stream"); <br />
　} <br />
　//4. 输出到文件 <br />
　try{ <br />
　　BufferedReader in4 =new BufferedReader(new StringReader(s2)); <br />
　　PrintWriter out1 =new PrintWriter(new BufferedWriter(new FileWriter("F:\\nepalon\\ TestIO.out"))); <br />
　　int lineCount = 1; <br />
　　while((s = in4.readLine()) != null) <br />
　　　out1.println(lineCount++ + "：" + s); <br />
　　　out1.close(); <br />
　　　in4.close(); <br />
　} <br />
　catch(EOFException ex){ <br />
　　System.out.println("End of stream"); <br />
　} <br />
　//5. 数据的存储和恢复 <br />
　try{ <br />
　　DataOutputStream out2 =new DataOutputStream(new BufferedOutputStream( <br />
　　　new FileOutputStream("F:\\nepalon\\ Data.txt"))); <br />
　　out2.writeDouble(3.1415926); <br />
　　out2.writeChars("\nThas was pi:writeChars\n"); <br />
　　out2.writeBytes("Thas was pi:writeByte\n"); <br />
　　out2.close(); <br />
　　DataInputStream in5 =new DataInputStream( <br />
　　　new BufferedInputStream(new FileInputStream("F:\\nepalon\\ Data.txt"))); <br />
　　　BufferedReader in5br =new BufferedReader(new InputStreamReader(in5)); <br />
　　　System.out.println(in5.readDouble()); <br />
　　　System.out.println(in5br.readLine()); <br />
　　　System.out.println(in5br.readLine()); <br />
　} <br />
　catch(EOFException e){ <br />
　　System.out.println("End of stream"); <br />
　} <br />
　//6. 通过RandomAccessFile操作文件 <br />
　RandomAccessFile rf = new RandomAccessFile("F:\\nepalon\\ rtest.dat", "rw"); <br />
　for(int i=0; i &lt;10; i++) <br />
　　rf.writeDouble(i*1.414); <br />
　　rf.close(); <br />
　　rf = new RandomAccessFile("F:\\nepalon\\ rtest.dat", "r"); <br />
　　for(int i=0; i &lt;10; i++) <br />
　　　System.out.println("Value " + i + "：" + rf.readDouble()); <br />
　　　rf.close(); <br />
　　　rf = new RandomAccessFile("F:\\nepalon\\ rtest.dat", "rw"); <br />
　　　rf.seek(5*8); <br />
　　　rf.writeDouble(47.0001); <br />
　　　rf.close(); <br />
　　　rf = new RandomAccessFile("F:\\nepalon\\ rtest.dat", "r"); <br />
　　　for(int i=0; i &lt;10; i++) <br />
　　　　System.out.println("Value " + i + "：" + rf.readDouble()); <br />
　　　　rf.close(); <br />
　　} <br />
　}&nbsp; </p>
<p>　　关于代码的解释（以区为单位）：</p>
<p>　　1区中，当读取文件时，先把文件内容读到缓存中，当调用in.readLine()时，再从缓存中以字符的方式读取数据（以下简称&#8220;缓存字节读取方式&#8221;）。</p>
<p>　　1b区中，由于想以缓存字节读取方式从标准IO（键盘）中读取数据，所以要先把标准IO（System.in）转换成字符导向的stream，再进行BufferedReader封装。</p>
<p>　　2区中，要以字符的形式从一个String对象中读取数据，所以要产生一个StringReader类型的stream。 <br />
</p>
<img src ="http://www.blogjava.net/yanfa120/aggbug/299599.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yanfa120/" target="_blank">小-熊</a> 2009-10-24 21:23 <a href="http://www.blogjava.net/yanfa120/archive/2009/10/24/299599.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>编程基础入门Java修饰词的总结</title><link>http://www.blogjava.net/yanfa120/archive/2009/10/24/299600.html</link><dc:creator>小-熊</dc:creator><author>小-熊</author><pubDate>Sat, 24 Oct 2009 13:23:00 GMT</pubDate><guid>http://www.blogjava.net/yanfa120/archive/2009/10/24/299600.html</guid><wfw:comment>http://www.blogjava.net/yanfa120/comments/299600.html</wfw:comment><comments>http://www.blogjava.net/yanfa120/archive/2009/10/24/299600.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yanfa120/comments/commentRss/299600.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yanfa120/services/trackbacks/299600.html</trackback:ping><description><![CDATA[Java语言定义了public、protected、private、abstract、static和final这6常用修饰词外还定义了5&nbsp; <br />
　　个不太常用的修饰词，下面是对这11个Java修饰词的介绍：&nbsp; <br />
　　1.public&nbsp; <br />
　　使用对象：类、接口、成员&nbsp; <br />
　　介绍：无论它所处在的包定义在哪，该类（接口、成员）都是可访问的&nbsp; <br />
　　2.private&nbsp; <br />
　　使用对象：成员&nbsp; <br />
　　介绍：成员只可以在定义它的类中被访问&nbsp; <br />
　　3.static&nbsp; <br />
　　使用对象：类、方法、字段、初始化函数&nbsp; <br />
　　介绍：成名为static的内部类是一个顶级类，它和包含类的成员是不相关的。静态方法是类方法，&nbsp; <br />
　　是被指向到所属的类而不是类的实例。静态字段是类字段，无论该字段所在的类创建了多少实例，该字&nbsp; <br />
　　段只存在一个实例被指向到所属的类而不是类的实例。初始化函数是在装载类时执行的，而不是在创建&nbsp; <br />
　　实例时执行的。&nbsp; <br />
　　4.final&nbsp; <br />
　　使用对象：类、方法、字段、变量&nbsp; <br />
　　介绍：被定义成final的类不允许出现子类，不能被覆盖（不应用于动态查询），字段值不允许被&nbsp; <br />
　　修改。&nbsp; <br />
　　5.abstract&nbsp; <br />
　　使用对象：类、接口、方法&nbsp; <br />
　　介绍：类中包括没有实现的方法，不能被实例化。如果是一个abstract方法，则方法体为空，该方&nbsp; <br />
　　法的实现在子类中被定义，并且包含一个abstract方法的类必须是一个abstract类&nbsp; <br />
　　6.protected&nbsp; <br />
　　使用对象：成员&nbsp; <br />
　　介绍：成员只能在定义它的包中被访问，如果在其他包中被访问，则实现这个方法的类必须是该成&nbsp; <br />
　　员所属类的子类。&nbsp; <br />
　　7.native&nbsp; <br />
　　使用对象：成员&nbsp; <br />
　　介绍：与操作平台相关，定义时并不定义其方法，方法的实现被一个外部的库实现。&nbsp; <br />
　　8.strictfp&nbsp; <br />
　　使用对象：类、方法&nbsp; <br />
　　介绍：strictfp修饰的类中所有的方法都隐藏了strictfp修饰词，方法执行的所有浮点计算遵守&nbsp; <br />
　　IEEE 754标准，所有取值包括中间的结果都必须表示为float或double类型，而不能利用由本地平台浮&nbsp; <br />
　　点格式或硬件提供的额外精度或表示范围。&nbsp; <br />
　　9.synchronized&nbsp; <br />
　　使用对象：方法&nbsp; <br />
　　介绍：对于一个静态的方法，在执行之前jvm把它所在的类锁定；对于一个非静态类的方法，执行&nbsp; <br />
　　前把某个特定对象实例锁定。&nbsp; <br />
　　10.volatile&nbsp; <br />
　　使用对象：字段&nbsp; <br />
　　介绍：因为异步线程可以访问字段，所以有些优化操作是一定不能作用在字段上的。volatile有时&nbsp; <br />
　　可以代替synchronized.&nbsp; <br />
　　11.transient&nbsp; <br />
　　使用对象：字段&nbsp; <br />
　　介绍：字段不是对象持久状态的一部分，不应该把字段和对象一起串起。
<img src ="http://www.blogjava.net/yanfa120/aggbug/299600.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yanfa120/" target="_blank">小-熊</a> 2009-10-24 21:23 <a href="http://www.blogjava.net/yanfa120/archive/2009/10/24/299600.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>很不错的JAVA学习笔记</title><link>http://www.blogjava.net/yanfa120/archive/2009/10/24/299597.html</link><dc:creator>小-熊</dc:creator><author>小-熊</author><pubDate>Sat, 24 Oct 2009 13:22:00 GMT</pubDate><guid>http://www.blogjava.net/yanfa120/archive/2009/10/24/299597.html</guid><wfw:comment>http://www.blogjava.net/yanfa120/comments/299597.html</wfw:comment><comments>http://www.blogjava.net/yanfa120/archive/2009/10/24/299597.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yanfa120/comments/commentRss/299597.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yanfa120/services/trackbacks/299597.html</trackback:ping><description><![CDATA[<p>很不错的JAVA学习笔记<br />
http://tech.163.com　2006-05-23 09:54:24　来源: javaresearch　　网友评论1 条 论坛　<br />
1.关于参数的传递</p>
<p>class ValHold{ <br />
public int i = 10;<br />
}<br />
public class ObParm{<br />
public void amethod(){<br />
ValHold v = new ValHold();<br />
another(v);<br />
System.out.println(v.i);<br />
}<br />
public void another(ValHold v){<br />
v.i = 20;<br />
ValHold vh = new ValHold();<br />
v =vh;<br />
System.out.println(v.i);<br />
}<br />
public static void main(String[] argv){<br />
ObParm o = new ObParm();<br />
o.amethod();<br />
}<br />
}此题的答案是10，20，为什么不是10，10呢？ </p>
<p>这样解释吧，按照sun官方的说法：当一个引用变量作为参数传递给一个方法时， 在这个方法内可以改变变量的值，即改变引用指向的对象，（本题中将vh赋给v）但是方法的调用结束后，改变量恢复原来的值，即变量仍然指向原来的对象。 （即another(v)调用结束之后，v又回复到第一次ValHold v = new ValHold();时指向的地址空间。） 但是如果在方法内改变了引用指向的对象的数据（属性），那么当方法的调用结束后，尽管引用仍然指向原来的对象，这个对象的某个属性已经被改变了（v的i值在 执行v.i=20的时候就已经被改变了，所以调用another结束后，v.i已经变成了20） .</p>
<p>2.关于内部类</p>
<p>public class InOut{<br />
String s= new String("Between");<br />
public void amethod(final int iArgs) {<br />
int iam;<br />
class Bicycle{<br />
Bicycle() {<br />
System.out.println(s); //这两句话可以，也就是说可以访问s<br />
System.out.println(iArgs); //和final int 常量<br />
//System.out.println(iOther);<br />
}<br />
}<br />
new Bicycle();<br />
}<br />
public void another(){<br />
int iOther;<br />
}<br />
public static void main(String[] args) {<br />
InOut inout= new InOut();<br />
inout.amethod(22);<br />
}<br />
} <br />
Inner class能够存取外部类的所有实例变量----无论这些实例变量有什么样的存取控制符（比如private）,就像类中的方法能够存取方法所在类的所有变量一样；如果inner class定义在方法中，则inner class能够存取方法所在的类中的实例变量，也能存取该方法中的局部变量，但该局部变量必须是final的，也就是只能访问方法中的常量.(上面所说的都是普通内部类，不是静态内部类的情况).</p>
<p>public class Testinner {<br />
int t=10;<br />
public void a() {<br />
final int u =90;<br />
class InMethod { //方法中内部类<br />
InMethod() { //内部类的构造方法<br />
System.out.println("u="+u); //封装方法内的变量必须是final才能访问到！<br />
System.out.println("t="+t); //外部类的变量可以任意访问！<br />
}<br />
}<br />
new InMethod();//必须在方法a()中创建内部类对象之后，Testinner对象才能通过 a()访问到InMethod类<br />
}<br />
public static void main (String[] args) {<br />
Testinner t= new Testinner();<br />
t.a();<br />
}<br />
}输出：u=90 ，t=10<br />
方法中的内部类不可以是static的！如果一个内部类是静态的（当然只能是类中的内部类啦），那么这个类就自动的成为顶级（top-level）类即普通的类。静态内部类中的方法（无论是静态的方法还是非静态的方法）只能直接访问外部类中的静态成员，要访问外部类中的非静态成员，则必须创建外部类的对象。 </p>
<p>1．关于在静态方法中访问非静态内部类的问题 </p>
<p>public class Outer{<br />
public String name = "Outer";<br />
public static void main(String argv[]){<br />
//Inner myinner = new Inner(); //直接用这句话创建会编译错误<br />
Outer myouter=new Outer(); //先创建外部类的对象 <br />
Outer.Inner myinner=myouter.new Inner();<br />
myinner.showName();<br />
}//End of main<br />
//下面这段代码用来测试这种n烦的办法<br />
public void amethod(){<br />
Outer myouter=new Outer();<br />
Outer.Inner myinner=myouter.new Inner();<br />
myinner.showName();<br />
}<br />
//非静态方法访问非静态内部类<br />
private class Inner{<br />
String name =new String("Inner");<br />
void showName(){<br />
System.out.println(name); <br />
}<br />
}//End of Inner class<br />
}在非静态方法访问非静态内部类直接创建该内部类的对象：new Inner().showName();当然也可以采取这种n烦的办法假设private class Inner改成static private class Inner, 那么在静态方法中访问静态内部类也是直接创建该内部类的对象，即Inner myinner = new Inner()，或者Outer.Inner myinner = new Outer.Inner()也行得通，可见这种n烦的方法在上面三种情况下都是可以用的。 <br />
2．Abstract方法不能用final,static修饰非abstract方法在abstract类中可以用final,static</p>
<p>抽象类中的抽象方法不能是final,但是非抽象方法前加final可以编译通过因为abstract和final相互排斥，前者专用于继承，后者禁止继承</p>
<p>抽象类中的抽象方法不能为static </p>
<p>非抽象方法可以为static</p>
<p>包裹类Integer、 String 、Float、 Double等都是final类，不能被继承！Integer i=new Integer(&#8220;6&#8221;);如果字符串不是数字，会产生运行异常（不会出现编译错误）但是对于boolean，这个规则不适用。当字符串时（大小写无关），Boolean对象代表的数值为true，其他字符串均为false如：</p>
<p>Boolean b = new Boolean(&#8220;afiwou&#8221;); 代表false<br />
Boolean b = new Boolean(&#8220;tRue&#8221;); 是true3.多态性、虚拟方法调用 </p>
<p>public class Test8 {<br />
public static void main(String [] args){<br />
Base b = new Subclass();<br />
System.out.println(b.x);<br />
System.out.println(b.method());<br />
}<br />
}<br />
class Base{<br />
int x = 2;<br />
int method(){<br />
return x;<br />
}<br />
}<br />
class Subclass extends Base{<br />
int x = 3;<br />
int method(){<br />
return x;<br />
}<br />
}结果是2,3,而不是3,3<br />
Employee e = new Manager()；<br />
e.department = " Finance " ;<br />
//department 是Manager的一个特殊属性<br />
声明变量e后，你能访问的对象部分只是Employee的部分；Manager的特殊部分是隐藏的。这是因为编译器应意识到，e 是一个Employee，而不是一个Manager。但重写的方法除外 </p>
<p>在你接收父类的一个引用时，你可以通过使用instanceof运算符判定该对象实际上是你所要的子类，并可以用类型转换该引用的办法来恢复对象的全部功能。为什么说&#8220;恢复对象的全部功能&#8221;，就是因为上一格所描述的，子类对象赋给父类句柄后，该句柄不能访问子类的那些特殊属性和方法，要用就要重新造型。这其实是多态参数的后续应用，形成这样一个链条：传入多态参数??instanceof判断类型??casting??恢复功能</p>
<p>Employee e = new Manager();<br />
e.getDetails(); <br />
在此例中，Manager 重写了Employee的getDetail()方法。被执行的e.getDetails()方法来自对象的真实类型：Manager。事实上，执行了与变量的运行时类型（即，变量所引用的对象的类型）相关的行为，而不是与变量的编译时类型相关的行为。这是面向对象语言的一个重要特征。它也是多态性的一个特征，并通常被称作虚拟方法调用??&#8220;动态绑定&#8221;</p>
<p>写了这么多也不知道对你有没有帮助呢?<br />
</p>
<img src ="http://www.blogjava.net/yanfa120/aggbug/299597.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yanfa120/" target="_blank">小-熊</a> 2009-10-24 21:22 <a href="http://www.blogjava.net/yanfa120/archive/2009/10/24/299597.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>初学Java注意什么？</title><link>http://www.blogjava.net/yanfa120/archive/2009/10/24/299598.html</link><dc:creator>小-熊</dc:creator><author>小-熊</author><pubDate>Sat, 24 Oct 2009 13:22:00 GMT</pubDate><guid>http://www.blogjava.net/yanfa120/archive/2009/10/24/299598.html</guid><wfw:comment>http://www.blogjava.net/yanfa120/comments/299598.html</wfw:comment><comments>http://www.blogjava.net/yanfa120/archive/2009/10/24/299598.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yanfa120/comments/commentRss/299598.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yanfa120/services/trackbacks/299598.html</trackback:ping><description><![CDATA[<p>初学Java注意什么？<br />
chris 发表于 2003-07-17 00:11:00<br />
评论数:55 点击数:21,026&nbsp;&nbsp;&nbsp;&nbsp; 投票总得分:92 投票总人次:25<br />
关键字:初学Java注意什么 </p>
<p>复制链接<br />
Java总有它的千般好处使你选择它，但这些随便翻翻书或在网上逛一圈就能找到答案。在本文中，笔者把自己学习Java的一些切身体会和过程写出来，供初学者做个参考。 </p>
<p>我在学习Java的过程中主要围绕以下几个方面来学习： </p>
<p>1．时刻提醒自己Java是一种OOP语言工具，而不仅仅是编码，只有这样才能总体把握和运用Java。 </p>
<p>2．在学习的过程中，最好能够了解Java的底层机制，而不是仅仅停留在表层，不是抄书上的例子运行出结果就可以。要注意，即便对一个简单的例子也要有耐心去琢磨、调试、改动。 </p>
<p>3．在学习的过程中一定要动手做、写代码，而不是抱一本书看看就行。很多东西和体会必须自己动手才能真正属于自己，最好能参与一些实际的项目。 </p>
<p>4．在学到一定阶段后，你开始希望用学过的东西做些什么。这时的你应该开始学习一些更多、更复杂的知识，比如J2EE平台的构建、EJB的开发等。对于这一部分，我建议最好找一本较薄的书先了解一个大概，心里有个总体的认识，对更多的技术术语做个初步掌握。我认为这个阶段看看《J2EE技术实践》很不错，它可以让你了解J2EE包含的各种技术和框架，同时提供很多实际的例子来加深对J2EE的整体了解。 </p>
<p>学习Java的兴趣和决心起了很关键的作用。在有了上述基础后，我便开始一步一步地学习Java。 </p>
<p><br />
Java环境的搭建</p>
<p><br />
要运行Java程序，必须安装JDK。JDK是整个Java的核心，其中包括了Java编译器、JVM、大量的Java工具以及Java基础API。 </p>
<p>可以从http://Java.sun.com下载JDK，有1.4版本和1.31版本。我的学习环境中首先，采用的是1.31版本。 </p>
<p>解压安装。然后，进行环境设置。 </p>
<p>1.对于Windows平台要进行以下设置： </p>
<p>set PATH=YOUR_INSTALL_ DIR\bin; C:\Windows;C:\Windows\Command<br />
set classpath=. ;YOUR_INSTALL_DIR\lib\tools.jar</p>
<p>&nbsp;</p>
<p>2.对于Linux平台要编辑/etc/profile文件： </p>
<p>JAVA_HOME=your_install_dir/JDK/j2sdk<br />
CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/td.jar:$JAVA_HOME/jr&nbsp; <br />
-e/lib/rt.jar:.<br />
PATH=$PATH:$JAVA_HOME/bin<br />
export PATH PS1 USER LOGNAME MAIL HOSTNAME HISTSIZE HISTFILESIZE&nbsp;&nbsp; <br />
INPUTRC JAVA_HOME CLASSPATH RESIN_HOME</p>
<p>&nbsp;</p>
<p>最后，在终端上输入Java看能不能找到这个命令，如果能找到安装就成功了。 </p>
<p>下面介绍一下JDK的几个重要的命令： </p>
<p>◆Java执行工具，是启动JVM（虚拟机）并执行class（BYTE CODE）文件的命令； </p>
<p>◆javac 编译器，由.java文件生成.class文件； </p>
<p>◆jar Java压缩打包工具； </p>
<p>◆Javadoc 文档生成器。 </p>
<p>最后就是JDK Documentation，这是JDK的联机帮助文档，是最有用和最重要的学习参考文档，应该多看。 </p>
<p><br />
开始写自己的代码</p>
<p><br />
现在环境有了，应该写个简单的代码进行测试了。还是从经典的&#8220;hello word&#8221;开始。 </p>
<p>1． 先用编辑器写一代码（我用的是Linux的vi）： </p>
<p>[stone@coremsg work]$ vi Hello.Java<br />
&nbsp; public class Hello{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static void main(String []argc){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Hello Word!");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp; }</p>
<p>&nbsp;</p>
<p>2． 编译： </p>
<p>[stone@coremsg work]$ Javac Hello.Java</p>
<p>&nbsp;</p>
<p>3． 执行： </p>
<p>[stone@coremsg work]$ Java Hello<br />
&nbsp;&nbsp;&nbsp;&nbsp; Hello Word!</p>
<p>&nbsp;</p>
<p>成功了！这就是我的第一个Java程序。从那时起我知道已开始走进Java的世界，接下来就靠自己的努力了。在这个过程中，笔者认为有几点需要注意。 </p>
<p>学习一门新的语言，参考书是离不开的。我的建议是开始最好找一本篇幅较短的入门书来学习那些最简单、最基本的东西，包括学习Java语法等。同时，对一个最简单的程序也应该多去调试，多想想如果改动一下会出现什么结果？为什么必须那样写？多去想想这些问题然后去操作，会让你有更多的收获。这样反复地思考是很有用的。此外，在这一阶段还应该多看JDK的联机帮助，尽量多地掌握JDK提供的Java基本类库API。 </p>
<p>在有一定基础、能够写一些简单的程序后，可以开始看《Thinking in Java》这本书。它比较完整地介绍了Java的语法、面向对象的特性、核心类库等。通过这一层次的学习能够加深对Java的理解和底层原理的运用，同时又可以完整地了解Java的整个体系。在这一阶段，应该重点学习Java的面向对象编程语言的特性，比如继承、构造器、抽象类、接口、方法的多态、重载、覆盖、Java的异常处理机制等，要对上述概念有非常清楚的了解。这样做的目的，是要让自己把这些技术应用到实践中进行合理的程序设计（比如，你会考虑一个类是用抽象还是接口来设计等）。这就要求必须在大量的实践中去应用和学习。这也是当初很多朋友给我的建议。 </p>
<p><br />
学习更多</p>
<p><br />
如果要用Java来完成各种功能更强大的任务，那么就要学习语言以外的更多的东西。 </p>
<p>1.Java Web编程 </p>
<p>对于Java Web 编程来说，应该而且必须熟悉和掌握HTTP协议，可以参考 Stevens的《TCP/IP 详解》第三卷。Java Servlet技术提供了生成动态Web页面内容的能力，这在你的Java项目中是最基本的功能之一，所以必须学习。通过这一阶段的学习应该掌握Servlet/JSP的Web编程。 </p>
<p>2. J2EE的学习 </p>
<p>J2EE包含的技术太多了。如果你想坐在桌子旁边抱着一大堆书来学习的话，效果不大的。我建议在开始这一阶段的学习的时候，可以按以下步骤来做，总的思想是&#8220;总体把握，各个击破&#8221;。 </p>
<p>◆ 了解J2EE中的技术术语的含义。 </p>
<p>我的感觉是J2EE标准中涉及到的各种技术很多，如果一开始就一个一个去学习的话是不现实的，也是没效果的。我的建议是，先对其中的技术有个大概的了解，比如EJB、JavaIDL、JTA等。可能你不知道怎么去写一个EJB，但是要知道什么是EJB、它能做什么，当有了这样的概念后，再去有目的地学习它就会快很多。我还要再重复一句——必须要在实践中动手去做才行。 </p>
<p>◆ 了解J2EE中的设计模式，这样能帮助你对J2EE做个整体把握。 </p>
<p>MVC开发模式被证明是有效的处理方法之一。它可以分离数据访问和数据表现。你可以开发一个有伸缩性的、便于扩展的控制器，来维护整个流程。通过这一层次的学习，当你面对一个项目的时候，应该首先把握它的总体架构的设计，以及决定采用J2EE标准中的哪些技术。 </p>
<p>◆ 了解一些J2EE平台的典型案列，加深对这一技术的概念和理解。 </p>
<p>平时可以多留意这方面，熟悉一些典型案例，分析它为什么要采用那个时间？那样做能达到什么样的目的？然后联系到自己身边的项目是否可以作为参考。 </p>
<p>◆ 学习J2EE下的各种技术。 </p>
<p>在有了前几阶段的学习后，可以自己搭建一个J2EE平台开始具体学习每一种技术。你可以参与公司相关项目进行学习，也可以自己搭建一个平台进行学习。这时候应该找点相关的书来一步一步学习，没有捷径可走。如果你不满足于这些，那么还应该更深入地</p>
<img src ="http://www.blogjava.net/yanfa120/aggbug/299598.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yanfa120/" target="_blank">小-熊</a> 2009-10-24 21:22 <a href="http://www.blogjava.net/yanfa120/archive/2009/10/24/299598.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java编码规范 </title><link>http://www.blogjava.net/yanfa120/archive/2009/10/24/299595.html</link><dc:creator>小-熊</dc:creator><author>小-熊</author><pubDate>Sat, 24 Oct 2009 13:21:00 GMT</pubDate><guid>http://www.blogjava.net/yanfa120/archive/2009/10/24/299595.html</guid><wfw:comment>http://www.blogjava.net/yanfa120/comments/299595.html</wfw:comment><comments>http://www.blogjava.net/yanfa120/archive/2009/10/24/299595.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yanfa120/comments/commentRss/299595.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yanfa120/services/trackbacks/299595.html</trackback:ping><description><![CDATA[<p>Java编码规范 <br />
&nbsp;<br />
&nbsp;<br />
作者：酷页 来源：InterNet 加入时间：2003-7-24&nbsp; <br />
&nbsp;</p>
<p>　　1. Java 命名约定</p>
<p>除了以下几个特例之外，命名时应始终采用完整的英文描述符。此外，一般应采用小写字母，但类名、接口名以及任何非初始单词的第一个字母要大写。<br />
　　<br />
　　1.1 一般概念</p>
<p>n 尽量使用完整的英文描述符<br />
n 采用适用于相关领域的术语<br />
n 采用大小写混合使名字可读<br />
n 尽量少用缩写，但如果用了，要明智地使用，且在整个工程中统一<br />
n 避免使用长的名字（小于 15 个字母是个好主意）<br />
n 避免使用类似的名字，或者仅仅是大小写不同的名字<br />
n 避免使用下划线（除静态常量等）</p>
<p>　　1.2 示范</p>
<p>包（Package） 采用完整的英文描述符，应该都是由小写字母组成。对于全局包，将你的 Internet 域名反转并接上包名。 java.awt,com.ambysoft.www.persistence<br />
类（Class） 采用完整的英文描述符，所有单词的第一个字母大写。 Customer, SavingsAccount<br />
接口（Interface） 采用完整的英文描述符说明接口封装，所有单词的第一个字母大写。习惯上，名字后面加上后缀 able， ible 或者 er，但这不是必需的。 Contactable,Prompter<br />
组件/部件（Component） 使用完整的英文描述来说明组件的用途，末端应接上组件类型。 okButton, customerList,fileMenu<br />
异常（Exception） 通常采用字母 e 表示异常。 e <br />
类变量 字段采用完整的英文描述，第一个字母小写，任何中间单词的首字母大写。 firstName, lastName<br />
实参/参数 同字段/属性的命名规则 public void setFirstName(String firstName){ this.firstName = firstName;}<br />
局部变量 同字段/属性的命名规则 <br />
获取成员函数 被访问字段名的前面加上前缀 get。 getFirstName(), getLastName()<br />
布尔型的获取成员函数 所有的布尔型获取函数必须用单词 is 做前缀。 isPersistent(), isString()<br />
设置成员函数 被访问字段名的前面加上前缀 set。 setFirstName(), setLastName(),setWarpSpeed()<br />
普通成员函数 采用完整的英文描述说明成员函数功能，第一个单词尽可能采用一个生动的动词，第一个字母小写。 openFile(), addAccount()<br />
静态常量字段（static final） 全部采用大写字母，单词之间用下划线分隔。 MIN_BALANCE, DEFAULT_DATE<br />
循环计数器 通常采用字母 i，j，k 或者 counter 都可以接受。 i, j, k, counter<br />
数组 数组应该总是用下面的方式来命名：objectType[]。 byte[] buffer;</p>
<p>&nbsp;</p>
<p>　　2. Java 注释约定</p>
<p>一个很好的可遵循的有关注释的经验法则是：问问你自己，你如果从未见过这段代码，要在合理的时间内有效地明白这段代码，你需要哪些信息。</p>
<p>　　2.1. 一般概念</p>
<p>n 注释应该增加代码的清晰度<br />
n 保持注释的简洁<br />
n 在写代码之前写注释<br />
n 注释出为什么做了一些事，而不仅仅是做了什么<br />
2.2. 示范<br />
文档注释 在紧靠接口、类、成员函数和字段声明的前面注释它们。 /** 客户：客户是我们将服务和产品卖给的人或机构。*/<br />
C 语言风格 采用 C 语言风格的注释去掉不再使用但你仍想保留的代码。仍想保留是因为用户万一会改变想法，或者在调试过程中想让它暂时失效。 /* 这部分代码因为已被它之前的代码取代，由 B.Gustafsson, 于 1999 年 6 月 4 日注释掉。如果两年之后还未使用，将其删除。. . . （源代码）*/<br />
单行 在成员函数内采用单行注释，来说明业务逻辑、代码段和暂时变量的声明。注释符"//"后必须紧跟一个空格，然后才是注释信息。 // 遵照 Sarek 的规定，给所有// 超过 $1000 的发货单// 打 5% 的折扣。让利活// 动于 1995年 2 月开始.<br />
2.3. 注释哪些部分<br />
类 类的目的、即类所完成的功能，注释出采用的不变量。<br />
接口 设置接口的目的、它应如何被使用以及如何不被使用。<br />
成员函数注释 对于设置与获取成员函数，在成员变量已有说明的情况下，可以不加注释；普通成员函数要求说明完成什么功能，参数含义是什么返回什么； <br />
普通成员函数内部注释 控制结构，代码做了些什么以及为什么这样做，处理顺序等。<br />
实参/参数 参数含义、及其它任何约束或前提条件<br />
字段/属性 字段描述<br />
局部变量 无特别意义的情况下不加注释</p>
<p>&nbsp;</p>
<p>　　3. Java 文件样式约定</p>
<p>所有的 Java(*.java) 文件都必须遵守如下的样式规则：<br />
1) 版权信息 <br />
版权信息必须在 java 文件的开头，比如： <br />
/** * Copyright ? 2000 Shanghai XXX Co. Ltd. * All right reserved. */<br />
其他不需要出现在 javadoc 的信息也可以包含在这里。<br />
2) Package/Imports <br />
package 行要在 import 行之前，import 中标准的包名要在本地的包名之前，而且按照字母顺序排列。如果 import 行中包含了同一个包中的不同子目录，则应该用 * 来处理。 <br />
package hotlava.net.stats;import java.io.*;import java.util.Observable;import hotlava.util.Application;<br />
这里 java.io.* 是用来代替InputStream and OutputStream 的。<br />
3) Class <br />
接下来的是类的注释，一般是用来解释类的。 <br />
/** * A class representing a set of packet and byte counters * It is observable to allow it to be watched, but only * reports changes when the current set is complete */<br />
接下来是类定义，包含了在不同的行的 extends 和 implements <br />
public class CounterSet extends Observable implements Cloneable{&#8230;&#8230;}<br />
4) Class Fields <br />
接下来是类的成员变量： <br />
/** * Packet counters */protected int[] packets;<br />
public 的成员变量必须生成文档（JavaDoc）。proceted、private和 package 定义的成员变量如果名字含义明确的话，可以没有注释。<br />
5) 存取方法（类的设置与获取成员函数）<br />
接下来是类变量的存取的方法。它只是简单的用来将类的变量赋值获取值的话，可以简单的写在一行上，如类的成员变量已经有注释，类变量的存取方法可以没有注释。<br />
public int[] getPackets() { return this.packets; }public void setPackets(int[] packets) { this.packets = packets; }&#8230;&#8230;<br />
要求说明的是，对于集合，加入成员函数来插入和删除项；另其它的方法不要写在一行上。<br />
6) 构造函数 <br />
接下来是构造函数，它应该用递增的方式写（比如：参数多的写在后面）。 <br />
public CounterSet(int size){ this.size = size;}<br />
7) 克隆方法 <br />
如果这个类是可以被克隆的，那么下一步就是 clone 方法： <br />
public Object clone() { try { &#8230;&#8230; }catch(CloneNotSupportedException e) { &#8230;&#8230; }}<br />
8) 类方法 （类的普通成员函数）<br />
下面开始写类的方法：<br />
/** * Set the packet counters * param r1 - &#8230;&#8230; * param r2 - &#8230;&#8230; * &#8230;&#8230; */protected final void setArray(int[] r1, int[] r2, int[] r3, int[] r4) throws IllegalArgumentException{ // Ensure the arrays are of equal size &#8230;&#8230;}<br />
9) toString 方法 <br />
一般情况下，每一个类都应该定义 toString 方法： <br />
public String toString() { &#8230;&#8230;}<br />
10) main 方法 <br />
普通类，考虑置入一个main()方法，其中包含用于测试那个类的代码，如果包含了main() 方法, 那么它应该写在类的底部。</p>
<p>&nbsp;</p>
<p>　　4. Java编码其它约定</p>
<p>n 文档化 <br />
必须用 javadoc 来为类生成文档。不仅因为它是标准，这也是被各种 java 编译器都认可的方法。使用 @author 标记是不被推荐的，因为代码不应该是被个人拥有的。 <br />
n 缩进 <br />
缩进应该是每行2个空格。 不要在源文件中保存Tab字符， 在使用不同的源代码管理工具时Tab字符将因为用户设置的不同而扩展为不同的宽度。 <br />
如果你使用 UltrEdit 作为你的 Java 源代码编辑器的话，你可以通过如下操作来禁止保存Tab字符， 方法是通过 UltrEdit中先设定 Tab 使用的长度室2个空格，然后用 Format|Tabs to Spaces 菜单将 Tab 转换为空格。 <br />
n 页宽 <br />
页宽应该设置为80字符。 源代码一般不会超过这个宽度， 并导致无法完整显示， 但这一设置也可以灵活调整。 在任何情况下， 超长的语句应该在一个逗号或者一个操作符后折行。 一条语句折行后， 应该比原来的语句再缩进2个字符。<br />
n {} 对 <br />
{} 中的语句应该单独作为一行。 例如， 下面的第1行是错误的， 第2行是正确的: <br />
if (i&gt;0) { i ++ }; // 错误, { 和 } 在同一行 if (i&gt;0) { i ++ }; // 正确, 单独作为一行 <br />
n 括号 <br />
左括号和后一个字符之间不应该出现空格； 同样， 右括号和前一个字符之间也不应该出现空格。 下面的例子说明括号和空格的错误及正确使用: <br />
CallProc( AParameter ); // 错误 <br />
CallProc(AParameter); // 正确 <br />
不要在语句中使用无意义的括号，括号只应该为达到某种目的而出现在源代码中。<br />
n JSP文件命名<br />
采用完整的英文描述说明JSP所完成的功能，尽可能包括一个生动的动词，第一个字母小写，如：viewMessage.jsp、editUser.jsp或者forumChooser.jsp等。<br />
n Servlet类命名<br />
一般对应于所服务的对象加后缀Service来命名，如：UserService，TradeService等。</p>
<p>&nbsp;</p>
<p>　　5. 一些编程建议</p>
<p>n 使用 StringBuffer 对象 <br />
在处理 String 的时候要尽量使用 StringBuffer 类，StringBuffer 类是构成 String 类的基础。String 类将 StringBuffer 类封装了起来，（以花费更多时间为代价）为开发人员提供了一个安全的接口。当我们在构造字符串的时候，我们应该用 StringBuffer 来实现大部分的工作，当工作完成后将 StringBuffer 对象再转换为需要的 String 对象。比如：如果有一个字符串必须不断地在其后添加许多字符来完成构造，那么我们应该使用 StringBuffer 对象和它的 append() 方法。如果我们用 String 对象代替 StringBuffer 对象的话，会花费许多不必要的创建和释放对象的 CPU 时间。<br />
n 避免太多的使用 synchronized 关键字 <br />
避免不必要的使用关键字 synchronized，应该在必要的时候再使用它，这是一个避免死锁的好方法。 必须使用时，也尽量控制范围，最好在块级控制。<br />
n 避免使用 java.util.Vector 类<br />
因为"Unlike the new collection implementations, Vector is synchronized."，所以使用java.util.Vector类在性能上会有所减低。<br />
n 尽量使用接口而不是一个具体的类<br />
比方如下需求，给定一个SQL语句，返回一个对象的列表，实现中用java.util.ArrayList实现，于是定义方法为：<br />
public java.util.ArrayList getObjectItems(String sql)<br />
上面的方法存在一个问题，当getObjectItems内改用Vector或LinkedList实现，外部类必须做相应更改。一个更好的方法是定义返回值为java.util.AbstractList更合适：<br />
public java.util.AbstractList getObjectItems(String sql)<br />
这样即使更改实现，外部类也不必做相应更改。<br />
n 避免使用索引来调用数据库中间层组件返回的结果集<br />
如：<br />
for(int i=1; i&lt;=dt.getRowCount(); i++){ String field1 = dt.getField(i, 0).toString(); &#8230;&#8230;}<br />
而应用字段名来存取结果集：<br />
for(int i=1; i&lt;=dt.getRowCount(); i++){ String field1 = dt.getField(i, "field1").toString(); &#8230;&#8230;}<br />
这样在数据库设计更改或查询的SQL语句发生变化时，不会影响到程序的执行。</p>
<p>&nbsp;<br />
</p>
<img src ="http://www.blogjava.net/yanfa120/aggbug/299595.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yanfa120/" target="_blank">小-熊</a> 2009-10-24 21:21 <a href="http://www.blogjava.net/yanfa120/archive/2009/10/24/299595.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>考试认证：SCJP 310-035考试心得</title><link>http://www.blogjava.net/yanfa120/archive/2009/10/24/299596.html</link><dc:creator>小-熊</dc:creator><author>小-熊</author><pubDate>Sat, 24 Oct 2009 13:21:00 GMT</pubDate><guid>http://www.blogjava.net/yanfa120/archive/2009/10/24/299596.html</guid><wfw:comment>http://www.blogjava.net/yanfa120/comments/299596.html</wfw:comment><comments>http://www.blogjava.net/yanfa120/archive/2009/10/24/299596.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yanfa120/comments/commentRss/299596.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yanfa120/services/trackbacks/299596.html</trackback:ping><description><![CDATA[<p>刚刚通过了SCJP 310-035，95% pass，看了很多兄弟的考试经验，对我帮助很大，我也写一些，供以后的兄弟参考吧。</p>
<p>&nbsp;&nbsp;&nbsp; 一，准备</p>
<p>&nbsp;&nbsp;&nbsp; 开始没有打算考SCJP，后来公司说要考，考过后报账，所以才决定去试试。开始对SCJP根本不了解，所以在google上搜索了很多资料。其中在电驴上下到了一个SCJP.iso，有266m，是一个兄弟归纳，搜集的。里面有很详细的资料，包括各种电子书，模拟器，以及模拟题（这个兄弟应该是我们川大的，我看到资料里面的link有望将楼：））。不过都是针对310-025的。开始时，我不清楚SCJP还要分025和035.所以，根据025的考纲复习，看了很多I/O和awt的东西。去预约考试时才晓得，考试中心只考035.所以，准备考SCJP的兄弟一定要搞清楚这两个的区别（好像现在都不考025？）。</p>
<p>&nbsp;&nbsp;&nbsp; 清楚考纲后，就是根据考纲复习。虽然那个SCJP.iso是针对025的，不过大部分内容是相同的。所以里面的资料都比较有用，只是复习的时候，遇到考纲不要求的，不看就是了。</p>
<p>&nbsp;&nbsp;&nbsp; 首先看书，我觉得《Java2认证学习指南》也就是《Complete Java 2 Certification Study Guide 》这个应该看。上面根据考纲，对每个知识点做了详细讲解，文字浅显，容易理解。而且，它不是像其他书，仅仅罗列出考点，上面讲了很多原理上的东西。这样更易于理解。我想，即便是不考SCJP，如果想学Java，这本书也值得推荐。不过，我不知道是否有中文版的。我看的英文电子版。</p>
<p>&nbsp;&nbsp;&nbsp; 另外是《Thinking in Java》，这本书就不必多说了。这本书，之前看过两遍，不过很多地方还是不懂。我在看《Complete Java 2 Certification Study Guide 》时，有些地方不清楚的，就去看《Thinking in Java》，因为里面讲得比较详细。至于其他书，如果只是针对考试，个人感觉不看也罢。</p>
<p>&nbsp;&nbsp;&nbsp; 看完书后就是做题，有几套well known的题，我想有必要做一下：三套经典的mock，147.考试时，发现很多题都和这几套题差不多，只是稍微变了下。另外就是就是用exam enforce模拟器练练。其他的题和模拟器没用过，不好说。不过我搜了很多考试心得，大部分推荐的是这些。</p>
<p>&nbsp;&nbsp;&nbsp; 所有这些，我觉得两个星期足够了，不过我花的时间比较长，因为平时白天要去实验室，只有晚上看看，而且中途有些事耽搁了。复习得断断续续的，等我看完《Complete Java 2 Certification Study Guide 》，准备做题时，很多东西都忘了，第一次做模拟器，惨不忍睹呀。还好，后来老板出差一个周，于是逃回家，安安心心看了一周。所以，我觉得，如果能完全静下来看两，三周，时间是足够的。</p>
<p>&nbsp;&nbsp;&nbsp; 二，预约考试</p>
<p>&nbsp;&nbsp;&nbsp; 带上身份证到各考试中心预约。预约时，一定要确定考试种类，是310-035还是其他的，因为他们的考纲是不一样的。我就是预约时，才晓得只考310-035.所以浪费了很多时间。幸好预约到了下一个周，而且那个周老板正好出差，所以有时间看310-035多出来的东西。</p>
<p>&nbsp;&nbsp;&nbsp; 三，考试</p>
<p>&nbsp;&nbsp;&nbsp; 我这边的考试是预约后，随到随考。所以建议去早点，免得遇到人多，要等很久。考点离我住的地方很近，骑车10几分钟就到。我8点半出发的，所以很早就到考点了。当时一个人都没有，等了半小时才有个老师出来张罗考试。</p>
<p>&nbsp;&nbsp;&nbsp; 考试时，前面有几个问题是关于调查的，回答不计入成绩。不过有几道题，回答时，时间要算在答题时间里。不过我早有准备，因为网上有兄弟提醒过。所以我就一路next下去。我做到10题了，听见旁边的女生还在问调查题的事情。汗~刚开始时，我不太清楚题的难度，怕时间不够，所以做的很快。用了不到一个小时做完了。做完后，感觉不是像网上有些兄弟说的那么难。不过，题目中还是有些陷阱的。我花了40来分钟，仔细检查了一遍，发现了两个错误，都是被它的陷阱骗。后来实在没事，就交了。</p>
<p>&nbsp;&nbsp;&nbsp; 四，总结</p>
<p>&nbsp;&nbsp;&nbsp; 虽然以前做过也些Java项目，但是感觉做写Java程序和考SCJP是两码事。能写Java程序，不一定过得了SCJP.但是能过SCJP，却能说明拥有写Java程序的基础。这次过SCJP，对我Java基础又是一次巩固，我觉得这是我收获最大的。那个证反而意义不大。不过，对于非计算机专业的兄弟，如果想找个程序员的工作，相信SCJP是个很好的跳板。总之，只要有一定Java基础，通过一段时间的复习，过肯定没问题。SCJP并难，一定要有信心。</p>
<p>&nbsp;&nbsp;&nbsp; 总算过了，也算对公司有了交待，不过不知道花在上面的时间值不值。Anyway，现在终于可以看点自己想看的东西了。</p>
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/yanfa120/aggbug/299596.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yanfa120/" target="_blank">小-熊</a> 2009-10-24 21:21 <a href="http://www.blogjava.net/yanfa120/archive/2009/10/24/299596.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java编程规则</title><link>http://www.blogjava.net/yanfa120/archive/2009/10/24/299594.html</link><dc:creator>小-熊</dc:creator><author>小-熊</author><pubDate>Sat, 24 Oct 2009 13:20:00 GMT</pubDate><guid>http://www.blogjava.net/yanfa120/archive/2009/10/24/299594.html</guid><wfw:comment>http://www.blogjava.net/yanfa120/comments/299594.html</wfw:comment><comments>http://www.blogjava.net/yanfa120/archive/2009/10/24/299594.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yanfa120/comments/commentRss/299594.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yanfa120/services/trackbacks/299594.html</trackback:ping><description><![CDATA[<p>&nbsp; </p>
<p><br />
Java编程规则 </p>
<p>出处 cn-java&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;</p>
<p>--------------------------------------------------------------------------------<br />
(1) 类名首字母应该大写。字段、方法以及对象（句柄）的首字母应小写。对于所有标识符，其中包含的所有单词都应紧靠在一起，而且大写中间单词的首字母。例如：<br />
ThisIsAClassName<br />
thisIsMethodOrFieldName<br />
若在定义中出现了常数初始化字符，则大写static final基本类型标识符中的所有字母。这样便可标志出它们属于编译期的常数。<br />
Java包（Package）属于一种特殊情况：它们全都是小写字母，即便中间的单词亦是如此。对于域名扩展名称，如com，org，net或者edu等，全部都应小写（这也是Java 1.1和Java 1.2的区别之一）。</p>
<p>(2) 为了常规用途而创建一个类时，请采取&#8220;经典形式&#8221;，并包含对下述元素的定义：</p>
<p>equals()<br />
hashCode()<br />
toString()<br />
clone()（implement Cloneable）<br />
implement Serializable</p>
<p>(3) 对于自己创建的每一个类，都考虑置入一个main()，其中包含了用于测试那个类的代码。为使用一个项目中的类，我们没必要删除测试代码。若进行了任何形式的改动，可方便地返回测试。这些代码也可作为如何使用类的一个示例使用。</p>
<p>(4) 应将方法设计成简要的、功能性单元，用它描述和实现一个不连续的类接口部分。理想情况下，方法应简明扼要。若长度很大，可考虑通过某种方式将其分割成较短的几个方法。这样做也便于类内代码的重复使用（有些时候，方法必须非常大，但它们仍应只做同样的一件事情）。</p>
<p>(5) 设计一个类时，请设身处地为客户程序员考虑一下（类的使用方法应该是非常明确的）。然后，再设身处地为管理代码的人考虑一下（预计有可能进行哪些形式的修改，想想用什么方法可把它们变得更简单）。<br />
(6) 使类尽可能短小精悍，而且只解决一个特定的问题。下面是对类设计的一些建议：<br />
■一个复杂的开关语句：考虑采用&#8220;多形&#8221;机制<br />
■数量众多的方法涉及到类型差别极大的操作：考虑用几个类来分别实现<br />
■许多成员变量在特征上有很大的差别：考虑使用几个类</p>
<p>(7) 让一切东西都尽可能地&#8220;私有&#8221;——private。可使库的某一部分&#8220;公共化&#8221;（一个方法、类或者一个字段等等），就永远不能把它拿出。若强行拿出，就可能破坏其他人现有的代码，使他们不得不重新编写和设计。若只公布自己必须公布的，就可放心大胆地改变其他任何东西。在多线程环境中，隐私是特别重要的一个因素——只有private字段才能在非同步使用的情况下受到保护。</p>
<p>(8) 谨惕&#8220;巨大对象综合症&#8221;。对一些习惯于顺序编程思维、且初涉OOP领域的新手，往往喜欢先写一个顺序执行的程序，再把它嵌入一个或两个巨大的对象里。根据编程原理，对象表达的应该是应用程序的概念，而非应用程序本身。</p>
<p>(9) 若不得已进行一些不太雅观的编程，至少应该把那些代码置于一个类的内部。</p>
<p>(10) 任何时候只要发现类与类之间结合得非常紧密，就需要考虑是否采用内部类，从而改善编码及维护工作（参见第14章14.1.2小节的&#8220;用内部类改进代码&#8221;）。</p>
<p>(11) 尽可能细致地加上注释，并用javadoc注释文档语法生成自己的程序文档。</p>
<p>(12) 避免使用&#8220;魔术数字&#8221;，这些数字很难与代码很好地配合。如以后需要修改它，无疑会成为一场噩梦，因为根本不知道&#8220;100&#8221;到底是指&#8220;数组大小&#8221;还是&#8220;其他全然不同的东西&#8221;。所以，我们应创建一个常数，并为其使用具有说服力的描述性名称，并在整个程序中都采用常数标识符。这样可使程序更易理解以及更易维护。</p>
<p>(13) 涉及构建器和异常的时候，通常希望重新丢弃在构建器中捕获的任何异常——如果它造成了那个对象的创建失败。这样一来，调用者就不会以为那个对象已正确地创建，从而盲目地继续。</p>
<p>(14) 当客户程序员用完对象以后，若你的类要求进行任何清除工作，可考虑将清除代码置于一个良好定义的方法里，采用类似于cleanup()这样的名字，明确表明自己的用途。除此以外，可在类内放置一个boolean（布尔）标记，指出对象是否已被清除。在类的finalize()方法里，请确定对象已被清除，并已丢弃了从RuntimeException继承的一个类（如果还没有的话），从而指出一个编程错误。在采取象这样的方案之前，请确定finalize()能够在自己的系统中工作（可能需要调用System.runFinalizersOnExit(true)，从而确保这一行为）。</p>
<p>(15) 在一个特定的作用域内，若一个对象必须清除（非由垃圾收集机制处理），请采用下述方法：初始化对象；若成功，则立即进入一个含有finally从句的try块，开始清除工作。</p>
<p>(16) 若在初始化过程中需要覆盖（取消）finalize()，请记住调用super.finalize()（若Object属于我们的直接超类，则无此必要）。在对finalize()进行覆盖的过程中，对super.finalize()的调用应属于最后一个行动，而不应是第一个行动，这样可确保在需要基础类组件的时候它们依然有效。</p>
<p>(17) 创建大小固定的对象集合时，请将它们传输至一个数组（若准备从一个方法里返回这个集合，更应如此操作）。这样一来，我们就可享受到数组在编译期进行类型检查的好处。此外，为使用它们，数组的接收者也许并不需要将对象&#8220;造型&#8221;到数组里。</p>
<p>(18) 尽量使用interfaces，不要使用abstract类。若已知某样东西准备成为一个基础类，那么第一个选择应是将其变成一个interface（接口）。只有在不得不使用方法定义或者成员变量的时候，才需要将其变成一个abstract（抽象）类。接口主要描述了客户希望做什么事情，而一个类则致力于（或允许）具体的实施细节。</p>
<p>(19) 在构建器内部，只进行那些将对象设为正确状态所需的工作。尽可能地避免调用其他方法，因为那些方法可能被其他人覆盖或取消，从而在构建过程中产生不可预知的结果（参见第7章的详细说明）。</p>
<p>(20) 对象不应只是简单地容纳一些数据；它们的行为也应得到良好的定义。</p>
<p>(21) 在现成类的基础上创建新类时，请首先选择&#8220;新建&#8221;或&#8220;创作&#8221;。只有自己的设计要求必须继承时，才应考虑这方面的问题。若在本来允许新建的场合使用了继承，则整个设计会变得没有必要地复杂。</p>
<p>(22) 用继承及方法覆盖来表示行为间的差异，而用字段表示状态间的区别。一个非常极端的例子是通过对不同类的继承来表示颜色，这是绝对应该避免的：应直接使用一个&#8220;颜色&#8221;字段。</p>
<p>(23) 为避免编程时遇到麻烦，请保证在自己类路径指到的任何地方，每个名字都仅对应一个类。否则，编译器可能先找到同名的另一个类，并报告出错消息。若怀疑自己碰到了类路径问题，请试试在类路径的每一个起点，搜索一下同名的.class文件。</p>
<p>(24) 在Java 1.1 AWT中使用事件&#8220;适配器&#8221;时，特别容易碰到一个陷阱。若覆盖了某个适配器方法，同时拼写方法没有特别讲究，最后的结果就是新添加一个方法，而不是覆盖现成方法。然而，由于这样做是完全合法的，所以不会从编译器或运行期系统获得任何出错提示——只不过代码的工作就变得不正常了。</p>
<p>(25) 用合理的设计方案消除&#8220;伪功能&#8221;。也就是说，假若只需要创建类的一个对象，就不要提前限制自己使用应用程序，并加上一条&#8220;只生成其中一个&#8221;注释。请考虑将其封装成一个&#8220;独生子&#8221;的形式。若在主程序里有大量散乱的代码，用于创建自己的对象，请考虑采纳一种创造性的方案，将些代码封装起来。</p>
<p>(26) 警惕&#8220;分析瘫痪&#8221;。请记住，无论如何都要提前了解整个项目的状况，再去考察其中的细节。由于把握了全局，可快速认识自己未知的一些因素，防止在考察细节的时候陷入&#8220;死逻辑&#8221;中。</p>
<p>(27) 警惕&#8220;过早优化&#8221;。首先让它运行起来，再考虑变得更快——但只有在自己必须这样做、而且经证实在某部分代码中的确存在一个性能瓶颈的时候，才应进行优化。除非用专门的工具分析瓶颈，否则很有可能是在浪费自己的时间。性能提升的隐含代价是自己的代码变得难于理解，而且难于维护。</p>
<p>(28) 请记住，阅读代码的时间比写代码的时间多得多。思路清晰的设计可获得易于理解的程序，但注释、细致的解释以及一些示例往往具有不可估量的价值。无论对你自己，还是对后来的人，它们都是相当重要的。如对此仍有怀疑，那么请试想自己试图从联机Java文档里找出有用信息时碰到的挫折，这样或许能将你说服。</p>
<p>(29) 如认为自己已进行了良好的分析、设计或者实施，那么请稍微更换一下思维角度。试试邀请一些外来人士——并不一定是专家，但可以是来自本公司其他部门的人。请他们用完全新鲜的眼光考察你的工作，看看是否能找出你一度熟视无睹的问题。采取这种方式，往往能在最适合修改的阶段找出一些关键性的问题，避免产品发行后再解决问题而造成的金钱及精力方面的损失。</p>
<p>(30) 良好的设计能带来最大的回报。简言之，对于一个特定的问题，通常会花较长的时间才能找到一种最恰当的解决方案。但一旦找到了正确的方法，以后的工作就轻松多了，再也不用经历数小时、数天或者数月的痛苦挣扎。我们的努力工作会带来最大的回报（甚至无可估量）。而且由于自己倾注了大量心血，最终获得一个出色的设计方案，成功的快感也是令人心动的。坚持抵制草草完工的诱惑——那样做往往得不偿失。</p>
<p>(31) 可在Web上找到大量的编程参考资源，甚至包括大量新闻组、讨论组、邮寄列表等。下面这个地方提供了大量有益的链接：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp; <br />
</p>
<img src ="http://www.blogjava.net/yanfa120/aggbug/299594.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yanfa120/" target="_blank">小-熊</a> 2009-10-24 21:20 <a href="http://www.blogjava.net/yanfa120/archive/2009/10/24/299594.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA的面向对象编程--------课堂笔记</title><link>http://www.blogjava.net/yanfa120/archive/2009/10/24/299591.html</link><dc:creator>小-熊</dc:creator><author>小-熊</author><pubDate>Sat, 24 Oct 2009 13:17:00 GMT</pubDate><guid>http://www.blogjava.net/yanfa120/archive/2009/10/24/299591.html</guid><wfw:comment>http://www.blogjava.net/yanfa120/comments/299591.html</wfw:comment><comments>http://www.blogjava.net/yanfa120/archive/2009/10/24/299591.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yanfa120/comments/commentRss/299591.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yanfa120/services/trackbacks/299591.html</trackback:ping><description><![CDATA[<p>JAVA的面向对象编程--------课堂笔记</p>
<p>-----来自SD0510班小组班长刘东培手笔，路继亮、钱海云等学员的补充更正，在此非常感谢这三位学员的提供。</p>
<p>面向对象主要针对面向过程。<br />
面向过程的基本单元是函数。</p>
<p>什么是对象：EVERYTHING IS OBJECT（万物皆对象）</p>
<p>所有的事物都有两个方面：<br />
有什么（属性）：用来描述对象。<br />
能够做什么（方法）：告诉外界对象有那些功能。<br />
后者以前者为基础。<br />
大的对象的属性也可以是一个对象。</p>
<p>为什么要使用面向对象：<br />
首先，面向对象符合人类看待事物的一般规律。<br />
对象的方法的实现细节是屏蔽的，只有对象方法的实现者了解细节。<br />
方法的定义非常重要。方法有参数，也可能有返回值。</p>
<p>注意区分：对象（本身）、对象的实现者、对象的调用者。<br />
分析对象主要从方法开始。<br />
我们通过类来看待对象，类是对象的抽象。</p>
<p>其次，采用面向对象方法可以使系统各部分各司其职、各尽所能。<br />
对象之间的耦合性一定要低（比如不同硬盘和不同主板之间的关系）。这样才能使每个对象本身做成最好的。</p>
<p>对于对象的要求：高内聚、低耦合，这样容易拼装成为一个系统。<br />
实现高内聚就是要最大限度低提高复用性（复用性好是因为高内聚）。<br />
可复用性是OOP的基础。</p>
<p>比较面向过程的思想和面向对象的思想：<br />
面向过程的思想：由过程、步骤、函数组成，以过程为核心；<br />
面向对象的思想：以对象为中心，先开发类，得到对象，通过对象之间相互通信实现功能。<br />
面向过程是先有算法，后有数据结构。<br />
面向对象是先有数据结构，然后再有算法。</p>
<p>在用面向对象思想开发的过程中，可以复用对象就进行复用，如无法进行复用则开发新的对象。<br />
开发过程是用对个简单的对象的多个简单的方法，来实现复杂的功能 。<br />
从语法上来看，一个类是一个新的数据类型。<br />
在面向对象编程中，除了简单数据类型，就是对象类型。<br />
定义类的格式：<br />
class Student{<br />
代码<br />
}<br />
注意类名中单词的首字母大写。<br />
实例变量：定义在类中但在任何方法之外。（New出来的均有初值）<br />
局部变量：定义在方法之中的变量。<br />
局部变量要先赋值，再进行运算，而实例变量均已经赋初值。这是局部变量和实例变量的一大区别。<br />
实例变量的对象赋值为null。<br />
局部变量不允许范围内定义两个同名变量。实例变量的作用域在本类中完全有效，当被其他的类调用的时候也可能有效。<br />
实例变量和局部变量允许命名冲突。</p>
<p>书写方法的格式：<br />
修饰符&nbsp;&nbsp; 返回值&nbsp;&nbsp;&nbsp;&nbsp; 方法名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 调用过程中&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 方法体<br />
可能出现的例外<br />
public int/void&nbsp;&nbsp; addNumber(参数)&nbsp;&nbsp; throw Excepion&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {}</p>
<p>例：<br />
public int addNumber(int a,int b){<br />
}<br />
注：方法名中的参数int a,int b为局部变量</p>
<p>类方法中的一类特殊方法：构造方法。<br />
构造方法是当用类生成对象时，系统在生成对象的过程中利用的方法。<br />
注意：构造方法在生成对象的时候会被调用，但并不是构造方法生成了对象。<br />
构造方法没有返回值。格式为：public 方法名。<br />
构造方法的方法名与类名相同。<br />
构造方法是在对象生成的过程中自动调用，不可能利用指令去调用。<br />
在一个对象的生成周期中构造方法只用一次，一旦这个对象生成，那么这个构造方法失效。</p>
<p>用类来生成对象的语句：<br />
Student s=new Student()。<br />
第一个Student表示这是用Student类进行定义。&#8220;Student()&#8221;表示调用一个无参数的构造方法。<br />
如果()中有参数，则系统构造对象的过程中调用有参的方法。<br />
此时S称为一个对象变量。<br />
Student s的存储区域存放的是地址：一个对象在硬盘上占有一个连续地址，首地址赋予s空间。<br />
S称为对象Student的引用。<br />
注意：在对象变量中存放的是引用（地址）；在简单变量中存放的是数值。</p>
<p>可以构造多个构造方法，但多个构造方法的参数表一定不同，参数顺序不同即属于不同的构造方法：<br />
public student(string name,int a){<br />
}<br />
public student(int a,string name){<br />
}<br />
为两个不同的构造方法。<br />
如果我们未给系统提供一个构造方法，那么系统会自动提供一个为空的构造方法。<br />
练习：写一个类，定义一个对象，定义两个构造方法：一个有参，一个无参。<br />
（编写一个程序验证对象的传递的值为地址）<br />
注意下面这种形式：<br />
static void changename(student stu){stu.setName &#8220;LUCY&#8221;}<br />
注意生成新的对象与旧对象指向无关，生成新对象生命消亡与旧对象无关。</p>
<p>面向对象方法的重载（overloading）和覆盖（overriding）。<br />
在有些JAVA书籍中将overriding称为重载，overloading称为过载。<br />
Overloading在一个类中可以定义多个同名方法，各个方法的参数表一定不同。但修饰词可能相同，返回值也可能相同。<br />
在程序的编译过程中根据变量类型来找相应的方法。因此也有人认为 overloading是编译时的多态，以后我们还会学到运行时多态。</p>
<p>为什么会存在overloading技术呢？作为应对方法的细节。<br />
利用类型的差异来影响对方法的调用。<br />
吃（）可以分为吃肉，吃菜，吃药，在一个类中可以定义多个吃方法。</p>
<p>构造方法也可以实现overloading。例：<br />
public void teach(){};<br />
public void teach(int a){};<br />
public void teach(String a){}为三种不同的方法。</p>
<p>Overloading方法是从低向高转。<br />
Byte—short—float—int—long—double。</p>
<p>在构造方法中，this表示本类的其他构造方法：<br />
student(){};<br />
student(string n){<br />
this();//表示调用student()<br />
}<br />
如果调用student(int a)则为this(int a)。<br />
特别注意：用this调用其他构造方法时，this必须为第一条语句，然后才是其他语句。</p>
<p>This表示当前对象。</p>
<p>Public void printNum(){<br />
Int number=40；<br />
System.out.println(this.number); <br />
}<br />
此时打印的是实例变量，而非局部变量，即定义在类中而非方法中的变量。</p>
<p>This.number表示实例变量。<br />
谁调用this.number那么谁即为当前(this)对象的number方法。</p>
<p>封装：使对象的属性尽可能私有，对象的方法尽可能的公开。用private表示此成员属性为该类的私有属性。</p>
<p>Public表示该属性（方法）公开；<br />
Private表示该属性（方法）为只有本类内部可以访问（类内部可见）。<br />
（想用private还要用set和get方法供其他方法调用，这样可以保证对属性的访问方式统一，并且便于维护访问权限以及属性数据合法性）<br />
如果没有特殊情况，属性一定私有，方法该公开的公开。<br />
如果不指明谁调用方法，则默认为this。<br />
区分实例变量和局部变量时一定要写this。<br />
11.29<br />
继承：<br />
父类（SuperClass）和 子类（SonClass）。<br />
父类的非私有化属性和方法可以默认继承到子类。<br />
Class Son extends Father{<br />
}<br />
而如果父类中的私有方法被子类调用的话，则编译报错。</p>
<p>父类的构造方法子类不可以继承，更不存在覆盖的问题。（非构造方法可以）<br />
如果子类访问父类的构造方法，则在编译的时候提示访问不到该方法。<br />
JAVA中不允许多继承，一个类有且只有一个父类（单继承）。<br />
JAVA的数据结构为树型结构，而非网状。（JAVA通过接口和内部类实现多继承）</p>
<p>方法的覆盖（overriding）<br />
方法的重载并不一定是在一个类中：子类可以从父类继承一个方法，也可以定义一个同名异参的方法，也称为overloading。<br />
当子类从父类继承一个无参方法，而又定义了一个同样的无参方法，则子类新写的方法覆盖父类的方法，称为覆盖。（注意返回值类型也必须相同，否则编译出错。）<br />
如果方法不同，则成重载。</p>
<p>对于方法的修饰词，子类方法要比父类的方法范围更加的宽泛。<br />
父类为public，那么子类为private则出现错误。<br />
之所以构造方法先运行父类再运行子类是因为构造方法是无法覆盖的。<br />
以下范围依次由严到宽：<br />
private ：本类访问；<br />
default ：表示默认，不仅本类访问，而且是同包可见。<br />
Protected：同包可见+不同包的子类可见<br />
Public ：表示所有的地方均可见。</p>
<p>当构造一个对象的时候，系统先构造父类对象，再构造子类对象。<br />
构造一个对象的顺序：（注意：构造父类对象的时候也是这几步）<br />
1递归地构造父类对象；<br />
2顺序地调用本类成员属性赋初值语句；<br />
3本类的构造方法。</p>
<p>Super()表示调用父类的构造方法。<br />
Super()也和this一样必须放在第一行。<br />
This()用于调用本类的构造方法。<br />
如果没有定义构造方法，那么就会调用父类的无参构造方法，即super()。</p>
<p>要养成良好的编程习惯：就是要加上默认的父类无参的构造方法。<br />
思考：可是如果我们没有定义无参的构造方法，而在程序中构造了有参的构造方法，那么如果方法中没有参数，那么系统还会调用有参的构造方法么？应该不会。</p>
<p>多态：多态指的是编译时类型变化，而运行时类型不变。<br />
多态分两种：<br />
4编译时多态：编译时动态重载；<br />
5运行时多态：指一个对象可以具有多个类型。</p>
<p>对象是客观的，人对对象的认识是主观的。<br />
例：<br />
Animal a=new Dog()；查看格式名称；<br />
Dog d=(Dog)a。声明父类来引用子类。<br />
（思考上面的格式）</p>
<p>运行时多态的三原则：（应用时为覆盖）<br />
6对象不变；（改变的是主观认识）<br />
7对于对象的调用只能限于编译时类型的方法，如调用运行时类型方法报错。<br />
在上面的例子中：Animal a=new Dog()；对象a的编译时类型为Animal，运行时类型为dog。<br />
注意：编译时类型一定要为运行时类型的父类（或者同类型）。<br />
对于语句：Dog d=(Dog)a。将d强制声明为a类型，此时d为Dog()，此时d就可以调用运行时类型。注意：a和d指向同一对象。<br />
8在程序的运行时，动态类型判定。运行时调用运行时类型，即它调用覆盖后的方法。</p>
<p>关系运算符：instanceof<br />
a instanceof Animal;(这个式子的结果是一个布尔表达式)<br />
a为对象变量，Animal是类名。<br />
上面语句是判定a是否可以贴Animal标签。如果可以贴则返回true，否则返回false。<br />
在上面的题目中： a instanceof Animal返回 True，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a instanceof Dog也返回 True，<br />
instanceof用于判定是否将前面的对象变量赋值后边的类名。<br />
Instanceof一般用于在强制类型转换之前判定变量是否可以强制转换。</p>
<p>如果Animal a=new Animal()；<br />
Dog d=Dog()a;<br />
此时编译无误，但运行则会报错。</p>
<p>Animal a=new Dog()相当于下面语句的功能：<br />
Animal a=getAnimal()；<br />
Public static Animal.getAnimal;<br />
Return new Dog()；</p>
<p>封装、继承、多态为面向对象的三大基石（特性）。</p>
<p>运行时的动态类型判定针对的是方法。运行程序访问的属性仍为编译时属性。</p>
<p>Overloading针对的是编译时类型，不存在运行时的多态。</p>
<p>习题：建立一个shape类，有circle和rect子类。<br />
Shape类有zhouchang()和area()两种方法。<br />
（正方形）squ为rect子类，rect有cha()用于比较长宽的差。</p>
<p>覆盖时考虑子类的private及父类的public（考虑多态），之所以这样是避免调用A时出现实际调用B的情况。而出现错误。<br />
11.29下午讲的是教程上的Module6<br />
Module6-7包括：面向对象高级、内部类、集合、反射（暂时不讲）、例外。<br />
面向对象高级、集合和例外都是面向对象的核心内容。</p>
<p><br />
面向对象高级：&nbsp;&nbsp; 修饰符：<br />
static:①可修饰变量（属性）；②可修饰方法；③可修饰代码块。<br />
Static int data语句说明data为类变量，为一个类的共享变量，属于整个类。<br />
Int data为实例变量。<br />
例：<br />
static int data;<br />
m1.data=0;<br />
m1.data++的结果为1,此时m2.data的结果也为1。<br />
Static定义的是一块为整个类共有的一块存储区域，其发生变化时访问到的数据都时经过变化的。<br />
其变量可以通过类名去访问：类名.变量名。与通过访问对象的编译时类型访问类变量为等价的。</p>
<p>Public static void printData(){}<br />
表明此类方法为类方法（静态方法）<br />
静态方法不需要有对象，可以使用类名调用。<br />
静态方法中不允许访问类的非静态成员，包括成员的变量和方法，因为此时是通过类调用的，没有对象的概念。This.data是不可用的。</p>
<p>一般情况下，主方法是静态方法，所以可调用静态方法，主方法为静态方法是因为它是整个软件系统的入口，而进入入口时系统中没有任何对象，只能使用类调用。</p>
<p>覆盖不适用于静态方法。<br />
静态方法不可被覆盖。（允许在子类中定义同名静态方法，但是没有多态，严格的讲，方法间没有多态就不能称为覆盖）<br />
当static修饰代码块时（注：此代码块要在此类的任何一个方法之外），那么这个代码块在代码被装载进虚拟机生成对象的时候可被装载一次，以后再也不执行了。<br />
一般静态代码块被用来初始化静态成员。</p>
<p>Static通常用于Singleton模式开发：<br />
Singleton是一种设计模式，高于语法，可以保证一个类在整个系统中仅有一个对象。</p>
<p>11.30</p>
<p>final可以修饰类、属性、方法。</p>
<p>当用final修饰类的时候，此类不可被继承，即final类没有子类。这样可以用final保证用户调用时动作的一致性，可以防止子类覆盖情况的发生。</p>
<p>当利用final修饰一个属性（变量）的时候，此时的属性成为常量。<br />
JAVA利用final定义常量（注意在JAVA命名规范中常量需要全部字母都大写）：<br />
Final int AGE=10；<br />
常量的地址不可改变，但在地址中保存的值（即对象的属性）是可以改变的。</p>
<p>Final可以配合static使用。 ？<br />
Static final int age=10；</p>
<p>在JAVA中利用public static final的组合方式对常量进行标识（固定格式）。</p>
<p>对于在构造方法中利用final进行赋值的时候，此时在构造之前系统设置的默认值相对于构造方法失效。</p>
<p><br />
常量（这里的常量指的是实例常量：即成员变量）赋值：<br />
①在初始化的时候通过显式声明赋值。Final int x=3；<br />
②在构造的时候赋值。<br />
局部变量可以随时赋值。</p>
<p>利用final定义方法：这样的方法为一个不可覆盖的方法。<br />
Public final void print(){}；<br />
为了保证方法的一致性（即不被改变），可将方法用final定义。</p>
<p>如果在父类中有final定义的方法，那么在子类中继承同一个方法。</p>
<p>如果一个方法前有修饰词private或static，则系统会自动在前面加上final。即private和static方法默认均为final方法。</p>
<p>注：final并不涉及继承，继承取决于类的修饰符是否为private、default、protected还是public。也就是说，是否继承取决于这个方法对于子类是否可见。<br />
Abstract(抽象)可以修饰类、方法<br />
如果将一个类设置为abstract，则此类必须被继承使用。此类不可生成对象，必须被继承使用。<br />
Abstract可以将子类的共性最大限度的抽取出来，放在父类中，以提高程序的简洁性。<br />
Abstract虽然不能生成对象，但是可以声明，作为编译时类型，但不能作为运行时类型。<br />
Final和abstract永远不会同时出现。</p>
<p>当abstract用于修饰方法时，此时该方法为抽象方法，此时方法不需要实现，实现留给子类覆盖，子类覆盖该方法之后方法才能够生效。</p>
<p>注意比较：<br />
private void print(){}；此语句表示方法的空实现。<br />
Abstract void print()； 此语句表示方法的抽象，无实现。</p>
<p>如果一个类中有一个抽象方法，那么这个类一定为一个抽象类。<br />
反之，如果一个类为抽象类，那么其中可能有非抽象的方法。</p>
<p>如果让一个非抽象类继承一个含抽象方法的抽象类，则编译时会发生错误。因为当一个非抽象类继承一个抽象方法的时候，本着只有一个类中有一个抽象方法，那么这个类必须为抽象类的原则。这个类必须为抽象类，这与此类为非抽象冲突，所以报错。</p>
<p>所以子类的方法必须覆盖父类的抽象方法。方法才能够起作用。<br />
只有将理论被熟练运用在实际的程序设计的过程中之后，才能说理论被完全掌握！<br />
为了实现多态，那么父类必须有定义。而父类并不实现，留给子类去实现。此时可将父类定义成abstract类。如果没有定义抽象的父类，那么编译会出现错误。</p>
<p>Abstract和static不能放在一起，否则便会出现错误。（这是因为static不可被覆盖，而abstract为了生效必须被覆盖。）</p>
<p>例：（本例已存在\CODING\abstract\TestClass.java文件中）<br />
public class TestClass{<br />
public static void main(String[] args){<br />
SuperClass sc=new SubClass();<br />
Sc.print();<br />
}<br />
Abstract class SuperClass{<br />
Abstract void print();}<br />
}<br />
class SubClass extends SuperClass(){<br />
void print(){<br />
System.out.println(&#8220;print&#8221;);}<br />
}</p>
<p>JAVA的核心概念：接口（interface）<br />
接口与类属于同一层次，实际上，接口是一种特殊的抽象类。<br />
如:<br />
interface IA{<br />
}<br />
public interface：公开接口<br />
与类相似，一个文件只能有一个public接口，且与文件名相同。<br />
在一个文件中不可同时定义一个public接口和一个public类。</p>
<p>一个接口中，所有方法为公开、抽象方法；所有的属性都是公开、静态、常量。</p>
<p>一个类实现一个接口的格式：<br />
class IAImple implements IA{<br />
};</p>
<p>一个类实现接口，相当于它继承一个抽象类。</p>
<p>类必须实现接口中的方法，否则其为一抽象类。<br />
实现中接口和类相同。</p>
<p>接口中可不写public，但在子类中实现接口的过程中public不可省。<br />
（如果剩去public则在编译的时候提示出错：对象无法从接口中实现方法。）</p>
<p>注：<br />
9一个类除继承另外一个类，还可以实现接口；<br />
class IAImpl extends java.util.Arrylist implement IA{}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 继承类&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 实现接口<br />
这样可以实现变相的多继承。<br />
10一个类只能继承另外一个类，但是它可以继承多个接口，中间用&#8220;，&#8221;隔开。<br />
Implements IA,IB<br />
所谓实现一个接口，就是指实现接口中的方法。<br />
11接口和接口之间可以定义继承关系，并且接口之间允许实现多继承。<br />
例：interface IC extends IA,IB{};<br />
接口也可以用于定义对象<br />
IA I=new IAImpl();<br />
实现的类从父类和接口继承的都可做运行时类型。<br />
IAImple extends A implement IA,IB<br />
IB I=new IAImple();<br />
I instance of IAImple;<br />
I instance of A;<br />
I instance of IA;<br />
I instance of IB;<br />
返回的结果均为true.</p>
<p>接口和多态都为JAVA技术的核心。</p>
<p>接口往往被我们定义成一类XX的东西。<br />
接口实际上是定义一个规范、标准。</p>
<p>12通过接口可以实现不同层次、不同体系对象的共同属性；<br />
通过接口实现write once as anywhere.<br />
以JAVA数据库连接为例子：JDBC制定标准；数据厂商实现标准；用户使用标准。<br />
接口通常用来屏蔽底层的差异。<br />
②接口也因为上述原因被用来保持架构的稳定性。</p>
<p>JAVA中有一个特殊的类： Object。它是JAVA体系中所有类的父类（直接父类或者间接父类）。</p>
<p>此类中的方法可以使所的类均继承。</p>
<p>以下介绍的三种方法属于Object:<br />
13finalize方法：当一个对象被垃圾回收的时候调用的方法。<br />
14toString():是利用字符串来表示对象。<br />
当我们直接打印定义的对象的时候，隐含的是打印toString()的返回值。<br />
可以通过子类作为一个toString()来覆盖父类的toString()。<br />
以取得我们想得到的表现形式，即当我们想利用一个自定义的方式描述对象的时候，我们应该覆盖toString()。<br />
(3)equal<br />
首先试比较下例：<br />
String A=new String(&#8220;hello&#8221;);<br />
String A=new String(&#8220;hello&#8221;);<br />
A==B(此时程序返回为FALSE)<br />
因为此时AB中存的是地址，因为创建了新的对象，所以存放的是不同的地址。</p>
<p>附加知识：<br />
字符串类为JAVA中的特殊类，String中为final类，一个字符串的值不可重复。因此在JAVA VM（虚拟机）中有一个字符串池，专门用来存储字符串。如果遇到String a=&#8221;hello&#8221;时（注意没有NEW，不是创建新串），系统在字符串池中寻找是否有&#8221;hello&#8221;，此时字符串池中没有&#8221;hello&#8221;，那么系统将此字符串存到字符串池中，然后将&#8221;hello&#8221;在字符串池中的地址返回a。如果系统再遇到String b=&#8221;hello&#8221;，此时系统可以在字符串池中找到 &#8220;hello&#8221;。则会把地址返回b，此时a与b为相同。</p>
<p><br />
String a=&#8221;hello&#8221;;<br />
System.out.println(a==&#8221;hello&#8221;);<br />
系统的返回值为true。</p>
<p>故如果要比较两个字符串是否相同（而不是他们的地址是否相同）。可以对a调用equal:<br />
System.out.println(a.equal(b));<br />
equal用来比较两个对象中字符串的顺序。 <br />
a.equal(b)是a与b的值的比较。</p>
<p><br />
注意下面程序：<br />
student a=new student(&#8220;LUCY&#8221;,20);<br />
student b=new student(&#8220;LUCY&#8221;,20);<br />
System.out.println(a==b);<br />
System.out.println(a.equal(b));<br />
此时返回的结果均为false。</p>
<p>以下为定义equal（加上这个定义，返回ture或false）<br />
public boolean equals(Object o){<br />
student s=(student)o;<br />
if (s.name.equals(this.name)&amp;&amp;s.age==this.age)<br />
else return false;<br />
}如果equals()返回的值为</p>
<p>以下为实现标准equals的流程：<br />
public boolean equals(Object o){<br />
if (this==o) return trun; //此时两者相同<br />
if (o==null) return false;<br />
if (! o instanceof strudent) return false; //不同类<br />
studeng s=(student)o; //强制转换<br />
if (s.name.equals(this.name)&amp;&amp;s.age==this.age) return true;<br />
else return false;<br />
}</p>
<p>以上过程为实现equals的标准过程。</p>
<p>练习：建立一个employee类，有String name,int id,double salary.运用get和set方法，使用toString，使用equals。</p>
<p>封装类：<br />
JAVA为每一个简单数据类型提供了一个封装类，使每个简单数据类型可以被Object来装载。<br />
除了int和char，其余类型首字母大写即成封装类。<br />
转换字符的方式：<br />
int I=10;<br />
String s=I+&#8221; &#8221;;<br />
String s1=String.valueOf(i);</p>
<p>Int I=10;<br />
Interger I_class=new integer(I);</p>
<p><br />
看javadoc的帮助文档。<br />
附加内容：<br />
&#8220;==&#8221;在任何时候都是比较地址，这种比较永远不会被覆盖。</p>
<p>程序员自己编写的类和JDK类是一种合作关系。（因为多态的存在，可能存在我们调用JDK类的情况，也可能存在JDK自动调用我们的类的情况。）<br />
注意：类型转换中double\interger\string之间的转换最多。<br />
12.01<br />
内部类：<br />
（注：所有使用内部类的地方都可以不用内部类，使用内部类可以使程序更加的简洁，便于命名规范和划分层次结构）。<br />
内部类是指在一个外部类的内部再定义一个类。<br />
内部类作为外部类的一个成员，并且依附于外部类而存在的。<br />
内部类可为静态，可用PROTECTED和PRIVATE修饰。（而外部类不可以：外部类只能使用PUBLIC和DEFAULT）。</p>
<p>内部类的分类：<br />
成员内部类、<br />
局部内部类、<br />
静态内部类、<br />
匿名内部类（图形是要用到，必须掌握）。</p>
<p>15成员内部类：作为外部类的一个成员存在，与外部类的属性、方法并列。<br />
内部类和外部类的实例变量可以共存。<br />
在内部类中访问实例变量：this.属性<br />
在内部类访问外部类的实例变量：外部类名.this.属性。</p>
<p>成员内部类的优点：<br />
⑴内部类作为外部类的成员，可以访问外部类的私有成员或属性。（即使将外部类声明为PRIVATE，但是对于处于其内部的内部类还是可见的。）<br />
⑵用内部类定义在外部类中不可访问的属性。这样就在外部类中实现了比外部类的private还要小的访问权限。<br />
注意：内部类是一个编译时的概念，一旦编译成功，就会成为完全不同的两类。<br />
对于一个名为outer的外部类和其内部定义的名为inner的内部类。编译完成后出现outer.class和outer$inner.class两类。</p>
<p>（编写一个程序检验：在一个TestOuter.java程序中验证内部类在编译完成之后，会出现几个class.）</p>
<p>成员内部类不可以有静态属性。（为什么？）</p>
<p>如果在外部类的外部访问内部类，使用out.inner.</p>
<p>建立内部类对象时应注意：<br />
在外部类的内部可以直接使用inner s=new inner();（因为外部类知道inner是哪个类，所以可以生成对象。）<br />
而在外部类的外部，要生成（new）一个内部类对象，需要首先建立一个外部类对象（外部类可用），然后在生成一个内部类对象。<br />
Outer.Inner in=Outer.new.Inner()。<br />
错误的定义方式：<br />
Outer.Inner in=new Outer.Inner()。<br />
注意：当Outer是一个private类时，外部类对于其外部访问是私有的，所以就无法建立外部类对象，进而也无法建立内部类对象。</p>
<p>16局部内部类：在方法中定义的内部类称为局部内部类。<br />
与局部变量类似，在局部内部类前不加修饰符public和private，其范围为定义它的代码块。</p>
<p>注意：局部内部类不仅可以访问外部类实例变量，还可以访问外部类的局部变量（但此时要求外部类的局部变量必须为final）？？<br />
在类外不可直接生成局部内部类（保证局部内部类对外是不可见的）。<br />
要想使用局部内部类时需要生成对象，对象调用方法，在方法中才能调用其局部内部类。</p>
<p>17静态内部类：（注意：前三种内部类与变量类似，所以可以对照参考变量）<br />
静态内部类定义在类中，任何方法外，用static定义。<br />
静态内部类只能访问外部类的静态成员。<br />
生成（new）一个静态内部类不需要外部类成员：这是静态内部类和成员内部类的区别。静态内部类的对象可以直接生成：<br />
Outer.Inner in=new Outer.Inner()；<br />
而不需要通过生成外部类对象来生成。这样实际上使静态内部类成为了一个顶级类。<br />
静态内部类不可用private来进行定义。例子：<br />
对于两个类，拥有相同的方法：<br />
People<br />
{<br />
run();<br />
}<br />
Machine{<br />
&nbsp; run();<br />
}<br />
此时有一个robot类：<br />
class Robot extends People implement Machine.<br />
此时run()不可直接实现。<br />
注意：当类与接口（或者是接口与接口）发生方法命名冲突的时候，此时必须使用内部类来实现。<br />
用接口不能完全地实现多继承，用接口配合内部类才能实现真正的多继承。</p>
<p>18匿名内部类（必须掌握）：<br />
匿名内部类是一种特殊的局部内部类，它是通过匿名类实现接口。<br />
IA被定义为接口。<br />
IA I=new IA(){};<br />
注：一个匿名内部类一定是在new的后面，用其隐含实现一个接口或实现一个类，没有类名，根据多态，我们使用其父类名。<br />
因其为局部内部类，那么局部内部类的所有限制都对其生效。<br />
匿名内部类是唯一一种无构造方法类。<br />
匿名内部类在编译的时候由系统自动起名Out$1.class。</p>
<p>如果一个对象编译时的类型是接口，那么其运行的类型为实现这个接口的类。<br />
因匿名内部类无构造方法，所以其使用范围非常的有限。<br />
（下午：）Exception（例外/异常）（教程上的MODEL7）<br />
对于程序可能出现的错误应该做出预案。<br />
例外是程序中所有出乎意料的结果。（关系到系统的健壮性）</p>
<p>JAVA会将所有的错误封装成为一个对象，其根本父类为Throwable。<br />
Throwable有两个子类：Error和Exception。<br />
一个Error对象表示一个程序错误，指的是底层的、低级的、不可恢复的严重错误。此时程序一定会退出，因为已经失去了运行所必须的物理环境。<br />
对于Error错误我们无法进行处理，因为我们是通过程序来应对错误，可是程序已经退出了。<br />
我们可以处理的Throwable对象中只有Exception对象（例外/异常）。<br />
Exception有两个子类：Runtime exception（未检查异常）<br />
非Runtime exception（已检查异常）<br />
（注意：无论是未检查异常还是已检查异常在编译的时候都不会被发现，在编译的过程中检查的是程序的语法错误，而异常是一个运行时程序出错的概念。）<br />
在Exception中，所有的非未检查异常都是已检查异常，没有另外的异常！！</p>
<p>未检查异常是因为程序员没有进行必要的检查，因为他的疏忽和错误而引起的异常。一定是属于虚拟机内部的异常（比如空指针）。</p>
<p>应对未检查异常就是养成良好的检查习惯。<br />
已检查异常是不可避免的，对于已检查异常必须实现定义好应对的方法。<br />
已检查异常肯定跨越出了虚拟机的范围。（比如&#8220;未找到文件&#8221;）</p>
<p>如何处理已检查异常（对于所有的已检查异常都要进行处理）：<br />
首先了解异常形成的机制：<br />
当一个方法中有一条语句出现了异常，它就会throw（抛出）一个例外对象，然后后面的语句不会执行返回上一级方法，其上一级方法接受到了例外对象之后，有可能对这个异常进行处理，也可能将这个异常转到它的上一级。<br />
对于接收到的已检查异常有两种处理方式：throws和try方法。</p>
<p>注意：出错的方法有可能是JDK，也可能是程序员写的程序，无论谁写的，抛出一定用throw。</p>
<p>例：public void print() throws Exception.</p>
<p>对于方法a，如果它定义了throws Exception。那么当它调用的方法b返回异常对象时，方法a并不处理，而将这个异常对象向上一级返回，如果所有的方法均不进行处理，返回到主方法，程序中止。（要避免所有的方法都返回的使用方法，因为这样出现一个很小的异常就会令程序中止）。</p>
<p>如果在方法的程序中有一行throw new Exception()，返回错误，那么其后的程序不执行。因为错误返回后，后面的程序肯定没有机会执行，那么JAVA认为以后的程序没有存在的必要。</p>
<p>对于try&#8230;&#8230;catch格式：<br />
try {可能出现错误的代码块}&nbsp;&nbsp; catch(exception e){进行处理的代码} ；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对象变量的声明</p>
<p>用这种方法，如果代码正确，那么程序不经过catch语句直接向下运行；<br />
如果代码不正确，则将返回的异常对象和e进行匹配，如果匹配成功，则处理其后面的异常处理代码。（如果用exception来声明e的话，因为exception为所有exception对象的父类，所有肯定匹配成功）。处理完代码后这个例外就完全处理完毕，程序会接着从出现异常的地方向下执行（是从出现异常的地方还是在catch后面呢？利用程序进行验证）。最后程序正常退出。</p>
<p>Try中如果发现错误，即跳出try去匹配catch，那么try后面的语句就不会被执行。<br />
一个try可以跟进多个catch语句，用于处理不同情况。当一个try只能匹配一个catch。<br />
我们可以写多个catch语句，但是不能将父类型的exception的位置写在子类型的excepiton之前，因为这样父类型肯定先于子类型被匹配，所有子类型就成为废话。JAVA编译出错。</p>
<p>在try，catch后还可以再跟一子句finally。其中的代码语句无论如何都会被执行（因为finally子句的这个特性，所以一般将释放资源，关闭连接的语句写在里面）。</p>
<p>如果在程序中书写了检查（抛出）exception但是没有对这个可能出现的检查结果进行处理，那么程序就会报错。<br />
而如果只有处理情况（try）而没有相应的catch子句，则编译还是通不过。<br />
如何知道在编写的程序中会出现例外呢<br />
19调用方法，查看API中查看方法中是否有已检查错误。<br />
20在编译的过程中看提示信息，然后加上相应的处理。</p>
<p>Exception有一个message属性。在使用catch的时候可以调用：<br />
Catch(IOException e){System.out.println(e.message())};<br />
Catch(IOException e){e.printStackTrace()};<br />
上面这条语句回告诉我们出错类型所历经的过程，在调试的中非常有用。</p>
<p>开发中的两个道理：<br />
①如何控制try的范围：根据操作的连动性和相关性，如果前面的程序代码块抛出的错误影响了后面程序代码的运行，那么这个我们就说这两个程序代码存在关联，应该放在同一个try中。<br />
21对已经查出来的例外，有throw(积极)和try catch（消极）两种处理方法。<br />
对于try catch放在能够很好地处理例外的位置（即放在具备对例外进行处理的能力的位置）。如果没有处理能力就继续上抛。</p>
<p>当我们自己定义一个例外类的时候必须使其继承excepiton或者RuntimeException。<br />
Throw是一个语句，用来做抛出例外的功能。<br />
而throws是表示如果下级方法中如果有例外抛出，那么本方法不做处理，继续向上抛出。<br />
Throws后跟的是例外类型。<br />
断言是一种调试工具（assert）<br />
其后跟的是布尔类型的表达式，如果表达式结果为真不影响程序运行。如果为假系统出现低级错误，在屏幕上出现assert信息。<br />
Assert只是用于调试。在产品编译完成后上线assert代码就被删除了。</p>
<p>方法的覆盖中，如果子类的方法抛出的例外是父类方法抛出的例外的父类型，那么编译就会出错：子类无法覆盖父类。<br />
结论：子类方法不可比父类方法抛出更多的例外。子类抛出的例外或者与父类抛出的例外一致，或者是父类抛出例外的子类型。或者子类型不抛出例外。<br />
如果父类型无throws时，子类型也不允许出现throws。此时只能使用try catch。</p>
<p>练习：写一个方法：int add(int a,int b)<br />
{<br />
return a+b；<br />
}<br />
当a+b=100;抛出100为异常处理。<br />
12.02<br />
集合（从本部分开始涉及API）<br />
集合是指一个对象容纳了多个对象，这个集合对象主要用来管理维护一系列相似的对象。<br />
数组就是一种对象。（练习：如何编写一个数组程序，并进行遍历。）<br />
java.util.*定义了一系列的接口和类，告诉我们用什么类NEW出一个对象，可以进行超越数组的操作。<br />
（注：JAVA1.5对JAVA1.4的最大改进就是增加了对范型的支持）<br />
集合框架接口的分类：（分collection接口 和 map接口）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Collection接口&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Map接口</p>
<p><br />
List接口&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set接口&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SortedMap接口</p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SortedSet接口<br />
JAVA中所有与集合有关的实现类都是这六个接口的实现类。</p>
<p>Collection接口：集合中每一个元素为一个对象，这个接口将这些对象组织在一起，形成一维结构。</p>
<p>List接口代表按照元素一定的相关顺序来组织（在这个序列中顺序是主要的），List接口中数据可重复。</p>
<p>Set接口是数学中集合的概念：其元素无序，且不可重复。（正好与List对应）</p>
<p>SortedSet会按照数字将元素排列，为&#8220;可排序集合&#8221;。</p>
<p>Map接口中每一个元素不是一个对象，而是一个键对象和值对象组成的键值对（Key-Value）。<br />
Key-Value是用一个不可重复的key集合对应可重复的value集合。（典型的例子是字典：通过页码的key值找字的value值）。<br />
例子：<br />
key1—value1;<br />
key2—value2;<br />
key3—value3.<br />
SortedMap：如果一个Map可以根据key值排序，则称其为SortedMap。（如字典）<br />
!!注意数组和集合的区别：数组中只能存简单数据类型。Collection接口和Map接口只能存对象。</p>
<p>以下介绍接口：<br />
List接口：（介绍其下的两个实现类：ArrayList和LinkedList）<br />
ArrayList和数组非常类似，其底层①也用数组组织数据，ArrayList是动态可变数组。<br />
22底层：指存储格式。说明ArrayList对象都是存在于数组中。<br />
注：数组和集合都是从下标0开始。<br />
ArrayList有一个add(Object o)方法用于插入数组。<br />
ArrayList的使用：（完成这个程序）<br />
先import java.util.*；<br />
用ArrayList在一个数组中添加数据，并遍历。<br />
ArrayList中数组的顺序与添加顺序一致。<br />
只有List可用get和size。而Set则不可用（因其无序）。<br />
Collection接口都是通过Iterator()（即迭代器）来对Set和List遍历。<br />
通过语句：Iterator it=c.iterator(); 得到一个迭代器，将集合中所有元素顺序排列。然后可以通过interator方法进行遍历，迭代器有一个游标（指针）指向首位置。<br />
Interator有hasNext()，用于判断元素右边是否还有数据，返回True说明有。然后就可以调用next动作。Next()会将游标移到下一个元素，并把它所跨过的元素返回。（这样就可以对元素进行遍历）<br />
练习：写一个程序，输入对象信息，比较基本信息。<br />
集合中每一个元素都有对象，如有字符串要经过强制类型转换。<br />
Collections是工具类，所有方法均为有用方法，且方法为static。<br />
有Sort方法用于给List排序。<br />
Collections.Sort()分为两部分，一部分为排序规则；一部分为排序算法。<br />
规则用来判断对象；算法是考虑如何排序。<br />
对于自定义对象，Sort不知道规则，所以无法比较。这种情况下一定要定义排序规则。方式有两种：<br />
23java.lang下面有一个接口：Comparable（可比较的）<br />
可以让自定义对象实现一个接口，这个接口只有一个方法comparableTo(Object o)<br />
其规则是当前对象与o对象进行比较，其返回一个int值，系统根据此值来进行排序。<br />
如 当前对象&gt;o对象，则返回值&gt;0；（可将返回值定义为1）<br />
如 当前对象=o对象，则返回值=0；<br />
如 当前对象&lt;o对象，则返回值〈0。（可将返回值定义为-1）<br />
看TestArraylist的java代码。<br />
我们通过返回值1和-1位置的调换来实现升序和降序排列的转换。</p>
<p>24java.util下有一个Comparator(比较器)<br />
它拥有compare()，用来比较两个方法。<br />
要生成比较器，则用Sort中Sort（List,List(Compate)）<br />
第二种方法更灵活，且在运行的时候不用编译。</p>
<p>注意：要想实现comparTo()就必须在主方法中写上implement comparable.</p>
<p>练习：生成一个EMPLOYEE类，然后将一系列对象放入到ArrayList。用Iterator遍历，排序之后，再进行遍历。</p>
<p>集合的最大缺点是无法进行类型判定（这个缺点在JAVA1.5中已经解决），这样就可能出现因为类型不同而出现类型错误。<br />
解决的方法是添加类型的判断。&nbsp;&nbsp;&nbsp; </p>
<p>LinkedList接口（在代码的使用过程中和ArrayList没有什么区别）<br />
ArrayList底层是object数组，所以ArrayList具有数组的查询速度快的优点以及增删速度慢的缺点。<br />
而在LinkedList的底层是一种双向循环链表。在此链表上每一个数据节点都由三部分组成：前指针（指向前面的节点的位置），数据，后指针（指向后面的节点的位置）。最后一个节点的后指针指向第一个节点的前指针，形成一个循环。<br />
双向循环链表的查询效率低但是增删效率高。所以LinkedList具有查询效率低但增删效率高的特点。<br />
ArrayList和LinkedList在用法上没有区别，但是在功能上还是有区别的。<br />
LinkedList经常用在增删操作较多而查询操作很少的情况下：队列和堆栈。<br />
队列：先进先出的数据结构。<br />
堆栈：后进先出的数据结构。<br />
注意：使用堆栈的时候一定不能提供方法让不是最后一个元素的元素获得出栈的机会。<br />
LinkedList提供以下方法：（ArrayList无此类方法）<br />
addFirst();&nbsp;&nbsp; <br />
removeFirst();<br />
addLast();<br />
removeLast();<br />
在堆栈中，push为入栈操作，pop为出栈操作。</p>
<p>Push用addFirst()；pop用removeFirst()，实现后进先出。<br />
用isEmpty()--其父类的方法，来判断栈是否为空。</p>
<p>在队列中，put为入队列操作，get为出队列操作。<br />
Put用addFirst()，get用removeLast()实现队列。</p>
<p>List接口的实现类（Vector）（与ArrayList相似，区别是Vector是重量级的组件，使用使消耗的资源比较多。）<br />
结论：在考虑并发的情况下用Vector（保证线程的安全）。<br />
在不考虑并发的情况下用ArrayList（不能保证线程的安全）。</p>
<p>面试经验（知识点）：<br />
java.util.stack（stack即为堆栈）的父类为Vector。可是stack的父类是最不应该为Vector的。因为Vector的底层是数组，且Vector有get方法（意味着它可能访问到并不属于最后一个位置元素的其他元素，很不安全）。<br />
对于堆栈和队列只能用push类和get类。<br />
Stack类以后不要轻易使用。<br />
！！！实现堆栈一定要用LinkedList。<br />
（在JAVA1.5中，collection有queue来实现队列。）</p>
<p>Set-HashSet实现类：<br />
遍历一个Set的方法只有一个：迭代器（interator）。<br />
HashSet中元素是无序的（这个无序指的是数据的添加顺序和后来的排列顺序不同），而且元素不可重复。<br />
在Object中除了有final()，toString()，equals()，还有hashCode()。<br />
HashSet底层用的也是数组。<br />
当向数组中利用add(Object o)添加对象的时候，系统先找对象的hashCode：<br />
int hc=o.hashCode(); 返回的hashCode为整数值。<br />
Int I=hc%n;（n为数组的长度），取得余数后，利用余数向数组中相应的位置添加数据，以n为6为例，如果I=0则放在数组a[0]位置，如果I=1,则放在数组a[1]位置。如果equals()返回的值为true，则说明数据重复。如果equals()返回的值为false，则再找其他的位置进行比较。这样的机制就导致两个相同的对象有可能重复地添加到数组中，因为他们的hashCode不同。<br />
如果我们能够使两个相同的对象具有相同hashcode，才能在equals()返回为真。<br />
在实例中，定义student对象时覆盖它的hashcode。<br />
因为String类是自动覆盖的，所以当比较String类的对象的时候，就不会出现有两个相同的string对象的情况。<br />
现在，在大部分的JDK中，都已经要求覆盖了hashCode。<br />
结论：如将自定义类用hashSet来添加对象，一定要覆盖hashcode()和equals()，覆盖的原则是保证当两个对象hashcode返回相同的整数，而且equals()返回值为True。<br />
如果偷懒，没有设定equals()，就会造成返回hashCode虽然结果相同，但在程序执行的过程中会多次地调用equals()，从而影响程序执行的效率。</p>
<p>我们要保证相同对象的返回的hashCode一定相同，也要保证不相同的对象的hashCode尽可能不同（因为数组的边界性，hashCode还是可能相同的）。例子：<br />
public int hashCode(){<br />
return name.hashcode()+age;<br />
}<br />
这个例子保证了相同姓名和年龄的记录返回的hashCode是相同的。</p>
<p>使用hashSet的优点：<br />
hashSet的底层是数组，其查询效率非常高。而且在增加和删除的时候由于运用的hashCode的比较开确定添加元素的位置，所以不存在元素的偏移，所以效率也非常高。因为hashSet查询和删除和增加元素的效率都非常高。<br />
但是hashSet增删的高效率是通过花费大量的空间换来的：因为空间越大，取余数相同的情况就越小。HashSet这种算法会建立许多无用的空间。<br />
使用hashSet接口时要注意，如果发生冲突，就会出现遍历整个数组的情况，这样就使得效率非常的低。</p>
<p>练习：new一个hashset，插入employee对象，不允许重复，并且遍历出来。</p>
<p>添加知识点：<br />
集合对象存放的是一系列对象的引用。<br />
例：<br />
Student S<br />
Al.add(s);<br />
s.setName(&#8220;lucy&#8221;);<br />
Student s2=(Student)(al.get(o1));<br />
可知s2也是s。</p>
<p>12.05</p>
<p>SortedSet可自动为元素排序。<br />
SortedSet的实现类是TreeSet:它的作用是字为添加到TreeSet中的元素排序。</p>
<p>练习：自定义类用TreeSet排序。<br />
与HashSet不同，TreeSet并不需要实现HashCode()和equals()。<br />
只要实现compareable和compareTo()接可以实现过滤功能。<br />
（注：HashSet不调用CompareTo()）。</p>
<p>如果要查询集合中的数据，使用Set必须全部遍历，所以查询的效率低。使用Map，可通过查找key得到value，查询效率高。<br />
集合中常用的是：ArrayList，HashSet，HashMap。其中ArrayList和HashMap使用最为广泛。</p>
<p>使用HashMap，put()表示放置元素，get()表示取元素。</p>
<p>遍历Map，使用keySet()可以返回set值，用keySet()得到key值，使用迭代器遍历，然后使用put()得到value值。<br />
上面这个算法的关键语句：<br />
Set s=m.keySet();<br />
Interator it=new interator();<br />
Object key=it.next();<br />
Object value=m.get(key);</p>
<p>注意：HashMap与HashCode有关，用Sort对象排序。<br />
如果在HashMap中有key值重复，那么后面一条记录的value覆盖前面一条记录。</p>
<p>Key值既然可以作为对象，那么也可以用一个自定义的类。比如：<br />
m.put(new sutdent(&#8220;Liucy&#8221;,30),&#8221;boss&#8221;)<br />
如果没有语句来判定Student类对象是否相同，则会全部打印出来。</p>
<p>当我们用自定义的类对象作为key时，我们必须在程序中覆盖HashCode()和equals()。</p>
<p>注：HashMap底层也是用数组，HashSet底层实际上也是HashMap，HashSet类中有HashMap属性（我们如何在API中查属性）。HashSet实际上为(key.null)类型的HashMap。有key值而没有value值。</p>
<p>正因为以上的原因，TreeSet和TreeMap的实现也有些类似的关系。<br />
注意：TreeSet和TreeMap非常的消耗时间，因此很少使用。<br />
我们应该熟悉各种实现类的选择——非常体现你的功底。</p>
<p>HashSet VS TreeSet：HashSet非常的消耗空间，TreeSet因为有排序功能，因此资源消耗非常的高，我们应该尽量少使用，而且最好不要重复使用。<br />
基于以上原因，我们尽可能的运用HashSet而不用TreeSet，除非必须排序。<br />
同理：HashMap VS TreeMap:一般使用HashMap，排序的时候使用TreeMap。<br />
HashMap VS Hashtable（注意在这里table的第一个字母小写）之间的区别有些类似于ArrayList和Vector，Hashtable是重量级的组件，在考虑并发的情况，对安全性要求比较高的时候使用。</p>
<p>Map的运用非常的多。</p>
<p>使用HashMap()，如果使用自定义类，一定要覆盖HashCode()和equals()。</p>
<p>重点掌握集合的四种操作：增加、删除、遍历、排序。</p>
<p>Module8—12利用两天的时间完成。<br />
Module8：图形界面<br />
Module9：事件模型（在本部分最重要）<br />
Module10：AWT<br />
Module11：Swing<br />
Module12：Applet（这个技术基本已经被淘汰）</p>
<p>软件应用的三个发展阶段：<br />
单机应用<br />
网络应用（C/S结构）<br />
BS结构：B表示浏览器，S表示server端。即利用浏览器作为客户端，因此对于图形界面的要求已经不高，现在的发展趋势是不使用安装，即不用任何的本地应用，图形很快就会被服务器构件开发所取代。</p>
<p>经验之谈：Swing的开发工作会非常的累，而且这项技术正在走向没落。避免从事有这种特征的工作。<br />
AWT也即将被取代。<br />
Module8—Module11所使用的技术都将被JSF技术所取代。<br />
JSF是服务器端的Swing：目前技术已经成熟，但是开发环境（工具）还不成熟。<br />
Module12的Applet技术也将被WebStart所取代。<br />
Module9为重点，所谓事件模型是指观察者设计模式的JAVA应用。事件模型是重点。</p>
<p>Module8：图形界面（java.awt.*）<br />
Awt：抽象窗口工具箱，它由三部分组成：<br />
①组件：界面元素；<br />
②容器：装载组件的容器（例如窗体）；<br />
③布局管理器：负责决定容器中组件的摆放位置。<br />
图形界面的应用分四步：<br />
25选择一个容器：<br />
⑴window:带标题的容器（如Frame）；<br />
⑵Panel:面板<br />
通过add()想容器中添加组件。<br />
Java的图形界面依然是跨平台的。但是在调用了一个窗体之后只生成一个窗体，没有事件的处理，关闭按钮并不工作。此时只能使用CTRL+C终止程序。<br />
②设置一个布局管理器：用setLayout()；<br />
③向容器中添加组件；<br />
26添加组件的事务处理。P198</p>
<p>P204：Panel也是一种容器：但是不可见的。在设置容易的时候不要忘记设置它们的可见性。<br />
Panel pan=new Panel;<br />
Fp.setLayout(null);表示不要布局管理器。</p>
<p>五种布局管理器：<br />
P206：Flow Layout(流式布局)：按照组件添加到容器中的顺序，顺序排放组件位置。默认为水平排列，如果越界那么会向下排列。排列的位置随着容器大小的改变而改变。<br />
Panel默认的布局管理器为Flow Layout。</p>
<p>Border Layout：会将容器非常五个区域：东西南北中。<br />
语句：<br />
Button b1=new Botton(&#8220;north&#8221;);//botton上的文字<br />
f.add(b1,&#8221;North&#8221;);//表示b1这个botton放在north位置<br />
注：一个区域只能放置一个组件，如果想在一个区域放置多个组件就需要使用Panel来装载。<br />
Frame和Dialog的默认布局管理器是Border Layout。</p>
<p>Grid Layout：将容器生成等长等大的条列格，每个块中放置一个组件。<br />
f.setLayout GridLayout(5,2,10,10)//表示条列格为5行2类，后面为格间距。</p>
<p>CardLayout:一个容器可以放置多个组件，但每次只有一个组件可见（组件重叠）。<br />
使用first()，last()，next()可以决定哪个组件可见。可以用于将一系列的面板有顺序地呈现给用户。</p>
<p>重点：GridBag Layout:在Grid中可指定一个组件占据多行多列，GridBag的设置非常的烦琐。</p>
<p>Module9:AWT:事件模型<br />
事件模型指的是对象之间进行通信的设计模式。<br />
对象1给对象2发送一个信息相当于对象1引用对象2的方法。<br />
模型即是一种设计模式（约定俗成）<br />
对象对为三种：<br />
①事件源：发出事件者；<br />
②事件对象：发出的事件本身；<br />
27事件监听器：提供处理事件指定的方法。</p>
<p>Java AWT事件模型也称为授权事件模型，指事件可以和监听器之间事先建立一种关系：约定那些事件如何处理，由谁去进行处理。这种约定称为授权。<br />
一个事件源可以授权多个监听者（授权也称为监听者的注册）；<br />
多个事件源也可以注册多个事件监听器。<br />
监听者对于事件源的发出的事件作出响应。</p>
<p><br />
在java.util中有EventListener接口：所有事件监听者都要实现这个接口。<br />
java.util中有EventObject类：所有的事件都为其子类。</p>
<p>事件范例在\CoreJava\Girl.java文件中。(文件已加注释)&nbsp;&nbsp;&nbsp; </p>
<p>注意：接口因对不同的事件监听器对其处理可能不同，所以只能建立监听的功能，而无法实现处理。</p>
<p>下面程序建立监听功能：<br />
//监听器接口要定义监听器所具备的功能，定义方法<br />
{<br />
void WhatIdoWhenGirlHappy(EmotionEvent e);<br />
void WhatIdoWhenGirlSad(EmotionEvent e);<br />
}<br />
注意查看参考书：事件的设置模式，如何实现授权模型。</p>
<p>事件模式的实现步骤：<br />
开发事件对象（事件发送者）——接口——接口实现类——设置监听对象<br />
一定要理解透彻Gril.java程序。</p>
<p>重点：学会处理对一个事件源有多个事件的监听器（在发送消息时监听器收到消息的排名不分先后）。<br />
事件监听的响应顺序是不分先后的，不是谁先注册谁就先响应。<br />
事件监听由两个部分组成（接口和接口的实现类）。<br />
事件源&nbsp;&nbsp; 事件对象&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 事件监听<br />
gril&nbsp;&nbsp;&nbsp;&nbsp; EmotinEvent&nbsp;&nbsp;&nbsp;&nbsp; EmotionListener(接口)、Boy(接口的实现类)<br />
鼠标事件：MouseEvent，接口：MouseListener。<br />
P235 ActionEvent。<br />
注意在写程序的时候：import java.awt.*;以及import java.awt.event.*注意两者的不同。</p>
<p>在生成一个窗体的时候，点击窗体的右上角关闭按钮激发窗体事件的方法：窗体Frame为事件源，WindowsListener接口调用Windowsclosing()。<br />
为了配合后面的实现，我们必须将WindowsListener所有的方法都实现，除了Windowsclosing方法，其余的方法均为空实现。<br />
（练习：写一个带button窗体，点关闭按钮退出。）<br />
上面程序中实现了许多不必要的实现类，虽然是空实现。<br />
为了避免上面那些无用的实现，可以利用WindowEvent的一个WindowEvent类，还是利用windowsListener。还有WindowAdapter类，它已经实现了WindowsListener。它给出的全部都是空实现，那就可以只写想要实现的类，去覆盖其中的类，就不用写空实现。<br />
注意：监听过多，会抛tooManyListener例外。<br />
12.06<br />
Module 10<br />
Canvas组件：画布，可以实现动画操作。<br />
TextArea：文本域。<br />
在单行文本域中回车会激发ActionEvent。<br />
用CheckBoxGroup实现单选框功能。<br />
Java中，单选框和复选框都是使用CheckBox实现。<br />
菜单：new MenuBar()，MenuBar表示菜单条。<br />
菜单中的每一项为MenuItem，一般级联菜单不应该超过三级。<br />
练习：<br />
设计一个计算器：注意设置一个boolean值（append）来判断输入数字是位于第一个数的后面还是属于输入的第二个数。<br />
设置一个变量来存放&#8220;+&#8221;，点完运算符后，将append设置为false。<br />
String number1<br />
Char operator 存放运算符。</p>
<p>Module 11 Swing<br />
AWT是Java最早出现的图形界面，但很快就被Swing所取代。<br />
Swing才是一种真正的图形开发。<br />
AWT在不同平台所出现的界面可能有所不同：因为每个OS都有自己的UI组件库，java调用不同系统的UI。<br />
注意AWT为重量级组件，相当消耗资源，且不同系统的组件可能不同。因为这个问题使得AWT开发的软件难以作到跨平台。<br />
更为要命的是：不同OS的组件库都存在BUG。必须多种平台进行测试，并且AWT的组件库并不丰富。<br />
为解决以上问题，SUN和IBM以及NETSCAPE联合开发出JAVA基础类包Swing：注意JAVA的基础类以Swing为核心。<br />
注意引用：javax.swing.*;javax表示JAVA的扩展。</p>
<p>我们在学习JDBC的时候会过度到J2EE。</p>
<p>在Swing的组件中，基本上都是在AWT组件的名称前面加&#8220;J&#8221;。<br />
一般情况下，除了Choise等组件:<br />
import javax.swing.*;好要加上：import java.awt.*以及import java.awt.event.*。<br />
Swing与AWT的最大区别是Swing为JAVA自身的组件。已经不是对等实体，与底层的OS无关。<br />
（JBUILDER就是使用Swing写的）</p>
<p>Swing与AWT在事件模型处理上是一致的。<br />
Jframe实际上是一堆窗体的叠加。<br />
Swing比AWT更加复杂且灵活。<br />
在JDK1.4中，给JFRAME添加Button不可用jf.add(b)。而是使用jf.getContentPane().add(b)。<br />
content是先申请面板。不过在JDK1.5中可以使用add.。<br />
Jpanel支持双缓冲技术。<br />
在Jbutton中可以添加图标。<br />
JscrollPane可以管理比屏幕还要大的组件。<br />
TextArea只有装入JscrollPane中才能实现滚动条。<br />
JeditorPane用于显示浏览器。<br />
注意：Tabbed Panel与Border的比较。<br />
进度条：ProgressBar。<br />
JcomboBox：下拉菜单：在AWT中同类组件是choice。<br />
JlistPanel：选择列表<br />
BorderPanel：设置边框<br />
JsplitPanel：可将容器分为两个部分，其中一个部分有Jtree。<br />
TextBox：也是一种新的容器，可以设置组件的间距。<br />
TextFileChoose：文件选择器。<br />
ColorChoose：颜色选择器<br />
Module 12 Applet<br />
Applet为Panel的子类<br />
Applet是java的自动执行方式（这是它的优势，主要用于HTML）。<br />
工作四种语法：init()，start()，stop()，destory()。<br />
Swing中有一个Japplet，如使用Swing组件。<br />
Applet消亡的原因：<br />
①java为安全起见对Applet有所限制：Applet不允许访问本地文件信息、敏感信息，不能执行本地指令（比如FORMAT），不能访问初原服务器之外的其他服务器。<br />
28IE不支持新版本的Applet。<br />
Applet的优势：<br />
网络传输，自动下载。<br />
Application的优势：没有执行限制。<br />
WebStart：可在网络传输，并且在本地无限制。因此前景光明。</p>
<p>练习：<br />
使用Swing实现一个界面，分为上下两个部分，南边为JtextField组件，可编辑，上面为JtextArea组件，不可编辑，在JtextField组件输入字符，按回车，就可以将内容输入到JtextArea组件。(AREA区域可以滚动)</p>
<p>12.07<br />
多线程<br />
进程：任务<br />
任务并发执行是一个宏观概念，微观上是串行的。<br />
进程的调度是有OS负责的（有的系统为独占式，有的系统为共享式，根据重要性，进程有优先级）。</p>
<p>由OS将时间分为若干个时间片。<br />
JAVA在语言级支持多线程。<br />
分配时间的仍然是OS。<br />
参看P377</p>
<p>线程由两种实现方式：<br />
第一种方式：<br />
class MyThread extends Thread{<br />
&nbsp; public void run(){<br />
&nbsp; 需要进行执行的代码，如循环。<br />
}<br />
}</p>
<p>public class TestThread{<br />
main(){<br />
&nbsp; Thread t1=new Mythread();<br />
&nbsp; T1.start();<br />
}<br />
}</p>
<p>只有等到所有的线程全部结束之后，进程才退出。</p>
<p>第二种方式：<br />
Class MyThread implements Runnable{<br />
Public void run(){<br />
Runnable target=new MyThread();<br />
Thread t3=new Thread(target);<br />
Thread.start();//启动线程<br />
}<br />
}<br />
P384:通过接口实现继承</p>
<p>练习：写两个线程：<br />
输入200个&#8220;###&#8221;②输入200个&#8220;***&#8221;</p>
<p>下面为线程中的7中非常重要的状态：（有的书上也只有认为前五种状态：而将&#8220;锁池&#8221;和&#8220;等待队列&#8221;都看成是&#8220;阻塞&#8221;状态的特殊情况：这种认识也是正确的，但是将&#8220;锁池&#8221;和&#8220;等待队列&#8221;单独分离出来有利于对程序的理解）</p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ①&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ⑴<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ②&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ⑵<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ③&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ⑶&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; run()结束<br />
&nbsp; Start()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OS分配CPU</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CPU时间片结束<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yield()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; o.wait()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 等待锁标记</p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; notify()<br />
注意：图中标记依次为<br />
①输入完毕；②wake up③t1退出<br />
⑴如等待输入（输入设备进行处理，而CUP不处理），则放入阻塞，直到输入完毕。<br />
⑵线程休眠sleep（）<br />
⑶t1.join()指停止main()，然后在某段时间内将t1加入运行队列，直到t1退出，main()才结束。<br />
特别注意：①②③与⑴⑵⑶是一一对应的。</p>
<p>进程的休眠：Thread sleep(1000);//括号中以毫秒为单位<br />
当main()运行完毕，即使在结束时时间片还没有用完，CPU也放弃此时间片，继续运行其他程序。<br />
Try{Thread.sleep(1000);}<br />
Catch(Exception e){e.printStackTrace(e);}<br />
T1.join()表示运行线程放弃执行权，进入阻塞状态。<br />
当t1结束时，main()可以重新进入运行状态。<br />
T1.join实际上是把并发的线程编程并行运行。<br />
线程的优先级：1-10，越大优先级越高，优先级越高被OS选中的可能性就越大。（不建议使用，因为不同操作系统的优先级并不相同，使得程序不具备跨平台性，这种优先级只是粗略地划分）。<br />
注：程序的跨平台性：除了能够运行，还必须保证运行的结果。</p>
<p>一个使用yield()就马上交出执行权，回到可运行状态，等待OS的再次调用。</p>
<p>下午：<br />
程序员需要关注的线程同步和互斥的问题。<br />
多线程的并发一般不是程序员决定，而是由容器决定。<br />
多线程出现故障的原因：<br />
两个线程同时访问一个数据资源（临界资源），形成数据发生不一致和不完整。<br />
数据的不一致往往是因为一个线程中的两个关联的操作只完成了一步。</p>
<p>避免以上的问题可采用对数据进行加锁的方法<br />
每个对象除了属性和方法，都有一个monitor（互斥锁标记），用来将这个对象交给一个线程，只有拿到monitor的线程才能够访问这个对象。<br />
Synchronized:这个修饰词可以用来修饰方法和代码块</p>
<p>Object obj;<br />
Obj.setValue(123);<br />
Synchronized用来修饰方法，表示当某个线程调用这个方法之后，其他的事件不能再调用这个方法。只有拿到obj标记的线程才能够执行代码块。<br />
注意：Synchronized一定使用在一个方法中。<br />
锁标记是对象的概念，加锁是对对象加锁，目的是在线程之间进行协调。</p>
<p>当用Synchronized修饰某个方法的时候，表示该方法都对当前对象加锁。<br />
给方法加Synchronized和用Synchronized修饰对象的效果是一致的。</p>
<p>一个线程可以拿到多个锁标记，一个对象最多只能将monitor给一个线程。<br />
Synchronized是以牺牲程序运行的效率为代价的，因此应该尽量控制互斥代码块的范围。</p>
<p>方法的Synchronized特性本身不会被继承，只能覆盖。</p>
<p>线程因为未拿到锁标记而发生的阻塞不同于前面五个基本状态中的阻塞，称为锁池。<br />
每个对象都有自己的一个锁池的空间，用于放置等待运行的线程。<br />
这些线程中哪个线程拿到锁标记由系统决定。</p>
<p>锁标记如果过多，就会出现线程等待其他线程释放锁标记，而又都不释放自己的锁标记供其他线程运行的状况。就是死锁。<br />
死锁的问题通过线程间的通信的方式进行解决。<br />
线程间通信机制实际上也就是协调机制。<br />
线程间通信使用的空间称之为对象的等待队列，则个队列也是属于对象的空间的。<br />
Object类中又一个wait()，在运行状态中，线程调用wait()，此时表示着线程将释放自己所有的锁标记，同时进入这个对象的等待队列。<br />
等待队列的状态也是阻塞状态，只不过线程释放自己的锁标记。<br />
Notify()<br />
如果一个线程调用对象的notify()，就是通知对象等待队列的一个线程出列。进入锁池。如果使用notifyall()则通知等待队列中所有的线程出列。</p>
<p>注意：只能对加锁的资源进行wait()和notify()。</p>
<p>释放锁标记只有在Synchronized代码结束或者调用wait()。<br />
注意锁标记是自己不会自动释放，必须有通知。<br />
注意在程序中判定一个条件是否成立时要注意使用WHILE要比使用IF要严密。<br />
WHILE会放置程序饶过判断条件而造成越界。<br />
补充知识：<br />
suspend（）是将一个运行时状态进入阻塞状态（注意不释放锁标记）。恢复状态的时候用resume()。Stop()指释放全部。<br />
这几个方法上都有Deprecated标志，说明这个方法不推荐使用。</p>
<p>一般来说，主方法main()结束的时候线程结束，可是也可能出现需要中断线程的情况。对于多线程一般每个线程都是一个循环，如果中断线程我们必须想办法使其退出。</p>
<p>如果主方法main()想结束阻塞中的线程（比如sleep或wait）<br />
那么我们可以从其他进程对线程对象调用interrupt()。用于对阻塞（或锁池）会抛出例外Interrupted Exception。<br />
这个例外会使线程中断并执行catch中代码。</p>
<p>多线程中的重点：实现多线程的两种方式，Synchronized,以及生产者和消费者问题（ProducerConsumer.java文件）。</p>
<p>练习：<br />
29存车位的停开车的次序输出问题；<br />
30写两个线程，一个线程打印1-52，另一个线程答应字母A-Z。打印顺序为12A34B56C&#8230;&#8230;5152Z。通过使用线程之间的通信协调关系。<br />
注：分别给两个对象构造一个对象o，数字每打印两个或字母每打印一个就执行o.wait()。在o.wait()之前不要忘了写o.notify()。</p>
<p>补充说明：通过Synchronized，可知Vector较ArrayList方法的区别就是Vector所有的方法都有Synchronized。所以Vector更为安全。<br />
同样：Hashtable较HashMap也是如此。<br />
12.08<br />
Module 10：I/O流（java如何实现与外界数据的交流）<br />
Input/Output：指跨越出了JVM的边界，与外界数据的源头或者目标数据源进行数据交换。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 输出</p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 输入&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
注意：输入/输出是针对JVM而言。<br />
File类（java.io.*）可表示一个文件，也有可能是一个目录（在JAVA中文件和目录都属于这个类中，而且区分不是非常的明显）。<br />
Java.io下的方法是对磁盘上的文件进行磁盘操作，但是无法读取文件的内容。<br />
注意：创建一个文件对象和创建一个文件在JAVA中是两个不同的概念。前者是在虚拟机中创建了一个文件，但却并没有将它真正地创建到OS的文件系统中，随着虚拟机的关闭，这个创建的对象也就消失了。而创建一个文件才是在系统中真正地建立一个文件。<br />
例如：File f=new File(&#8220;11.txt&#8221;);//创建一个名为11.txt的文件对象<br />
f.CreateNewFile();&nbsp;&nbsp; //真正地创建文件</p>
<p>f.CreateMkdir()：创建目录<br />
f.delete()；删除文件<br />
f.deleteOnExit();在进程退出的时候删除文件，这样的操作通常用在临时文件的删除。</p>
<p>对于命令：File f2=new file(&#8220;d:\\abc\\789\\1.txt&#8221;)<br />
这个命令不具备跨平台性，因为不同的OS的文件系统很不相同。<br />
如果想要跨平台，在file类下有separtor()，返回锁出平台的文件分隔符。<br />
File.fdir=new File(File.separator);<br />
String str=&#8221;abc&#8221;+File.separator+&#8221;789&#8221;;<br />
使用文件下的方法的时候一定注意是否具备跨平台性。</p>
<p>List()：显示文件的名（相对路径）<br />
ListFiles()：返回Files类型数组，可以用getName()来访问到文件名。<br />
使用isDirectory()和isFile()来判断究竟是文件还是目录。</p>
<p>练习：<br />
写一个javaTest程序，列出所有目录下的*.java文件，把子目录下的JAVA文件也打印出来。</p>
<p>使用I/O流访问file中的内容。<br />
JVM与外界通过数据通道进行数据交换。<br />
分类：<br />
按流分为输入流和输出流；<br />
按传输单位分为字节流和字符流；<br />
还可以分为节点流和过滤流。<br />
节点流：负责数据源和程序之间建立连接；<br />
过滤流：用于给节点增加功能。<br />
过滤流的构造方式是以其他流位参数构造（这样的设计模式称为装饰模式）。</p>
<p>字节输入流：io包中的InputStream为所有字节输入流的父类。<br />
Int read();读入一个字节（每次一个）；<br />
可先使用new byte[]=数组，调用read(byte[] b)<br />
read (byte[])返回值可以表示有效数；read (byte[])返回值为-1表示结束。</p>
<p>字节输出流：io包中的OutputStream位所有字节输入流的父类。<br />
Write和输入流中的read相对应。</p>
<p>在流中close()方法由程序员控制。因为输入输出流已经超越了VM的边界，所以有时可能无法回收资源。<br />
原则：凡是跨出虚拟机边界的资源都要求程序员自己关闭，不要指望垃圾回收。<br />
以Stream结尾的类都是字节流。<br />
如果构造FileOutputStream的同时磁盘会建立一个文件。如果创建的文件与磁盘上已有的文件名重名，就会发生覆盖。<br />
用FileOutputStream中的boolean，则视，添加情况，将数据覆盖重名文件还是将输入内容放在文件的后面。（编写程序验证）</p>
<p>DataOutputStream:输入数据的类型。<br />
因为每中数据类型的不同，所以可能会输出错误。<br />
所有对于：DataOutputStream<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DataInputStream<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 两者的输入顺序必须一致。<br />
过滤流：<br />
bufferedOutputStream<br />
bufferedInputStream<br />
用于给节点流增加一个缓冲的功能。<br />
在VM的内部建立一个缓冲区，数据先写入缓冲区，等到缓冲区的数据满了之后再一次性写出，效率很高。<br />
使用带缓冲区的输入输出流的速度会大幅提高，缓冲区越大，效率越高。（这是典型的牺牲空间换时间）<br />
切记：使用带缓冲区的流，如果数据数据输入完毕，使用flush方法将缓冲区中的内容一次性写入到外部数据源。用close()也可以达到相同的效果，因为每次close都会使用flush。一定要注意关闭外部的过滤流。</p>
<p>（非重点）管道流：也是一种节点流，用于给两个线程交换数据。<br />
PipedOutputStream<br />
PipedInputStream<br />
输出流：connect(输入流)</p>
<p>RondomAccessFile类允许随机访问文件<br />
GetFilepoint()可以知道文件中的指针位置，使用seek()定位。<br />
Mode(&#8220;r&#8221;:随机读；&#8221;w&#8221;：随机写；&#8221;rw&#8221;：随机读写)<br />
练习：写一个类A，JAVA A file1 file2<br />
file1要求是系统中已经存在的文件。File2是还没有存在的文件。<br />
执行完这个命令，那么file2就是file1中的内容。</p>
<p>字符流：reader\write只能输纯文本文件。<br />
FileReader类：字符文件的输出</p>
<p>字节流与字符流的区别：<br />
字节流的字符编码：<br />
字符编码把字符转换成数字存储到计算机中，按ASCii将字母映射为整数。<br />
把数字从计算机转换成相应的字符的过程称为解码。<br />
编码方式的分类：<br />
ASCII（数字、英文）:1个字符占一个字节（所有的编码集都兼容ASCII）<br />
ISO8859-1（欧洲）：1个字符占一个字节<br />
GB-2312/GBK：1个字符占两个字节<br />
Unicode: 1个字符占两个字节（网络传输速度慢）<br />
UTF-8：变长字节，对于英文一个字节，对于汉字两个或三个字节。</p>
<p>原则：保证编解码方式的统一，才能不至于出现错误。<br />
Io包的InputStreamread称为从字节流到字符流的桥转换类。这个类可以设定字符转换方式。<br />
OutputStreamred:字符到字节<br />
Bufferread有readline()使得字符输入更加方便。<br />
在I/O流中，所有输入方法都是阻塞方法。<br />
Bufferwrite给输出字符加缓冲，因为它的方法很少，所以使用父类printwrite，它可以使用字节流对象，而且方法很多。</p>
<p>练习：做一个记事本<br />
swing/JfileChoose: getSelect file()<br />
InputStreeamReader：把字节变为字符<br />
JAVA中对字符串长无限制 bufferedReader（ir）</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>12.09<br />
class ObjectOutputStream也是过滤流，使节点流直接获得输出对象。<br />
最有用的方法：WriteObject(Object b)<br />
用流传输对象称为对象的序列化，但并不使所有的对象都可以进行序列化的。只有在实现类时必须实现一个接口：IO包下的Serializable(可序列化的)。此接口没有任何的方法，这样的接口称为标记接口。<br />
Class Student implements Serializable<br />
把对象通过流序列化到某一个持久性介质称为对象的可持久化。<br />
Hibernate就是研究对象的可持久化。<br />
ObuectInputStream in =new ObjectInputStream;<br />
Object o1=in.readObuect();<br />
Student s1=(Student)o1；<br />
注意：因为o1是一个对象，因为需要对其进行保存。</p>
<p>Transient用来修饰属性。<br />
Transient int num;<br />
表示当我们对属性序列化时忽略这个属性（即忽略不使之持久化）。<br />
所有属性必须都是可序列化的，特别是当有些属性本身也是对象的时候，要尤其注意这一点。<br />
判断是否一个属性或对象可序列化：Serialver。<br />
Serialver TestObject（TestObject必须为已经编译）<br />
执行结果：如果不可序列化；则出现不可序列化的提示。如果可以序列化，那么就会出现序列化的ID：UID。<br />
java.until.*有<br />
StringTokenizer（参数1，参数2）按某种符号隔开文件<br />
StringTokenizer(s,&#8221;:&#8221;) 用&#8220;：&#8221;隔开字符，s为对象。</p>
<p>练习：将一个类序列化到文件，然后读出。下午：<br />
31网络基础知识<br />
32JAVA网络编程</p>
<p>网络与分布式集群系统的区别：每个节点都是一台计算机，而不是各种计算机内部的功能设备。<br />
Ip:具有全球唯一性，相对于internet，IP为逻辑地址。<br />
端口(port)：一台PC中可以有65536个端口，进程通过端口交换数据。连线的时候需要输入IP也需要输入端口信息。<br />
计算机通信实际上的主机之间的进程通信，进程的通信就需要在端口进行联系。<br />
192.168.0.23:21<br />
协议：为了进行网络中的数据交换（通信）而建立的规则、标准或约定。<br />
不同层的协议是不同的。</p>
<p>网络层：寻址、路由（指如何到达地址的过程）<br />
传输层：端口连接<br />
TCP模型：应用层/传输层/网络层/网络接口<br />
端口是一种抽象的软件结构，与协议相关：TCP23端口和UDT23端口为两个不同的概念。<br />
端口应该用1024以上的端口，以下的端口都已经设定功能。<br />
套接字(socket)的引入：<br />
Ip+Port=Socket（这是个对象的概念。）<br />
Socket为传输层概念，而JSP是对应用层编程。例：<br />
java.net.*;<br />
(Server端定义顺序)<br />
ServerSocket(intport)<br />
Socket.accept()；//阻塞方法，当客户端发出请求是就恢复<br />
如果客户端收到请求：<br />
则Socket SI=ss.accept()；<br />
注意客户端和服务器的Socket为两个不同的socket。<br />
Socket的两个方法：<br />
getInputStream()：客户端用<br />
getOutputStream() 服务器端用<br />
使用完毕后切记Socket.close()，两个Socket都关，而且不用关内部的流。<br />
在client端，Socket s=new Socket(&#8220;127.0.0.1&#8221;,8000);<br />
127.0.0.1为一个默认本机的地址。<br />
练习：<br />
33客户端向服务器发出一个字符串，服务器转换成大写传回客户端。<br />
大写的函数：String.toUpperCase()<br />
34服务器告诉客户端：&#8220;自开机以来你是第n 个用户&#8221;。<br />
12.12<br />
UDP编程：<br />
DatagramSocket（邮递员）：对应数据报的Socket概念，不需要创建两个socket，不可使用输入输出流。<br />
DatagramPacket（信件）：数据包，是UDP下进行传输数据的单位，数据存放在字节数组中。<br />
UDP也需要现有Server端，然后再有Client端。<br />
两端都是DatagramPacket（相当于电话的概念），需要NEW两个DatagramPacket。<br />
InetAddress:网址<br />
这种信息传输方式相当于传真，信息打包，在接受端准备纸。<br />
模式：<br />
发送端：Server:<br />
DatagramPacket inDataPacket=new DatagramPacket ((msg,msg.length); InetAdress.getByName(ip),port);<br />
接收端：<br />
clientAddress=inDataPack.getAddress();//取得地址<br />
clientPort=inDataPack.getPort();//取得端口号<br />
datagramSocket.send; //Server<br />
datagramSocket.accept; //Client<br />
URL:在应用层的编程<br />
注意比较：<br />
http://Localhost:8080/directory //查找网络服务器的目录<br />
file://directory&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //查找本地的文件系统<br />
java的开发主要以http为基础。<br />
反射：主要用于工具和框架的开发。<br />
反射是对于类的再抽象；通过字符串来抽象类。<br />
JAVA类的运行：classLoader:加载到虚拟机（vm）<br />
Vm中只能存储对象（动态运行时的概念），.class文件加载到VM上就成为一个对象，同时初始静态成员及静态代码（只执行一次）。<br />
Lang包下有一个类为Class：在反射中使用。此类中的每个对象为VM中的类对象，每个类都对应类类的一个对象（class.class）。<br />
例：对于一个Object类，用getClass()得到其类的对象，获得类的对象就相当于获得类的信息，可以调用其下的所有方法，包括类的私有方法。<br />
注意：在反射中没有简单数据类型，所有的编译时类型都是对象。<br />
反射把编译时应该解决的问题留到了运行时。</p>
<img src ="http://www.blogjava.net/yanfa120/aggbug/299591.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yanfa120/" target="_blank">小-熊</a> 2009-10-24 21:17 <a href="http://www.blogjava.net/yanfa120/archive/2009/10/24/299591.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一些比较好的关于java的网站集合</title><link>http://www.blogjava.net/yanfa120/archive/2009/09/27/296700.html</link><dc:creator>小-熊</dc:creator><author>小-熊</author><pubDate>Sun, 27 Sep 2009 14:34:00 GMT</pubDate><guid>http://www.blogjava.net/yanfa120/archive/2009/09/27/296700.html</guid><wfw:comment>http://www.blogjava.net/yanfa120/comments/296700.html</wfw:comment><comments>http://www.blogjava.net/yanfa120/archive/2009/09/27/296700.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/yanfa120/comments/commentRss/296700.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yanfa120/services/trackbacks/296700.html</trackback:ping><description><![CDATA[http://www.myext.cn/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EXT之家, ExtJs爱好者的家园-ext,extjs,js,javascript,ajax,web,教程,源码,视频教程,ext中文,ext实例,ext视频<br />
&nbsp;http://www.vifir.com/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;开源人-专注于为开源人士服务的互动平台!<br />
北风网&nbsp;&nbsp;&nbsp;&nbsp;<br />
http://www.mldn.cn/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;魔乐培训 高端JAVA培训 魔乐科技JAVA培训<br />
http://www.javaeye.com/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JavaEye - Java编程 Hibernate Spring AJAX Agile 敏捷软件开发 ruby on rails - 做最棒的软件开发交流社区<br />
http://www.langsin.com&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;浪曦网<br />
http://java.sun.com&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;java的老巢<br />
http://www.sun.com.cn&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sun 中国站点<br />
http://www.apache.org&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;apache官方站点<br />
http://www.oracle.com.cn/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oracle论坛<br />
http://www.ccw.com.cn&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;计算机与IT行业网群<br />
http://www.chinajavaworld.com/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;java开发者网站 论坛- 论坛主页<br />
http://www.huihoo.com/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;灰狐动力，有个jfox，而且很多关于企业级应用的东西 <br />
http://www.cn-java.com/www1/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;中文JAVA技术网<br />
www.matrix.org.cn&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-Matrix技术，不少java文章和资源，论坛牛人多，人气略差。<br />
http://tech.ccidnet.com/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;赛迪还算比较有特色，原创很多。 <br />
http://www.jdon.com/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;J道-软件架构之道<br />
http://itboba.com/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IT视频教程 - IT播吧最新最全视频教程在线观看<br />
http://www.boobooke.com/bbs/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;播布客. - Powered by Discuz!<br />
<br />
<img src ="http://www.blogjava.net/yanfa120/aggbug/296700.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yanfa120/" target="_blank">小-熊</a> 2009-09-27 22:34 <a href="http://www.blogjava.net/yanfa120/archive/2009/09/27/296700.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>终于又能学习Java了</title><link>http://www.blogjava.net/yanfa120/archive/2009/09/27/296698.html</link><dc:creator>小-熊</dc:creator><author>小-熊</author><pubDate>Sun, 27 Sep 2009 13:27:00 GMT</pubDate><guid>http://www.blogjava.net/yanfa120/archive/2009/09/27/296698.html</guid><wfw:comment>http://www.blogjava.net/yanfa120/comments/296698.html</wfw:comment><comments>http://www.blogjava.net/yanfa120/archive/2009/09/27/296698.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yanfa120/comments/commentRss/296698.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yanfa120/services/trackbacks/296698.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;很久没来BlogJava了，大概都有一年多了。去年这个时候正准备着升本。嘿嘿，终于成功了。<br />
&nbsp;&nbsp;&nbsp;&nbsp;对于JAVA的认识也随着时间更加深厚。去年还是一直停留在Java Web那一块。现在把Struts1.x,Struts2.0,Hibernate,Spring.一些比较流行的框架都学会了，现在知道如何利用框架来架构系统。回想起来学习Java真是一个漫长的日子，从一个最简单的一个Hello world，到现在会用Java来开发系统。以前想都不敢想。<br />
&nbsp;&nbsp;&nbsp;&nbsp;现在又有时间来深入学习Java这一块了，感觉真好。对于自己喜欢的东西，学习再怎么苦都感觉到很开心<img src="/CuteSoft_Client/CuteEditor/images/emteeth.gif" align="absMiddle" border="0"  alt="" />。
<img src ="http://www.blogjava.net/yanfa120/aggbug/296698.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yanfa120/" target="_blank">小-熊</a> 2009-09-27 21:27 <a href="http://www.blogjava.net/yanfa120/archive/2009/09/27/296698.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>