<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>新科海 &#187; Java软件培训文章</title>
	<atom:link href="http://www.jobedu.com.cn/archives/category/technology/javadoc/feed" rel="self" type="application/rss+xml" />
	<link>http://www.jobedu.com.cn</link>
	<description>专注中国高端IT培训,网页设计培训,网页制作培,网页美术设计培训,Java培训,软件测试培训,软件培训,网络管理培训,MAX培训,就业培训,项目实训,中科院培训,电脑培训,计算机培训,免费试听,咨询电话010-82622282</description>
	<lastBuildDate>Thu, 09 Sep 2010 06:29:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Java软件架构设计概论</title>
		<link>http://www.jobedu.com.cn/archives/10129.htm</link>
		<comments>http://www.jobedu.com.cn/archives/10129.htm#comments</comments>
		<pubDate>Mon, 26 Jul 2010 08:27:07 +0000</pubDate>
		<dc:creator>yanzhiguo</dc:creator>
				<category><![CDATA[IT文摘]]></category>
		<category><![CDATA[Java软件培训文章]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Java培训]]></category>
		<category><![CDATA[新科海]]></category>
		<category><![CDATA[架构设计]]></category>
		<category><![CDATA[软件设计]]></category>

		<guid isPermaLink="false">http://www.jobedu.com.cn/?p=10129</guid>
		<description><![CDATA[&#160; 开始之初的架构设计决定着软件产品的生死存亡。&#8220;好的开始相当于成功一半&#8221;。 开始的架构设计也是最难的，需要调研同类产品的情况以及技术特征，了解当前世界上对这种产品所能提供的理论支持 和技术平台支持。再结合自己项目的特点(需要透彻的系统分析)，才能逐步形成自己项目的架构蓝图。 比如要开发网站引擎系统，就从Yahoo的个人主页生成工具 到虚拟主机商提供的网站自动生成系统，以及IBM Webphere Portal的特点和局限 从而从架构设计角度定立自己产品的位置。 好的设计肯定需要经过反复修改，从简单到复杂的循环测试是保证设计正确的一个好办法 由于在开始选择了正确的方向，后来项目的实现过程也验证了这种选择，但在一些架构设计的细部方面，还需要对方案进行修改，属于那种螺旋上升的方式，显 然这是通过测试第一的思想和XP工程方法来实现的。 如果我们开始的架构设计在技术平台定位具有一定的世界先进水平，那么，项目开发实际有一半相当于做实验，是研发，存在相当的技术风险。 因此，一开始我们不可能将每个需求都实现，而是采取一种简单完成架构流程的办法，使用最简单的需求将整个架构都简单的完成一遍（加入人工干预），以检 验各个技术环节是否能髋浜瞎ぷ?非常优秀先进的两种技术有时无法在一起工作)，同时也可以探知技术的深浅，掌握项目中的技术难易点。这个过程完成后，我 们就对设计方案做出上面的重大修改，丰富完善了设计方案。 设计模式是支撑架构的重要组件 架构设计也类似一种工作流，它是动态的，这点不象建筑设计那样，一开始就能完全确定，架构设计伴随着整个项目的进行过程之中，有两种具体操作保证架构 设计的正确完成，那就是设计模式(静态)和工程项目方法(RUP或XP 动态的)。 设计模式是支撑架构的一种重要组件，这与建筑有很相象的地方，一个建筑物建立设计需要建筑架构设计，在具体施工中，有很多建筑方面的规则和模式。 我们从J2EE蓝图模式分类http://java.sun.com/blueprints/patterns/catalog.html中 就可以很清楚的看到J2EE这样一个框架软件的架构与设计模式的关系。 架构设计是骨架，设计模式就是肉 这样，一个比较丰富的设计方案可以交由程序员进一步完成了，载辅助以适当的工程方法，这样就可保证项目的架构设计能正确快速的完成。 时刻牢记架构设计的目标 由于架构设计是在动态中完成的，因此在把握架构设计的目标上就很重要，因此在整个项目过程中，甚至每一步我们都必须牢记我们架构设计的总体目标，可以 概括下面几点： 1. 最大化的重用：这个重用包括组件重用 和设计模式使用等多个方面。 比如，我们项目中有用户注册和用户权限系统验证，这其实是个通用课题，每个项目只是有其内容和一些细微的差别，如果我们之前有这方面成功研发经验，可 以直接重用，如果没有，那么我们就要进行这个子项目的研发，在研发过程中，不能仅仅看到这个项目的需求，也要以架构的概念去完成这个可以称为组件的子项 目。 2. 尽可能的简单明了：我们解决问题的总方向是将复杂问题简单化，其实这也是中间件或多层体系技术的根本目标。但是在具体实施设计过程中，我们可能会将简单问 题复杂化，特别是设计模式的运用上很容易范这个错误，因此如何尽可能的做到设计的简单明了是不容易的。 我认为落实到每个类的具体实现上要真正能体现系统事物的本质特征，因为事物的本质特征只有一个，你的代码越接近它，表示你的设计就是简单明了，越简单 明了，你的系统就越可靠。更多情况是，一个类并不能反应事物本质，需要多个类的组合协调，那么能够正确使用合适的设计模式就称为重中之重。 我们看一个具备好的架构设计的系统代码时，基本看到的都是设计模式，宠物店(pet store)就是这样的例子。或者可以这样说，一个好的架构设计基本是由简单明了的多个设计模式完成的。 3. 最灵活的拓展性：架构设计要具备灵活性 拓展性，这样，用户可以在你的架构上进行二次开发或更加具体的开发。 要具备灵活的拓展性，就要站在理论的高度去进行架构设计，比如现在工作流概念逐步流行，因为我们具体很多实践项目中都有工作流的影子，工作流中有一个 树形结构权限设定的概念就对很多领域比较通用。 树形结构是组织信息的基本形式，我们现在看到的网站或者ERP前台都是以树形菜单来组织功能的，那么我们在进行架构设计时，就可以将树形结构和功能分 开设计，他们之间联系可以通过树形结构的节点link在一起，就象我们可以在圣诞树的树枝上挂各种小礼品一样，这些小礼品就是我们要实现的各种功能。 有了这个概念，通常比较难实现的用户级别权限控制也有了思路，将具体用户或组也是和树形结构的节点link在一起，这样就间接实现了用户对相应功能的 权限控制，有了这样的基本设计方案的架构无疑具备很灵活的拓展性。 2010年07月26号 &#8212; 探秘Java 7新增垃圾回收器G1特性 (0) [...]]]></description>
		<wfw:commentRss>http://www.jobedu.com.cn/archives/10129.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>探秘Java 7新增垃圾回收器G1特性</title>
		<link>http://www.jobedu.com.cn/archives/10127.htm</link>
		<comments>http://www.jobedu.com.cn/archives/10127.htm#comments</comments>
		<pubDate>Mon, 26 Jul 2010 07:12:58 +0000</pubDate>
		<dc:creator>yanzhiguo</dc:creator>
				<category><![CDATA[IT文摘]]></category>
		<category><![CDATA[Java软件培训文章]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Java培训]]></category>
		<category><![CDATA[回收器]]></category>
		<category><![CDATA[新科海]]></category>
		<category><![CDATA[软件工程师]]></category>

		<guid isPermaLink="false">http://www.jobedu.com.cn/?p=10127</guid>
		<description><![CDATA[&#160; G1垃圾回收器（简称G1 GC）是JDK 7中Java HotSpot VM新引入的垃圾回收器，Java SE 6 Update 14中已经包含了一个G1的体验版本（据51CTO之前的报导，在Java SE 6 u14于6月初登场时，原本Sun的声明是：G1垃圾回收器需要收费方能使用。然而之后不久，Sun表示这是一个误会，修改了原本的发布声明，并表示现在 以及将来对G1的使用都是完全免费的），G1是设计用于替代HotSpot低延迟的并行标记/清除垃圾 回收器（也叫做CMS）的。 Java 7 G1属性 G1是一个服务端垃圾回收器，有以下属性： ◆并行和并发性：G1利用了当今硬件中存在的并行性，当Java应用程序的线程被停止时，它使用所有可用的CPU（核 心，硬件线程等）加速其停止，在停止过程中运行Java线程最小化整个堆栈。 ◆代：和其他HotSpot GC一样，G1是一代，意味着它在处理新分配的对象（年轻代）和已经生存了一段时间的对象（年老代）时会不同，它主要集中于新对象上的垃圾回收活动，因为 它们是最可能回收的，旧对象只是偶尔访问一下，对于大多数Java应用程序，代的垃圾回收对 于替代方案具有重要优势。 ◆压缩：和CMS不同，G1会随时间推移对堆栈进行压缩，压缩消除了潜在的碎片问题，确保长时间运行的操作流畅和一致。 ◆可预测性：G1比CMS预测性更佳，这都是由于消除了碎片问题带来的好处，再也没有CMS中停止期间出现的负面影响，另外，G1有一个暂停预测模 型，允许它满足（或很少超过）暂停时间目标。 Java 7 G1描述 和其它HotSpot GC相比，G1采用了一个非常不同的堆栈布局方法，在G1中，年轻代和年老代之间没有物理隔离，相反，它们之间有一个连续的堆栈，被分成大小一样的区域 （region），年轻代可能是一套非连续的区域，年老代也一样，这就允许G1在年轻代和年老代之间灵活地移动资源。 G1中的回收是通过消除暂停发生的，在此期间，幸存者指的是回收集被转移到另一个区域，以便回收区域可以再生，消除暂停是并行的，所有可用的CPU都 会参加，大多数消除暂停收集可用的年轻区域，和其它HotSpot GC中的年轻回收是一样的，在暂停期间偶尔也会选择年老区域回收，因为G1在年轻一代回收上还肩负了年老代的回收活动。 和CMS相同的是，G1会定期执行一个并发标记暂停，这个阶段的主要职责是识别哪一个年老区域的垃圾对象是最完整的，因为这些是最有效和最值得回收 的，和CMS不同的是，G1不会执行并发清除暂停，相反，最有用的年老区域是通过并发标记暂停标识的，在随后的消除暂停期间进行回收。 使用G1 G1仍然被看做是试验品，可以使用下面两个参数开启它： -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC 为了设置一个GC暂停时间目标，使用下面的参数： -XX:MaxGCPauseMillis =50&#160;&#160;(暂停时间目标50ms) 使用G1时还可以指定时间间隔，当GC暂停持续时间没有上面给出的时间长时可以这么用： -XX:GCPauseIntervalMillis =200&#160;&#160;(暂停间隔目标200ms) 注意上面两个选项表示的目标，没有承诺和保证，在某些情况下它们可能能够工作，GC不是总是能够执行它们。 另外，年轻代的大小可以明确指定影响消除暂停时间： -XX:+G1YoungGenSize=512m (年轻代大小512M) G1也使用幸存空间（可能是非连续的区域），它们的大小可以使用一个常见的参数指定，如： -XX:SurvivorRatio=6 [...]]]></description>
		<wfw:commentRss>http://www.jobedu.com.cn/archives/10127.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>动态调用动态语言之Java脚本API</title>
		<link>http://www.jobedu.com.cn/archives/10105.htm</link>
		<comments>http://www.jobedu.com.cn/archives/10105.htm#comments</comments>
		<pubDate>Mon, 26 Jul 2010 06:09:30 +0000</pubDate>
		<dc:creator>yanzhiguo</dc:creator>
				<category><![CDATA[IT文摘]]></category>
		<category><![CDATA[Java软件培训文章]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[java编程]]></category>
		<category><![CDATA[动态脚本语言]]></category>
		<category><![CDATA[新科海]]></category>

		<guid isPermaLink="false">http://www.jobedu.com.cn/?p=10105</guid>
		<description><![CDATA[&#160; 我们不需要将动态语言编译为 Java字节码就可以在 Java 应用程序中使用它们。使用 Java Platform, Standard Edition 6 (Java SE)中添加的脚本包（并且向后兼容 Java SE 5），Java 代码可以在运行时以一种简单的、统一的方式调用多种动态语言。本系列文章共分两个部分，第 1 部分将介绍 Java 脚本 API 的各种特性。文章将使用一个简单的 Hello World 应用程序展示 Java 代码如何执行脚本代码以及脚本如何反过来执行 Java 代码。第 2 部分将深入研究 Java 脚本 API 的强大功能。 Java 开发人员清楚 Java 并不是在任何情况下都是最佳的语言。今年，1.0 版本的 JRuby 和 Groovy 的发行引领了一场热潮，促使人们纷纷在自己的 Java 应用程序中添加动态语言。Groovy、JRuby、Rhino、Jython 和一些其他的开源项目使在所谓的脚本语言中编写代码并在 JVM 中运行成为了可能（请参阅 参考资料）。通常，在 Java 代码中集成这些语言需要对各种解释器所特有的 API 和特性有所了解。 Java [...]]]></description>
		<wfw:commentRss>http://www.jobedu.com.cn/archives/10105.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用OCI驱动连接Oracle数据库</title>
		<link>http://www.jobedu.com.cn/archives/10103.htm</link>
		<comments>http://www.jobedu.com.cn/archives/10103.htm#comments</comments>
		<pubDate>Mon, 26 Jul 2010 06:07:17 +0000</pubDate>
		<dc:creator>yanzhiguo</dc:creator>
				<category><![CDATA[IT文摘]]></category>
		<category><![CDATA[Java软件培训文章]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Oralce培训]]></category>
		<category><![CDATA[新科海]]></category>

		<guid isPermaLink="false">http://www.jobedu.com.cn/?p=10103</guid>
		<description><![CDATA[&#160; 　　公司各种产品的前端、后端差不多都是用java开发的Web应用且运行在tomcat里。根据oracle的说 法，java程序连接oracle数据库时，用oci驱动要比用thin驱动性能好些。 主要的区别是使用thin驱动时，不需要安装oracle的客户端，而使用oci时则要安装oracle 的客户端。 从使用thin驱动切换到oci驱动在配置来说很简单，只需把连接字符串java: oracle:thin: @hostip:1521:实例名换为java: oracle: oci@本地服务名即可。如: 从 jdbc: oracle:thin: @10.1.1.2:1521: shdb 改成 jdbc: oracle: oci8: @shdb 但这里这台机需安装oracle数据库的客户端并配置本地服务名，同时还需指定NLS_LANG环境变量，NLS_LANG环境变量是用来控制客户端 在显示oracle数据库的数据时所用的字符集和本地化习惯。通常把NLS_LANG的字符集部分指定为数据库所用的字符集则就不会存在java显示的乱 码问题了。 对于oracle数据库客户端的安装，有二种选择，一是老实的用oracle数据库的安装光盘安装对应版本的oracle客户端。二是下载 oracle提从的即时客户端，即时客户端是不用安装的，把下载包解压即可。 要使java web正常的通过oci驱动访问oracle，还需要客户端正确的配置一下相关变 量。主要如下: 对于windows系统并使用oracle客户端时: 1. 把%ORACLE_HOME%\lib加到PATH环境变量. 2. 把%ORACLE_HOME%\jdbc\lib\classes12.jar加到CLASSPATH环境变量里.也可以把classes12.jar拷 贝到tomcat的comman\lib目录下。 对于windows系统并使用oracle的即时客户端时(假定即时客户端解压在d盘): 1. 把d:\instantclient_10_2加到PATH环境变量 2. 把d:\instantclient_10_2\classes12.jar加到CLASSPATH环境变量里.也可以把classes12.jar拷贝 到tomcat的comman\lib目录下。 对于linux系统并使用oracle客户端时: 1. 在使用tomcat的用户主目录下的.bash_profile文件中加入 exprot ORACLE_HOME=/u01/app/oracle/product/9.2.0.4 export LD_LIBRARY_PATH=$ORACLE_HOME/lib 2. 把classes12.jar拷贝到tomcat的comman\lib目录下。 对于linux系统并使用oracle即时客户端时: 1. 在使用tomcat的用户主目录下的.bash_profile文件中加入 exprot ORACLE_HOME=/instantclient_10_2 export [...]]]></description>
		<wfw:commentRss>http://www.jobedu.com.cn/archives/10103.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>解决Spring和Hibernate整合时HQL查询语句乱码问题</title>
		<link>http://www.jobedu.com.cn/archives/10036.htm</link>
		<comments>http://www.jobedu.com.cn/archives/10036.htm#comments</comments>
		<pubDate>Sun, 11 Apr 2010 05:05:20 +0000</pubDate>
		<dc:creator>yanzhiguo</dc:creator>
				<category><![CDATA[IT文摘]]></category>
		<category><![CDATA[Java软件培训文章]]></category>
		<category><![CDATA[Hibernate培训]]></category>
		<category><![CDATA[Spring]]></category>
		<category><![CDATA[乱码]]></category>
		<category><![CDATA[新科海]]></category>
		<category><![CDATA[查询语句]]></category>

		<guid isPermaLink="false">http://www.jobedu.com.cn/?p=10036</guid>
		<description><![CDATA[&#160; 只需在配置文件ApplicationContext.xml中修 改代码如下： &#60;bean id=&#34;sessionFactory&#34; 　　　　　　　　 class=&#34;org.springframework.orm.hibernate3.LocalSessionFactoryBean&#34; 　　　　　　　　 destroy-method=&#34;destroy&#34; &#62; 　　　　　　　　 &#60;property name=&#34;dataSource&#34; ref=&#34;dataSource&#34; /&#62; 　　　　　　　　 &#60;property name=&#34;mappingResources&#34;&#62; 　　　　　　　　　　 &#60;list&#62; 　　　　　　　　　　　　 &#60;value&#62;com/snsoft/crm/domain/SnRukudan.hbm.xml&#60;/value&#62; 　　　　　　　　　　　　 &#60;value&#62;com/snsoft/crm/domain/SnKehu.hbm.xml&#60;/value 　　　　　　　　 &#60;/list&#62; 　　　　　　　　 &#60;/property&#62; 　　　　　　　　 &#60;property name=&#34;hibernateProperties&#34;&#62; 　　　　　　　　　　 &#60;props&#62; 　　　　　　　　　　　　 &#60;prop key=&#34;hibernate.query.factory_class&#34;&#62; 　　　　　　　　　　　　　　　　 org.hibernate.hql.classic.ClassicQueryTranslatorFactory 　　　　　　　　　　　　 &#60;/prop&#62; 　　　　　　　　　　　　 &#60;prop key=&#34;hibernate.dialect&#34;&#62;org.hibernate.dialect.SQLServerDialect&#60;/prop&#62; 　　　　　　　　　　　　 &#60;prop key=&#34;hibernate.show_sql&#34;&#62;false&#60;/prop&#62; 　　　　　　　　　　 &#60;/props&#62; 　　　　　　　　 &#60;/property&#62;　　　　　　　　 　　 &#60;/bean&#62; 复制代码 2009年04月9号 &#8212; [...]]]></description>
		<wfw:commentRss>http://www.jobedu.com.cn/archives/10036.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>程序员低级错误大集合,各个痛心疾首</title>
		<link>http://www.jobedu.com.cn/archives/10034.htm</link>
		<comments>http://www.jobedu.com.cn/archives/10034.htm#comments</comments>
		<pubDate>Sun, 11 Apr 2010 05:03:31 +0000</pubDate>
		<dc:creator>yanzhiguo</dc:creator>
				<category><![CDATA[IT文摘]]></category>
		<category><![CDATA[Java软件培训文章]]></category>
		<category><![CDATA[Java培训]]></category>
		<category><![CDATA[Java软件开发]]></category>
		<category><![CDATA[常见错误]]></category>
		<category><![CDATA[新科海学校]]></category>
		<category><![CDATA[程序员]]></category>

		<guid isPermaLink="false">http://www.jobedu.com.cn/?p=10034</guid>
		<description><![CDATA[&#160; 先汇总一下错误的分类吧 1 全角问题 2 =和==的问题 3 空格问题 4 拼写问题 5 疏忽，忘记做该做的事情 6 新东西，不是很熟悉 下面是明细，呵呵呵。 1 老紫竹(java2000_net) 我最难忘的一次，是自作聪明的在一个for循环后面加上了一个分号，而且是在大量的代码重构之后，运 行时偶尔发生这个错误。 大概用了我近1周的时间。 从那之后，我的代码的大括号，就都放在代码行的后面了！ for(int i=0;i&#60;=10;i++); { &#160;&#160;// } for(int i=0;i&#60;=10;i++);{//} for(int i=0;i&#60;=10;i++);{ &#160;&#160;// } for(int i=0;i&#60;=10;i++);{//} 编辑器格式化代码时，可以有很大的帮助。 说说大家曾经常犯的低级错误吧，也好让其它朋友有个心理准备，想拿块豆腐砸自己脑袋的冲动少几次。 2 jsp页面莫名的报空指针，而且有时出有时不出。最后发 现是jsp代码里混了个全角的空格,排版比较乱的时候看不出来。然后那空格被当变量名的一部分了，偏 偏那变量还不常用。悲剧啊(￣(工)￣) 3 当年用vc，貌似写个类似于jTable的东西，在我的机器上一切都好，在老板（小公司，cto也是老板之一）的机器上一跑就死。。。。。。。。然后发 现，我的机器分辨率是640&#215;480，老板的是800&#215;600的，结果数组溢出。。。。。。。 4 写了2个preparestatement，一顿addbatch，然而最后只写了一个 preparestatement.executeBatch();找了n长时间才看到问题所在。 5 三层架构里面的业务逻辑层比如： public bool Add(hLink.Model.FavoriteInfo model) { &#160;&#160;return dal.Add(model) [...]]]></description>
		<wfw:commentRss>http://www.jobedu.com.cn/archives/10034.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>接口、类、抽象类、对象的另类解释</title>
		<link>http://www.jobedu.com.cn/archives/10007.htm</link>
		<comments>http://www.jobedu.com.cn/archives/10007.htm#comments</comments>
		<pubDate>Thu, 08 Apr 2010 04:19:42 +0000</pubDate>
		<dc:creator>yanzhiguo</dc:creator>
				<category><![CDATA[IT文摘]]></category>
		<category><![CDATA[Java软件培训文章]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[对象]]></category>
		<category><![CDATA[接口]]></category>
		<category><![CDATA[新科海学校]]></category>
		<category><![CDATA[类]]></category>

		<guid isPermaLink="false">http://www.jobedu.com.cn/?p=10007</guid>
		<description><![CDATA[&#160; 大家也许都知道做工艺器或是工厂里做生产某些产品的模具模具。如做一个金属的五角星，只要将钢水罐到五角星的模具模具里就可以很容易地制做五角星。 &#160; &#160; 我们也可以将类比喻成做五角星的模具。&#160;&#160;而生产出的一个个五角星就是一个个对象。 为了建立不同的对象（有的是金属的、有的塑料的，等等），可通过向模具里灌入不同的液态材料就可以制做。这也相当于向类的构造方法中传入不同的参数（相当 于不同的液态材料）。 &#160; &#160; 还有就是接口，如果说类是对象的抽象，那么接口就是类的抽象。 我们也可以将接口看成是制做这个五角星模具的规格列表（相当于接口中的抽象方法）。也就是说，只有这个模具（类）符合（实现）相应的规格（接口）， 才会成为制做五角星的模具模具。 哈哈，当然，这个使用模具生成五角星及其他产品的工厂可以看成是对象工厂。 class ObjectFactory { &#160; &#160; public static 五角星 create五角星() {} &#160; &#160; &#160; &#160; public static 圆 create圆() {} &#160; &#160;&#160; &#160;public static 椭圆 create椭圆() {} &#160; &#160; } 复制代码 也就是说，类和接口都不是实际的产品，都不能拿来用，类相当于模具（没人会拿模具模具在商店里卖吧，估计只有对象工厂会买），而接口只相当于制做模 具的规格列表，如尺寸、角度等。而这些规格列表的内容需要在具体类中实现才可能成为具体的模具，如长度和宽度，如果在类中实现为长度等于宽度，那么这个类 就成为一个成方形的模具，如果长度不等于宽度，就是一个长方形的模具。然后再实例化这个模具（类），就生成出一个个正方形或长方形对象。 &#160; &#160; 在面向对象理论中还有一个抽象类，这个抽象类其实就相当于一个半成品的模具。如只实现在长度和宽度（相当于在抽象类中已实现的方法)，并没有实现深度（这 个深度相当于抽象类中的抽象方法，这个抽象方法需要在抽象类的子类中实现）。所以这个模具就是半成品了。因此，是无法直接拿半成品的模具（抽象类）去生产 （实例化）产品（对象）的。 2010年04月8号 &#8212; 冒泡排序基本思想和算法 (0) [...]]]></description>
		<wfw:commentRss>http://www.jobedu.com.cn/archives/10007.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Struts2：上传任意多个文件</title>
		<link>http://www.jobedu.com.cn/archives/10005.htm</link>
		<comments>http://www.jobedu.com.cn/archives/10005.htm#comments</comments>
		<pubDate>Thu, 08 Apr 2010 04:17:37 +0000</pubDate>
		<dc:creator>yanzhiguo</dc:creator>
				<category><![CDATA[IT文摘]]></category>
		<category><![CDATA[Java软件培训文章]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Java培训]]></category>
		<category><![CDATA[struts2]]></category>
		<category><![CDATA[新科海]]></category>

		<guid isPermaLink="false">http://www.jobedu.com.cn/?p=10005</guid>
		<description><![CDATA[&#160; 一、上传单个文件 &#160; &#160; 上传文件是很多Web程序都具有的功能。在Struts1.x中 已经提供了用于上传文件的组件。而在Struts2中提供了一个更为容易操作的上传文件组件。所不同的 是，Struts1.x的上传组件需要一个ActionForm来传递文件，而Struts2的上传组件是一个拦截器（这个拦截器不用配置，是自动装载的）。在本文中先介绍一下如何用struts2上传单个文件，最后介绍一下用struts2上传任意多个文件。 &#160; &#160; 要用Struts2实现上传单个文件的功能非常容易 实现，只要使用普通的Action即可。但为了获得一些上传文件的信息，如上传文件名、上传文件类型以 及上传文件的Stream对象，就需要按着一定规则来为Action类增加一些getter和setter方法。 &#160; &#160; 在Struts2中，用于获得和设置java.io.File对象（Struts2将文件上传到临时路径，并使用java.io.File打开这个临时文件）的 方法是getUpload和setUpload。获 得和设置文件名的方法是getUploadFileName和setUploadFileName，获得和设置上传文件内容类型的方法是getUploadContentType和setUploadContentType。下面是用于上传的动作类的完整代码： package action; import java.io.*; import com.opensymphony.xwork2.ActionSupport; public class UploadAction extends ActionSupport { &#160; &#160; private File upload; &#160; &#160; private String fileName; &#160; &#160; private String uploadContentType; &#160; &#160; &#160; &#160; public String getUploadFileName() &#160; &#160; { &#160; [...]]]></description>
		<wfw:commentRss>http://www.jobedu.com.cn/archives/10005.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
