<?xml version="1.0" encoding="utf-8"?><rss version="2.0">
<channel>
<title><![CDATA[java爱好者]]></title>
<link>http://blog.pfan.cn/fkjava</link>
<description>编程爱好者博客</description>
<language>zh-cn</language>
			<item>
		<title><![CDATA[Java按字节长度截取字符串&nbsp;广州疯狂JAVA培训]]></title>
		<link>http://blog.pfan.cn/fkjava/53491.html</link>
		<description><![CDATA[编程：编写一个截取字符串的函数，输入为一个字符串和字节数，输出为按字节截取的字符串。但是要保证汉字不被截半个，如"我ABC"4，应该截为"我AB"，输入"我ABC汉DEF"，6，应该输出为"我ABC"而不是"我ABC+汉的半个"。

　　public&nbsp;static&nbsp;String&nbsp;substring(String&nbsp;str,&nbsp;int&nbsp;toCount,String&nbsp;more)

　　{

　　int&nbsp;reInt&nbsp;=&nbsp;0;

　　String&nbsp;reStr&nbsp;=&nbsp;"";

　　if&nbsp;(str&nbsp;==&nbsp;null)

　　return&nbsp;"";

　　char[]&nbsp;tempChar&nbsp;=&nbsp;str.toCharArray();

　　for&nbsp;(int&nbsp;kk&nbsp;=&nbsp;0;&nbsp;(kk&nbsp;&lt;&nbsp;tempChar.length&nbsp;&amp;&amp;&nbsp;toCount&nbsp;&gt;&nbsp;reInt);&nbsp;kk++)&nbsp;{

　　String&nbsp;s1&nbsp;=&nbsp;str.valueOf(tempChar[kk]);

　　byte[]&nbsp;b&nbsp;=&nbsp;s1.getBytes();

　　reInt&nbsp;+=&nbsp;b.length;

　　reStr&nbsp;+=&nbsp;tempChar[kk];

　　}

　　if&nbsp;(toCount&nbsp;==&nbsp;reInt&nbsp;||&nbsp;(toCount&nbsp;==&nbsp;reInt&nbsp;-&nbsp;1))

　　reStr&nbsp;+=&nbsp;more;

　　return&nbsp;reStr;

　　}

　　Web应用程序在浏览器中显示字符串时，由于显示长度的限制，常常需要将字符串截取后再进行显示。但目前很多流行的语言，如C#、Java内部采用的都是&nbsp;Un]]></description>
		<author><![CDATA[soso爱好者]]></author>
		<pubDate>2012-05-25 17:06:00</pubDate>
		</item>
				<item>
		<title><![CDATA[JAVA中sleep()、wait()、yield()、join()方法浅析]]></title>
		<link>http://blog.pfan.cn/fkjava/53490.html</link>
		<description><![CDATA[线程退出最好自己实现，在运行状态中一直检验一个状态，如果这个状态为真，就一直运行，如果外界更改了这个状态变量，那么线程就停止运行。

1.sleep()方法

在指定时间内让当前正在执行的线程暂停执行，但不会释放“锁标志”。不推荐使用。

sleep()使当前线程进入阻塞状态，在指定时间内不会执行。

2.wait()方法

在其他线程调用对象的notify或notifyAll方法前，导致当前线程等待。线程会释放掉它所占有的“锁标志”，从而使别的线程有机会抢占该锁。

当前线程必须拥有当前对象锁。如果当前线程不是此锁的拥有者，会抛出IllegalMonitorStateException异常。

唤醒当前对象锁的等待线程使用notify或notifyAll方法，也必须拥有相同的对象锁，否则也会抛出IllegalMonitorStateException异常。

waite()&nbsp;和notify()必须在synchronized函数或synchronized　block中进行调用。如果在non-synchronized函数或non-synchronized　block中进行调用，虽然能编译通过，但在运行时会发生&nbsp;IllegalMonitorStateException的异常。

3.yield方法

暂停当前正在执行的线程对象。

yield()只是使当前线程重新回到可执行状态，所以执行yield()的线程有可能在进入到可执行状态后马上又被执行。

yield()只能使同优先级或更高优先级的线程有执行的机会。

4.join方法

等待该线程终止。

等待调用join方法的线程结束，再继续执行。如：t.join();//主要用于等待t线程运行结束，若无此句，main则会执行完毕，导致结果不可预测。广州疯狂JAVA培训]]></description>
		<author><![CDATA[soso爱好者]]></author>
		<pubDate>2012-05-25 17:05:00</pubDate>
		</item>
				<item>
		<title><![CDATA[移动趋势报告：Android热情减退&nbsp;云服务受青睐]]></title>
		<link>http://blog.pfan.cn/fkjava/53489.html</link>
		<description><![CDATA[据国外媒体报道，跨平台程序开发商Appcelerator和市场调研机构IDC联合发布的移动行业趋势季度报告显示，移动开发者对谷歌旗下不同服务的网络效应更感兴趣，但是对于Android平台的开发热情却正在减退。另外报告显示，HTML5还远远没有普及，云服务受到越来越多开发者的青睐，移动行业也从“探索”阶段走到了“加速发展”时期。


	谷歌和Facebook正在进行一场争夺用户对互联网关注的战争。这不仅仅是Google+与Facebook吸引多少眼球的争夺，而且是一场终端对终端（end-to-end）平台的竞争，这包括信息、应用开发、社交图谱以及内容等。所科技领域的其它竞争一样，这场斗争也转向了移动领域。在开发社交移动应用方面，谷歌或许比外界做得更好。


	根据Appcelerator和IDC发布的报告，39%的开发人员认为，谷歌的总体资产比Facebook的社交图谱更加重要。Facebook在社交领域具有绝对的领先优势，而这个结论显然可以说是谷歌发起的巧妙反击。


	2012年伊始，开发人员还对哪些方面感兴趣？HTML5正在发展，云服务成为热门，而开发者对Android的兴趣正在减退。


	谷歌与Facebook之对比 


	开发人员对谷歌社交资产的兴趣其实与Google+没有太大关系，而是与谷歌旗下服务的网络效应密切联系，也就是谷歌的总资产与Facebook社交图谱的比较。谷歌拥有搜索、YouTube视频、Gmail电子邮件、谷歌地图、Android Market应用商店、Google Play商店、谷歌Docs、AdMob广告平台以及Google+社交服务。而Facebook拥有社交图谱及其开放图谱，大量的用户数据，一个广告平台以及4.25亿移动用户。


	34%的受访者表示，他们并不完全理解Facebook的移动战略。对于这家即将启动IPO的公司来说，这是一个令人沮丧的比例。诚然，61%的开发者仍然对Facebook的社交移动应用更感兴趣，但其中90%的开发者表示，这是因为该平台现有的巨大用户基础。


	 


	61%的开发者仍然对Facebook的社交移动应用更感兴趣（腾讯科技配图） 


	Appcelerator首席移动战略家、前Gartner移动分析师迈克·金（Mike King]]></description>
		<author><![CDATA[soso爱好者]]></author>
		<pubDate>2012-05-25 17:04:00</pubDate>
		</item>
				<item>
		<title><![CDATA[IT专业人士口碑差的十大原因&nbsp;广州疯狂java培训]]></title>
		<link>http://blog.pfan.cn/fkjava/53488.html</link>
		<description><![CDATA[&nbsp;&nbsp;&nbsp;IT 从业人员常常日夜操劳，整体与机器和代码为伍，号称码农，可是为什么在某些人那里却得不到好口碑呢？TR 的 Alan Norton 列举了十大缘由，请诸位给评评看，是不是这个道理。

	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1：报酬丰厚惹人嫌 


	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IT 属于高薪行业是普遍共识（在中国未必如此？）。在美国，其薪资水平仅次于管理和法律专业。但是对于其他职业中赚得少的人来说。有的也许就会认为这样对自己不公平。在往往以金钱衡量个人价值的社会里，这会给别的职业的自我意识造成打击。


	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2：问题响应不及时 


	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;办公系统或者秘书的电脑宕机时，肯定需要尽快能修好。但有时候 IT 工程师就像酷热夏日里的空调维修员一样，手上的单子太多，客户必须排队等。但是，对于关键系统来说，哪怕几分钟的宕机时间也是不能忍受的。


	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3：尝试不可能任务 


	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;医生不可能通过电话对病人做出诊断，但这就是 IT 支持人员每天都在做的事情。对问题知之甚少的客户指望你通过电话就能远程诊断和修复问题。Alan 拿自己的老爹作为例子，说他曾花了 4 个多小时与 IT 支持人员通话来解决一个问题。这个过程令双方都沮丧不已，在无法直接接触到客户硬件的情况下，有时候问题的解决就相当于一个不可能完成的任务—哪怕你的耐 心和奉献精神再高 。如果你曾试过在电话上通话一个多小时来试图解决问题，你就会理解为什么技术支持人员常常被骂了。从短期看，这种情况仍难以得到改善，除非 IT 学会了如何更简便地收集相关信息。


	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]]></description>
		<author><![CDATA[soso爱好者]]></author>
		<pubDate>2012-05-25 17:03:00</pubDate>
		</item>
				<item>
		<title><![CDATA[Java&nbsp;枚举使用小技巧&nbsp;&nbsp;广州JAVA培训]]></title>
		<link>http://blog.pfan.cn/fkjava/53483.html</link>
		<description><![CDATA[Java 枚举使用小技巧 
								
							
							
								
									&nbsp;
								
							
							
								&nbsp;
							
							
								
									下载源代码 
								
							
						
					
				
				
					
〖 作者：lihzh 〗〖 大小：200k 〗〖 发布日期：2012-02-23 〗〖 浏览：1 〗

				
			
		
		
			
				
					
						
							


								
									
										
										
									
								
							
						
						
							
								
									&nbsp;&nbsp;最近用到枚举，由于枚举变量比较多且存在一定的分组分类的关系，所以想能比较清晰的维护这些变量。今晚有空，简单研究了一下，分享出来，供大家讨论。
								
								
									可供考虑的分类方式
								
    /** 
     * 枚举接口 
     *  
     * @author lihzh(苦逼coder) 
     * @data 2012-2-21 下午8:51:39 
     */ 
    public interface EnumInter { 
     
        public enum EnumB implements EnumInter{ 
            B1, B2, B3; 
            public enum EnumSubB implements EnumInter{ 
                C1, C2, C3 
            } 
        } 
    } 
调用方式和一些其他]]></description>
		<author><![CDATA[soso爱好者]]></author>
		<pubDate>2012-05-23 13:57:00</pubDate>
		</item>
				<item>
		<title><![CDATA[java新手求解编译问题]]></title>
		<link>http://blog.pfan.cn/fkjava/53482.html</link>
		<description><![CDATA[public&nbsp;class&nbsp;lmy_29&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main&nbsp;(String&nbsp;args[]){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boolean&nbsp;a[]=new&nbsp;boolean[500];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i=0;i&lt;a.length;i++){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a[i]=true;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;number=a.length;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;index=0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;count=0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(a.length&gt;1){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(a[index]==true){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count++;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs]]></description>
		<author><![CDATA[soso爱好者]]></author>
		<pubDate>2012-05-23 13:55:00</pubDate>
		</item>
				<item>
		<title><![CDATA[成为java高手的八大条件&nbsp;广州疯狂JAVA培训]]></title>
		<link>http://blog.pfan.cn/fkjava/53481.html</link>
		<description><![CDATA[世界上并没有成为高手的捷径，但一些基本原则是可以遵循的。&nbsp;&nbsp;

1、扎实的基础&nbsp;&nbsp;


　　数据结构、离散数学、编译原理，这些是所有计算机科学的基础，如果不掌握它们，很难写出高水平的程序。程序人人都会写，但当你发现写到一定程度很难再提高的时候，就应该想想是不是要回过头来学学这些最基本的理论。不要一开始就去学OOP，即使你再精通OOP，遇到一些基本算法的时候可能也会束手无策。因此多读一些计算机基础理论方面的书籍是非常有必要的。&nbsp;&nbsp;



2、丰富的想像力&nbsp;&nbsp;



　　不要拘泥于固定的思维方式，遇到问题的时候要多想几种解决问题的方案，试试别人从没想过的方法。丰富的想像力是建立在丰富的知识的基础上，除计算机以外，多涉猎其他的学科，比如天文、物理、数学等等。开阔的思维对程序员来说很重要。&nbsp;&nbsp;



3、最简单的是最好的&nbsp;&nbsp;



　　这也许是所有科学都遵循的一条准则，复杂的质能转换原理在爱因斯坦眼里不过是一个简单得不能再简单的公式：E=mc2。简单的方法更容易被人理解，更容易实现，也更容易维护。遇到问题时要优先考虑最简单的方案，只有简单方案不能满足要求时再考虑复杂的方案。&nbsp;&nbsp;



4、不钻牛角尖&nbsp;&nbsp;



　　当你遇到障碍的时候，不妨暂时远离电脑，看看窗外的风景，听听轻音乐，和朋友聊聊天。当我遇到难题的时候会去玩游戏，当负责游戏的那部分大脑细胞极度亢奋的时候，负责编程的那部分大脑细胞就得到了充分的休息。当重新开始工作的时候，我会发现那些难题现在竟然可以迎刃而解。&nbsp;&nbsp;



　　5、对答案的渴求&nbsp;&nbsp;



　　人类自然科学的发展史就是一个渴求得到答案的过程，即使只能知道答案的一小部分也值得我们去付出。只要你坚定信念，一定要找到问题的答案，你才会付出精力去探索，即使最后没有得到答案，在过程中你也会学到很多东西。&nbsp;&nbsp;



　　6、多与别人交流&nbsp;&nbsp;



　　三人行必有我师，也许在一次和别人不经意的谈话中，就可以迸出灵感的火花。多上上网，看看别人对同一]]></description>
		<author><![CDATA[soso爱好者]]></author>
		<pubDate>2012-05-23 13:52:00</pubDate>
		</item>
				<item>
		<title><![CDATA[Java线程基本概念]]></title>
		<link>http://blog.pfan.cn/fkjava/53480.html</link>
		<description><![CDATA[1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 概念：
程序：一段静态代码，是应用软件执行的蓝本。
进程：是程序的一次动态执行，对应从代码的加载，执行至执行完毕的一个完整过程，这个过程也是进程本身从产生、发展到消亡的过程。
线程：是比进程更小的单位，一个进程在执行过程中，可以产生多个线程，形成多条执行线索，每个线程都有它自身的产生、存在和消亡的过程，是一个动态概念。
多线程：同时存在几个执行体，按几条不同的执行线索共同工作的情况。这可能会给人一种错觉：几个事件同时发生。但是不要忘了：任意时刻只能执行其中一个线程。
进一步了解线程和进程：操作系统采用分时管理各个进程，按时间片轮流执行每个进程。JAVA的多线程就是操作系统每次分时给JAVA程序一个时间片的CPU时间内，在若干个可独立控制的线程之间切换。若计算机有多个处理器，若JVM能充分利用这些CPU，那么程序在同一时刻就能获得多个时间片，程序就可以获得真实的同步线程执行效果。
每个进程都有一段专用的内存区域。与此不同的是线程间可以共享相同的内存单元，包括代码和数据，并充分利用这些共享单元实现数据交换、实时通信和必要的同步操作。
Java总是从main方法入口执行程序，这就启动一个线程，称为主线程，主线程中可以创建其他线程。如果Main方法中没有其它线程，当main方法返回时，JVM就结束JAVA程序；当MAIN方法中有其它线程时，那么JVM就要在主线程和其它线程间轮流切换。保证每个线程都能机会使用CPU资源，mian方法即使执行完最后一句，JVM也不会结束该程序，一直等到主线程中所有线程都结束后，才结束该JAVA应用程序。
2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 线程的状态和生命周期
a)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 新建
当一个thread类或其子类的对象被声明并创建时，新生的线程线程对象处于新建状态。此时它有了相应的内存空间和资源，并被初始化
b)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;就绪
处于新建状态的线程被启动，进入线程队列排队等候CPU时间片，此时它已经具备运行条件，一旦轮到它享有cpu]]></description>
		<author><![CDATA[soso爱好者]]></author>
		<pubDate>2012-05-23 13:49:00</pubDate>
		</item>
				<item>
		<title><![CDATA[浅谈Java线程的生命周期]]></title>
		<link>http://blog.pfan.cn/fkjava/53479.html</link>
		<description><![CDATA[创建Java线程
在Java程序中创建线程有几种方法。每个Java程序至少包含一个线程：主线程。其它线程都是通过Thread构造器或实例化继承类Thread的类来创建的。
51CTO编辑推荐：广州JAVA培训
Java线程可以通过直接实例化Thread对象或实例化继承Thread的对象来创建其它线程。在线程基础中的示例（其中，我们在十秒钟之内计算尽量多的素数）中，我们通过实例化CalculatePrimes类型的对象（它继承了Thread），创建了一个线程。
当我们讨论Java程序中的线程时，也许会提到两个相关实体：完成工作的实际线程或代表线程的Thread对象。正在运行的线程通常是由操作系统创建的；Thread对象是由JavaVM创建的，作为控制相关线程的一种方式。
创建线程和启动线程并不相同
在一个线程对新线程的Thread对象调用start()方法之前，这个新线程并没有真正开始执行。Thread对象在其线程真正启动之前就已经存在了，而且其线程退出之后仍然存在。这可以让您控制或获取关于已创建的线程的信息，即使线程还没有启动或已经完成了。
通常在构造器中通过start()启动线程并不是好主意。这样做，会把部分构造的对象暴露给新的线程。如果对象拥有一个线程，那么它应该提供一个启动该线程的start()或init()方法，而不是从构造器中启动它。（请参阅参考资料，获取提供此概念更详细说明的文章链接。）
结束Java线程
Java线程会以以下三种方式之一结束：
Java线程到达其run()方法的末尾。
Java线程抛出一个未捕获到的Exception或Error。
另一个Java线程调用一个弃用的stop()方法。弃用是指这些方法仍然存在，但是您不应该在新代码中使用它们，并且应该尽量从现有代码中除去它们。
当Java程序中的所有线程都完成时，程序就退出了。
加入Java线程
ThreadAPI包含了等待另一个线程完成的方法：join()方法。当调用Thread.join()时，调用线程将阻塞，直到目标线程完成为止。
Thread.join()通常由使用线程的程序使用，以将大问题划分成许多小问题，每个小问题分配一个线程。本章结尾处的示例创建了十个线程，启动它们，然后使用Thread.join()等待它们全部完成。
Java线程调度
除了]]></description>
		<author><![CDATA[soso爱好者]]></author>
		<pubDate>2012-05-23 13:47:00</pubDate>
		</item>
				<item>
		<title><![CDATA[java编程之银行调度系统]]></title>
		<link>http://blog.pfan.cn/fkjava/53470.html</link>
		<description><![CDATA[这个程序和前一个又不是相似之处，所以在看张孝祥老师的视频之前自己先试着做了一下，结果一做不要紧，从下午2:00多做到晚上快十点了。速度很慢，主要是设计经验不足，很多东西都得摸索，还有些不知道该怎么选择。但所幸最终还是做出来了。&nbsp;&nbsp;&nbsp; 主要用到三个类：WIndow,Consumer,BankSystem
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; Window:
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; 主要用于对六个窗口的描述，里面提供了private String type;private String index;private boolean busy&nbsp; = false;这些成员变量，还有work（），及stop（）方法。&nbsp;广州疯狂JAVA
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; Consumer:
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; 主要是提供了一个增加元素的方法addConsumer（），同时提供三个集合装三种Consumer.
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; BankSystem:
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; 主调类。分别new了六个Window对象，和三个Consumer对象。所以相当于开启了9个线程。
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; BankSystem
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; import java.util.*;import java.util.Random;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class BankDispatch {&nbsp; ArrayList&lt;Window&gt; windowLiabrary = Window.windowLiabrary;&nb]]></description>
		<author><![CDATA[soso爱好者]]></author>
		<pubDate>2012-05-21 18:23:00</pubDate>
		</item>
				<item>
		<title><![CDATA[JVM平台开发语言&nbsp;一直在流行]]></title>
		<link>http://blog.pfan.cn/fkjava/53469.html</link>
		<description><![CDATA[关于JVM平台开发语言一直是Java开发者茶余饭后的一个热门话题，JVM作为一种机制用以提供应用在不同的环境，其他平台以及不同硬件上的可移植性，而基于JVM平台的编程语言也是不断的在增加。从动态语言如Groovy、JRuby, Jython到静态型Scala语言， JVM也正成为一个多元化的平台，开发人员可以充分利用不同语言来满足各自不同的需求。
&nbsp;&nbsp;&nbsp;

	 

&nbsp;
&nbsp;&nbsp;&nbsp; 从本月的编程语言排行榜上我们可以看出，本次最受欢迎的5种编程语言中3种就属基于JVM平台开发的编程语言。这也意味着开发者对JVM平台开发语言的关注、使用也不断的增加。为什么JVM的编程语言会如此受到开发者的青眯？下面我们从JVM平台的3点特性进行分析。
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; 动态语言支持
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; 从SE 6开始就是对动态语言的支持，动态语言逐渐成为许多Java开发者应用开发日常工作的一部分，并常常用于原型开发或用来提高开发速度。为了快速得到更大规模的Java应用程序，人们一直在使用动态语言胶合程序部件。
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; 事实上，任何可以使用有效class 文件表述的功能性语言，都可以运行在JVM上。动态语言的灵活性，尤其是脚本语言，对于实验性、原型应用程序以及需频繁更新的程序，都具有独特的吸引力。
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; Java开发人员也可以使用动态语言进行部分编程，然后将这部分代码转换成Java,或继续用Java来开发程序中更为健壮、生命力更强的部分，其他代码则可以通过更加动态的语言来进行开发。动态类型固有的灵活性与JVM的执行效率，合二为一。很明显，这就是它能够吸引动态编程语言创建者以及使用这些语言构建应用程序的开发者的原因。
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; 跨平台性
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; 如果单单说JVM支持动态语言编程就能够吸引更多的开发者那]]></description>
		<author><![CDATA[soso爱好者]]></author>
		<pubDate>2012-05-21 16:52:00</pubDate>
		</item>
				<item>
		<title><![CDATA[Java编程中“为了性能”要做的几点]]></title>
		<link>http://blog.pfan.cn/fkjava/53468.html</link>
		<description><![CDATA[&nbsp;最近的机器内存又爆满了，除了新增机器内存外，还应该好好review一下我们的代码，有很多代码编写过于随意化，这些不好的习惯或对程序语言的不了解是应该好好打压打压了。
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; 下面是参考网络资源总结的一些在Java编程中尽可能要做到的一些地方。
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; 1. 尽量在合适的场合使用单例
&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; 2. 尽量避免随意使用静态变量
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; 要知道，当某个对象被定义为stataic变量所引用，那么gc通常是不会回收这个对象所占有的内存，如
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; public class A{&nbsp; static B b = new B（）；&nbsp; } 此时静态变量b的生命周期与A类同步，如果A类不会卸载，那么b对象会常驻内存，直到程序终止。
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; 3. 尽量避免过多过常的创建Java对象
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; 尽量避免在经常调用的方法，循环中new对象，由于系统不仅要花费时间来创建对象，而且还要花时间对这些对象进行垃圾回收和处理，在我们]]></description>
		<author><![CDATA[soso爱好者]]></author>
		<pubDate>2012-05-21 16:41:00</pubDate>
		</item>
				<item>
		<title><![CDATA[解读Java环境变量配置]]></title>
		<link>http://blog.pfan.cn/fkjava/53467.html</link>
		<description><![CDATA[&nbsp;1、查看当前可用的所有环境变量（=系统变量+用户变量）
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; set
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; 查看某个环境变量，如PATH
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; set PATH
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; 添加环境变量，如xxx=aa
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; set xxx=aa
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; 将环境变量（如xxx）的值置为空
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; set xxx=
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; 在某个环境变量（如PATH）后添加新的值（如d:\xxx）
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; set PATH=%PATH%;d:\xxx
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; [注]:以命令行方式对环境变量的操作只对当前窗口的应用有效！
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; 2、Windows下JAVA用到的环境变量主要有3个：JAVA_HOME、CLASSPATH、PATH.
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; 1）JAVA_HOME指向的是JDK的安装路径，如x:\ j2sdk1.4.2,在这路径下你应该能够找到bin、lib等目录。设置方法：JAVA_HOME=c:\ j2sdk1.4.2
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; 2）PATH变量的作用
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; java程序在运行时首先在path变量所定义的路径去找java.exe,并以最先找到的为准，如果安装完j2sdk后不加设置，一般是C:\WI]]></description>
		<author><![CDATA[soso爱好者]]></author>
		<pubDate>2012-05-21 16:39:00</pubDate>
		</item>
				<item>
		<title><![CDATA[java&nbsp;设计模式之责任链模式]]></title>
		<link>http://blog.pfan.cn/fkjava/53466.html</link>
		<description><![CDATA[不知道大家都写过宏没有，就是一个键绑定多个技能。如果排在前面的技能有CD,则跳过此技能，会执行之后的技能。记得曾经玩DK,打怪的时候，就是用一个键，一直按就行了。在servlet里的doGet和doPost方法，我们一把都把doGet请求发动到doPost里来处理，这也是一种责任链的模式。
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; 这里，有个宏，绑定了 冰血冷脉和寒冰箭，两个技能：
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; package responsibility;/** * DOC 技能接口，要绑定的技能都要实现这个接口 * */public interface ISkill { public void castSkill（）；}
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; package responsibility;import java.util.ArrayList;import java.util.List;/** * DOC 宏类，用来把多个技能绑在一起，实现一键施放 * */public class Macro { /** * DOC 多个技能绑在一起的集合 */ public List&lt;ISkill&gt; skills = new ArrayList&lt;ISkill&gt;（）； /** * * DOC 按照绑定顺序施放技能。 */ public void castSkill（） { for （int i = 0; i &lt; skills.size（）； i++） { skills.get（i）。castSkill（）； } } /** * DOC 绑定技能。 * * @param skill */ public void bindSkill（ISkill skill） { skills.add（skill）； }}
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; package responsibility;/** * DOC 寒冰箭技能，无冷却时间 * */public class IceArrow implements ISkill { @Override public vo]]></description>
		<author><![CDATA[soso爱好者]]></author>
		<pubDate>2012-05-21 16:38:00</pubDate>
		</item>
		</channel>
</rss>