??xml version="1.0" encoding="utf-8" standalone="yes"?>国产国拍亚洲精品福利,亚洲乱码在线观看,亚洲s色大片在线观看http://www.tkk7.com/4cai/category/54350.html壮不努力,老大写程序?/description>zh-cnSun, 08 Jun 2014 02:28:58 GMTSun, 08 Jun 2014 02:28:58 GMT60JVM中finally子句介绍http://www.tkk7.com/4cai/archive/2014/06/08/414503.htmlRolandzRolandzSat, 07 Jun 2014 18:42:00 GMThttp://www.tkk7.com/4cai/archive/2014/06/08/414503.htmlhttp://www.tkk7.com/4cai/comments/414503.htmlhttp://www.tkk7.com/4cai/archive/2014/06/08/414503.html#Feedback0http://www.tkk7.com/4cai/comments/commentRss/414503.htmlhttp://www.tkk7.com/4cai/services/trackbacks/414503.html
finally子句

JVM执行Java字节码时Q它有几U方式可以退Z个代码块Q花括号中间的语句)。其中之一Q就是简单的执行完其中所有的语句Q然后退Z码块。第二种QJVM可能会在代码块中间的M一处,遇到像breakQcontinueQreturn之类的语句,强制它蟩代码块。第三种QJVM可能会在执行q程中,出现了异常,然后它蟩转到匚w的catch子句Q或者没有找到相应的catch子句Q直接退出当前线E。由于单个代码块有如此多的潜在退出点Qexit pointQ,拥有一个简单的方式来表䏀无Z码块以什么方式退出,有些事情总能发生”是很值得的。然后就有了try-finally子句?nbsp; 阅读全文

Rolandz 2014-06-08 02:42 发表评论
]]>
JVM中的异常处理http://www.tkk7.com/4cai/archive/2014/06/02/414314.htmlRolandzRolandzSun, 01 Jun 2014 19:54:00 GMThttp://www.tkk7.com/4cai/archive/2014/06/02/414314.htmlhttp://www.tkk7.com/4cai/comments/414314.htmlhttp://www.tkk7.com/4cai/archive/2014/06/02/414314.html#Feedback0http://www.tkk7.com/4cai/comments/commentRss/414314.htmlhttp://www.tkk7.com/4cai/services/trackbacks/414314.htmlƢ迎来到“Under The Hood”W六期。本期我们介l?a title="jvm中的异常处理" target="_blank" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; outline: none; color: #21759b;">JVM处理异常的方?/a>Q包括如何抛出和捕获异常及相关的字节码指令。但本文不会讨论finally子句Q这是下期的主题。你可能需要阅?a title="under the hood" target="_blank" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; outline: none; color: #21759b;">往?/a>的文章才能更好的理解本文?/em>

异常处理

在程序运行时Q异常让你可以^滑的处理意外状况。ؓ了演CJVM处理异常的方式,考虑NitPickyMathc,它提供对整数q行加,减,乘,除以及取余的操作?br />

NitPickyMath提供的这些操作和Java语言?#8220;+”Q?#8220;-”Q?#8220;*”Q?#8220;/”?#8220;%”是一LQ除了NitPickyMath中的Ҏ在以下情况下会抛出检查型QcheckedQ异常:上溢出,下溢Z及被0除?做除数时QJVM会抛出ArithmeticException异常Q但是上溢出和下溢出不会引发M异常。NitPickyMath中抛出异常的Ҏ定义如下Q?/p>

  1. class OverflowException extends Exception {
  2. }
  3. class UnderflowException extends Exception {
  4. }
  5. class DivideByZeroException extends Exception {
  6. }

NitPickyMathcM的remainder()Ҏ是一个抛出和捕获异常的简单方法?/p>

  1. static int remainder(int dividend, int divisor)
  2.     throws DivideByZeroException {
  3.     try {
  4.         return dividend % divisor;
  5.     }
  6.     catch (ArithmeticException e) {
  7.         throw new DivideByZeroException();
  8.     }
  9. }

remainder()ҎQ只是简单的对当作参C递进来的2个整数进行取余操作。如果取余操作的除数?Q会引发ArithmeticException异常。remainder()Ҏ捕获q个异常Qƈ重新抛出DivideByZeroException异常?/p>

DivideByZeroException和ArithmeticException的区别是QDivideByZeroException是检查型QcheckedQ异常,而ArithmeticException是非查(uncheckedQ型异常。由于ArithmeticException是非查型异常Q一个方法就会抛出该异常,也不必在其throw子句中声明它。Q何Error或RuntimeException异常的子cd帔R是非查型异常。(ArithmeticException是RuntimeException的子cR)通过捕获ArithmeticException和抛出DivideByZeroExceptionQremainder()Ҏ它的调用者去处理除数?的可能性,要么捕获它,要么在其throw子句中声明DivideByZeroException异常。这是因为,像DivideByZeroExceptionq种在方法中抛出的检查型异常Q要么在Ҏ中捕P要么在其throw子句中声明,二者必选其一。而像ArithmeticExceptionq种非检查型异常Q就不需要去昑ּ捕获和声明?/p>

javac为remainder()Ҏ生成的字节码序列如下Q?/p>

  1. // The main bytecode sequence for remainder:
  2. 0 iload_0               // Push local variable 0 (arg passed as divisor)
  3. 1 iload_1               // Push local variable 1 (arg passed as dividend)
  4. 2 irem                  // Pop divisor, pop dividend, push remainder
  5. 3 ireturn               // Return int on top of stack (the remainder)
  6. // The bytecode sequence for the catch (ArithmeticException) clause:
  7. 4 pop                   // Pop the reference to the ArithmeticException
  8.                         // because it is not used by this catch clause.
  9. 5 new #5 < Class DivideByZeroException >
  10.                         // Create and push reference to new object of class
  11.                         // DivideByZeroException.
  12. 8 dup                   // Duplicate the reference to the new
  13.                         // object on the top of the stack because it
  14.                         // must be both initialized
  15.                         // and thrown. The initialization will consume
  16.                         // the copy of the reference created by the dup.
  17. 9 invokenonvirtual #9 < Method DivideByZeroException.< init >()V >
  18.                         // Call the constructor for the DivideByZeroException
  19.                         // to initialize it. This instruction
  20.                         // will pop the top reference to the object.
  21. 12 athrow               // Pop the reference to a Throwable object, in this
  22.                         // case the DivideByZeroException,
  23.                         // and throw the exception.

remainder()Ҏ的字节码?个单独的部分。第一部分是该Ҏ的正常执行\径,q部分从W?行开始,到第3行结束。第二部分是从第4行开始,?2行结束的catch子句?/p>

d节码序列中的irem指o可能会抛出ArithmeticException异常。如果异常发生了QJVM通过在异常表中查扑֌配的异常Q它会知道要跌{到相应的异常处理的catch子句的字节码序列部分。每个捕获异常的ҎQ都跟类文g中与Ҏ字节码一起交付的异常表关联。每一个捕获异常的try块,都是异常表中的一行。每?条信息:开始行PfromQ和l束行号QtoQ,要蟩转的字节码序列行PtargetQ,被捕L异常cȝ帔R池烦引(typeQ。remainder()Ҏ的异常表如下所C:

FROM
TO
TARGET
TYPE
0 4 4 < Class java.lang.ArithmeticException >

上面的异常表表明Q行??范围内,ArithmeticException被捕获。异常表中的“to”下面的结束行号始l比异常捕获的最大行号大1Q上表中Q结束行号ؓ4Q而异常捕L最大行h3。行??的字节码序列对应remainder()Ҏ中的try块?#8220;target”列中Q是??的字节码发生ArithmeticException异常时要跌{到的目标行号?/p>

如果Ҏ执行q程中生了异常QJVM会在异常表中查找匚w行。异常表中的匚w行要W合下面的条Ӟ当前pc寄存器的D在该行的表示范围之内Q[from, to)Q且产生的异常是该行所指定的异常类或其子类。JVM按从上到下的ơ序查找异常表。当扑ֈ了第一个匹配行QJVM把pc寄存器设为新的蟩转行P从此行l往下执行。如果找不到匚w行,JVM弹出当前栈Qƈ重新抛出同一个异常。当JVM弹出当前栈Ӟ它会l止当前Ҏ的执行,q回到调用该Ҏ的上一个方法那里。这Ӟ在上一个方法里Qƈ不会l箋正常的执行过E,而是抛出同样的异常,促JVM重新查找该方法的异常表?/p>

JavaE序员可以用throw语句抛出像remainder()Ҏ的catch子句中的异常QDivideByZeroException。下表列Z抛出异常的字节码Q?/p>
OPCODE
OPERAND(S)
DESCRIPTION
athrow (none) pops Throwable object reference, throws the exception

athrow指o把栈元素弹出,该元素必LThrowable的子cL其自w的对象引用Q而抛出的异常cd由栈弹出的对象引用所指明?/p>

本文译自Q?a target="_blank" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; outline: none; color: #21759b;">How the Java virtual machine handles exceptions



Rolandz 2014-06-02 03:54 发表评论
]]>
对象和数l:JVM中,处理对象和数l的字节码介l?/title><link>http://www.tkk7.com/4cai/archive/2014/05/30/414259.html</link><dc:creator>Rolandz</dc:creator><author>Rolandz</author><pubDate>Thu, 29 May 2014 18:14:00 GMT</pubDate><guid>http://www.tkk7.com/4cai/archive/2014/05/30/414259.html</guid><wfw:comment>http://www.tkk7.com/4cai/comments/414259.html</wfw:comment><comments>http://www.tkk7.com/4cai/archive/2014/05/30/414259.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/4cai/comments/commentRss/414259.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/4cai/services/trackbacks/414259.html</trackback:ping><description><![CDATA[     摘要: Ƣ迎来到“Under The Hood”W五期。本期我们来看看JVM中处理对象和数组的字节码。你可能需要阅d期的文章才能更好的理解本文?面向对象的机?JVM中的数据?UŞ式:对象QobjectQ,对象引用Qobject referenceQ和原始cdQprimitive typeQ。对象存攑֜垃圾攉堆中Q对象引用和原始cdQ根据它们作用域范围的不同,分别存放?..  <a href='http://www.tkk7.com/4cai/archive/2014/05/30/414259.html'>阅读全文</a><img src ="http://www.tkk7.com/4cai/aggbug/414259.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/4cai/" target="_blank">Rolandz</a> 2014-05-30 02:14 <a href="http://www.tkk7.com/4cai/archive/2014/05/30/414259.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>初窥JVM点q算http://www.tkk7.com/4cai/archive/2014/05/26/414118.htmlRolandzRolandzMon, 26 May 2014 07:09:00 GMThttp://www.tkk7.com/4cai/archive/2014/05/26/414118.htmlhttp://www.tkk7.com/4cai/comments/414118.htmlhttp://www.tkk7.com/4cai/archive/2014/05/26/414118.html#Feedback1http://www.tkk7.com/4cai/comments/commentRss/414118.htmlhttp://www.tkk7.com/4cai/services/trackbacks/414118.html阅读全文

Rolandz 2014-05-26 15:09 发表评论
]]>
字节码基QJVM字节码初?/title><link>http://www.tkk7.com/4cai/archive/2014/05/22/413950.html</link><dc:creator>Rolandz</dc:creator><author>Rolandz</author><pubDate>Wed, 21 May 2014 18:07:00 GMT</pubDate><guid>http://www.tkk7.com/4cai/archive/2014/05/22/413950.html</guid><wfw:comment>http://www.tkk7.com/4cai/comments/413950.html</wfw:comment><comments>http://www.tkk7.com/4cai/archive/2014/05/22/413950.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.tkk7.com/4cai/comments/commentRss/413950.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/4cai/services/trackbacks/413950.html</trackback:ping><description><![CDATA[     摘要: 字节码是JVM的机器语a。JVM加蝲cL件时Q对cM的每个方法,它都会得C个字节码。这些字节码保存在JVM的方法区中。在E序q行q程中,当一个方法被调用Ӟ它的字节码流׃被执行。根据特定JVM设计者的选择Q它们可以通过解释的方式,x~译QJust-in-time compilationQ的方式或其他技术的方式被执行?nbsp; <a href='http://www.tkk7.com/4cai/archive/2014/05/22/413950.html'>阅读全文</a><img src ="http://www.tkk7.com/4cai/aggbug/413950.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/4cai/" target="_blank">Rolandz</a> 2014-05-22 02:07 <a href="http://www.tkk7.com/4cai/archive/2014/05/22/413950.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavacL件的基本l构http://www.tkk7.com/4cai/archive/2014/05/19/413821.htmlRolandzRolandzSun, 18 May 2014 19:49:00 GMThttp://www.tkk7.com/4cai/archive/2014/05/19/413821.htmlhttp://www.tkk7.com/4cai/comments/413821.htmlhttp://www.tkk7.com/4cai/archive/2014/05/19/413821.html#Feedback2http://www.tkk7.com/4cai/comments/commentRss/413821.htmlhttp://www.tkk7.com/4cai/services/trackbacks/413821.html阅读全文

Rolandz 2014-05-19 03:49 发表评论
]]>
短小_悍的虚拟机QJVM基本l构和功能介l?/title><link>http://www.tkk7.com/4cai/archive/2014/05/17/413789.html</link><dc:creator>Rolandz</dc:creator><author>Rolandz</author><pubDate>Sat, 17 May 2014 13:50:00 GMT</pubDate><guid>http://www.tkk7.com/4cai/archive/2014/05/17/413789.html</guid><wfw:comment>http://www.tkk7.com/4cai/comments/413789.html</wfw:comment><comments>http://www.tkk7.com/4cai/archive/2014/05/17/413789.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/4cai/comments/commentRss/413789.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/4cai/services/trackbacks/413789.html</trackback:ping><description><![CDATA[<em>Ƣ迎来到“<a ><span style="color: #0000ff;">Under The Hood</span></a>”W一期。本期,我将l出JVM的基本结构和功能介绍? </em> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;"><em style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;"><strong style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">什么是JVMQؓ什么要有它Q?/strong></em></p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;">JVMQJava虚拟机)是一个运行已~译JavaE序的抽象计机。之所以说?#8221;虚拟“的,是因为它Z“真正”的硬件^台和操作pȝQ一般以软g的Ş式实现。所有的JavaE序都ؓJVM而编译。因此,在特定^Cq行已编译JavaE序之前Q该q_的JVM必须先要被实现?/p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;">JVM在Java的跨q_Ҏ中Qv着中间人的角色。它在已~译JavaE序与底层硬件^台和操作pȝ之间Q提供一个抽象层。JVM对Java的可UL性非常关键,因ؓQ已~译JavaE序q行在JVM之上Qƈ独立于底层JVM的具体实现?/p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;">那么Q是什么导致JVM的短精悍?当被实现成Y件时QJMV很小巧。它被设计成q样Q是Z让它能够适用于尽可能多的地方Q比如机盒Q手机和个h电脑。JVM很精悍,是因为它的野心?#8221;无处不在Q?#8220;是它的战斗口受它惌无处不在Qƈ且JavaE序”一ơ编写,到处q行“的程度说明了它的成功?br /> </p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;"><em style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;"><strong style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">Java字节?/strong></em></p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;">JavaE序被编译成一U叫做字节码的东东。JVM执行Java字节码,所以字节码可以被认为是JVM的机器语a。Java~译器读取Java源文Ӟ把它译成Java字节码ƈ保存到类文gQ?class文gQ中。编译器会ؓ源码中的每一个类生成一个类文g?/p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;">对JVM来说Q字节码就是指令序列。每条指令包含一个单字节的操作码和零个或多个操作数。操作码告诉JVM要执行的操作。如果JVM需要除操作码之外更多的信息L行一Ҏ作,那么Q需要的信息作ؓ操作敎ͼ紧跟在操作码之后?/p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;">每个字节码都有一个助记符Q它可被当作JVM的汇~语a。例如,有个指o会让JVM?压到堆栈中。该指o的助记符是iconst_0Q字节码值是0×60。该指o没有操作数。另一个指令让E序的执行在内存中无条g向前向后跌{。这个指令需要一个操作数Q它是一个指明从当前内存地址开始的2字节无符号偏U量。通过把偏U量加到当前内存地址QJVM可以获得要蟩转的目标内存地址。该指o的助记符是gotoQ它的字节码值是0xa7?/p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;"><em style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;"><strong style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">虚拟部分</strong></em></p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;">JVM?#8220;虚拟g”可以分ؓ四个部分Q寄存器l,栈区Q垃圾收集堆和方法区。这些部分很抽象Q就像由它们l成的虚拟机一P但是它们必须在每个JVM的实CQ以某种形式存在?/p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;">JVM中地址的是32位(4字节Q的Q因此,JVM可以处理4GBQ??2ơ方Q的内存。栈区,垃圾攉堆和Ҏ区处在这4GB内存中的某个地方Q至于它们的具体内存地址Q这取决于每个特定JVM的实现者?/p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;">JVM中一个字QwordQ的长度?2位的。JVM中有数几个原始数据cdQbyteQ?位)QshortQ?6位)QintQ?2位)QlongQ?4位)QfloatQ?2位)QdoubleQ?4位)QcharQ?6位)。除了无W号Unicode字符char之外Q其?U数字类型都是有W号的。这些类型可以方便的映射到JavaE序员可用的数据cd。另一个原始类型是对象句柄Q它是一个指向堆中对象的32位地址?/p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;">׃包含字节码,ҎZ字节边界寚w。栈和垃圾收集堆以字Q?2位)边界寚w<span style="margin: 0px; padding: 0px; border: 0px; font-size: 11px; vertical-align: baseline; line-height: 0; position: relative; top: -0.5em;">1</span>?/p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;"><em style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;"><strong style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">寄存器:我少我自?/strong></em></p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;">JVM?个程序计数器QcounterQ和3个管理栈的寄存器QregisterQ。它只有很少的寄存器Q是因ؓJVM字节码指令主要操作栈区。这U面向栈的设计,使得JVM指o集和JVM实现很小巧?/p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;">JVM使用E序计数器(也叫pc寄存器)Q跟t当前执行指令的内存位置。另?个寄存器Qoptop寄存器,frame寄存器和vars寄存器)指向当前执行Ҏ栈上不同的部位。执行方法的栈持有特定Ҏ调用的状态(本地变量Q即时计结果等Q?/p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;"><em style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;"><strong style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">Ҏ区和E序计数?/strong></em></p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;">Ҏ区是字节码呆的地斏V程序计数器跟踪执行U程。当前字节码指o执行后,E序计数器会包含下一条执行指令的地址Q一条指令执行之后,JVM把程序计数器讄为紧跟上一条指令的指o地址Q除非上一条指令具体指明一ơ蟩转?/p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;"><em style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;"><strong style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">Java栈和相关寄存?/strong></em></p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;">Java栈用来保存字节码指o的参数和执行l果Q给Ҏ传递参数和q回l果Q保存每个方法调用的状态。方法调用的状态被UCؓ调用栈。var寄存器,frame寄存器和optop寄存器指向当前栈帧的不同部位?/p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;">Java栈?个区Q本地变量,执行环境和操作数栈。本地变量区Q包含当前方法调用中使用的所有本地变量。它由vars寄存器指向。执行环境区用来l护栈区本n的操作。它被frame寄存器指向。操作数区用来作为字码指令的工作区。正是在q里Q存攄字节码指令的参数和其q回l果。操作数栈区的顶部被optop寄存器指向?/p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;">执行环境通常夹在本地变量和操作数栈中间。当前执行方法的操作数栈L在栈区的最上面Q所以optop寄存器L指向整个Java栈的剙?/p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;"><em style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;"><strong style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">垃圾攉?/strong></em></p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;">堆是Java对象生存的地斏VQ何时候,你用new操作W分配的内存Q都来自堆中。Java语言不允怽直接释放分配的内存。运行时环境会跟t堆上每个对象的引用Q自动释N些不被引用的对象所占据的内存,q个q程被称为垃圾收集?/p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;"><em style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;"><strong style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">参?/strong></em></p> <ol style="margin: 0px 0px 1.714285714rem; padding: 0px; border: 0px; vertical-align: baseline; list-style-position: outside; list-style-image: initial; line-height: 1.714285714;"> <li style="margin: 0px 0px 0px 2.571428571rem; padding: 0px; border: 0px; vertical-align: baseline;">关于内存寚w方式Q请参?a style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; outline: none; color: #9f9f9f;">Data alignment: Straighten up and fly right</a>?/li> </ol> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;">本文译自Q?a style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; outline: none; color: #9f9f9f;">The lean, mean, virtual machine</a></p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;"><strong style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">原创文章Q{载请注明Q?/strong> 转蝲?a style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; outline: none; color: #9f9f9f;"><span style="color: #0000ff;">LetsCoding.cn</span></a><br /> <strong style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">本文链接地址:</strong> <a style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; outline: none; color: #9f9f9f;"><span style="color: #0000ff;">短小_悍的虚拟机QJVM基本l构和功能介l?/span></a></p><img src ="http://www.tkk7.com/4cai/aggbug/413789.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/4cai/" target="_blank">Rolandz</a> 2014-05-17 21:50 <a href="http://www.tkk7.com/4cai/archive/2014/05/17/413789.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java中,状态模式和{略模式的区?/title><link>http://www.tkk7.com/4cai/archive/2014/05/16/413717.html</link><dc:creator>Rolandz</dc:creator><author>Rolandz</author><pubDate>Thu, 15 May 2014 19:23:00 GMT</pubDate><guid>http://www.tkk7.com/4cai/archive/2014/05/16/413717.html</guid><wfw:comment>http://www.tkk7.com/4cai/comments/413717.html</wfw:comment><comments>http://www.tkk7.com/4cai/archive/2014/05/16/413717.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.tkk7.com/4cai/comments/commentRss/413717.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/4cai/services/trackbacks/413717.html</trackback:ping><description><![CDATA[<span style="font-size: 12pt; font-family: Arial;">本文转自Q?a ><span style="color: #3366ff;">码农合作C?/span></a>?/span><a target="_blank"><span style="font-size: 12pt; color: #3366ff;">Java中,状态模式和{略模式的区?/span></a><span style="font-size: 12pt; font-family: Arial;"><br /></span><span style="font-size: 12pt; font-family: Arial;"><br />Ja</span><span style="font-size: 12pt; font-family: Arial;">va开发者,要想?/span><span style="font-size: 12pt; font-family: Arial;">当的使用状态模式和{略模式Q必L楚的理解它们之间的区别。虽然状态模式和{略模式拥有怼的结构,虽然它们都基?/span><a style="line-height: 1.714285714; font-size: 14px; margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; outline: none; color: #9f9f9f;"><span style="font-size: 12pt; font-family: Arial;">SOLID设计原则</span></a><span style="line-height: 1.714285714; font-size: 12pt; font-family: Arial;">中的OQ开闭原则)Q但是,它们的意图是完全不同的?/span> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;"><span style="font-size: 12pt; font-family: Arial;">{略模式通过装一l相关算法,为Client提供q行时的灉|性。Client可以在运行时Q选择M法Q而不改变使用法的Context。一些流行的{略模式的例子是写那些用算法的代码Q例如加密算法、压~算法、排序算法。另一斚wQ状态模式允许对象,在不同的状态拥有不同的行ؓ。因为现实世界中的对象通常都是有状态的Q所以它们在不同状态,行ؓ也不一栗例如,VMQ自动售货机Q只在hasCoin状态才l你吐商品;你不投币Q它是不会吐的。现在你可以清楚的看出它们的不同之处了:它们的意图是不同的。状态模式帮助对象管理状态,而策略模式允许Client选择不同的行为?/span><br /> </p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;"><span style="font-size: 12pt; font-family: Arial;">另一个不那么Ҏ能看出来的区别是Q是谁促使了行ؓ的改变。策略模式中Q是Client提供了不同的{略lContextQ状态模式中Q状态{UȝContext或State自己理。另外,如果你在State中管理状态{U,那么它必L有Context的引用。例如,在VM的例子中QState对象需要调用VM的setState()ҎL变它的状态。另一斚wQStrategy从不持有Context的引用,是Client把所选择的Strategy传递给Context。由于状态模式和{略模式的区别,是流行的Java设计原则c面试题之一Q我们将会在本文探讨在Java中,状态模式和{略模式的异同,q可以加׃对它们的理解?/span></p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;"><em style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; font-size: 14pt; font-family: Arial;"><strong style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">怼之处</strong></em></p><p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;"><span style="font-size: 12pt; font-family: Arial;">如果你看看状态模式和{略模式的UML图,׃发现它们的结构非常相伹{用State对象改变自己行ؓ的对象被UCؓContext对象Q相似的Q用Strategy对象改变自己行ؓ的对象叫Context对象。记住,Client和Context打交道。在状态模式中QContext把方法调用委托给当前的状态对象,而在{略模式中,Context使用的Strategy对象Q是被当做参C递过来的Q或在Context对象被创建时p提供的?/span></p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;"><img src="http://letscoding.cn/images/State%20Design%20Pattern.png" alt="状态模式UMLcd" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; max-width: 100%; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; box-shadow: rgba(0, 0, 0, 0.2) 0px 1px 4px;" /></p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;"><span style="font-size: 12pt; font-family: Arial;">q是专ؓl典的VM问题而设计的状态模式UMLcd。你可以看出QVM的状态是个接口,它有表示不同状态的具体实现。每一个状态都持有Context的引用,用它来管理由Context触发的行为导致的状态{UR?/span></p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;"><img src="http://letscoding.cn/images/Strategy%20Design%20Pattern%20in%20Java.png" alt="{略模式UMLcd" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; max-width: 100%; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; box-shadow: rgba(0, 0, 0, 0.2) 0px 1px 4px;" /></p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;"><span style="font-size: 12pt; font-family: Arial;">q是专ؓ实现排序功能而设计的{略模式UMLcd。因为存在很多排序算法,该模式让Client在排序时选择适当的算法。事实上QJava的集合框架就使用q个模式Q实C用来排序的Collections.sort()Ҏ。不同的是,它不允许Client选择排序法Q而是让它传递Comparator或Comparable接口的实例来指定比较{略?/span></p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;"><span style="font-size: 12pt; font-family: Arial;">让我们来看看它们之间更多的相g处:</span></p> <ol style="margin: 0px 0px 1.714285714rem; padding: 0px; border: 0px; vertical-align: baseline; list-style-position: outside; list-style-image: initial; line-height: 1.714285714;"> <li style="margin: 0px 0px 0px 2.571428571rem; padding: 0px; border: 0px; vertical-align: baseline;"><span style="font-size: 12pt; font-family: Arial;">d新的状态或{略都很ҎQ而且不需要修改用它们的Context对象?/span></li> <li style="margin: 0px 0px 0px 2.571428571rem; padding: 0px; border: 0px; vertical-align: baseline;"><span style="font-size: 12pt; font-family: Arial;">它们都让你的代码W合OCP原则。在状态模式和{略模式中,Context对象对修Ҏ关闭的,d新的状态或{略Q都不需要修改Context?/span></li> <li style="margin: 0px 0px 0px 2.571428571rem; padding: 0px; border: 0px; vertical-align: baseline;"><span style="font-size: 12pt; font-family: Arial;">正如状态模式中的Context会有初始状态一P{略模式同样有默认策略?/span></li> <li style="margin: 0px 0px 0px 2.571428571rem; padding: 0px; border: 0px; vertical-align: baseline;"><span style="font-size: 12pt; font-family: Arial;">状态模式以不同的状态封装不同的行ؓQ而策略模式以不同的策略封装不同的行ؓ?/span></li> <li style="margin: 0px 0px 0px 2.571428571rem; padding: 0px; border: 0px; vertical-align: baseline;"><span style="font-size: 12pt; font-family: Arial;">它们都依赖子cd实现相关行ؓ?/span></li> </ol> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;"><em style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; font-size: 14pt; font-family: Arial;"><strong style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">不同之处</strong></em></p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;"><span style="font-size: 12pt; font-family: Arial;">现在我们知道Q状态模式和{略模式的结构是怼的,但它们的意图不同。让我们重温一下它们的主要不同之处Q?/span></p> <ol style="margin: 0px 0px 1.714285714rem; padding: 0px; border: 0px; vertical-align: baseline; list-style-position: outside; list-style-image: initial; line-height: 1.714285714;"> <li style="margin: 0px 0px 0px 2.571428571rem; padding: 0px; border: 0px; vertical-align: baseline;"><span style="font-size: 12pt; font-family: Arial;">{略模式装了一l相关算法,它允许Client在运行时使用可互换的行ؓQ状态模式帮助一个类在不同的状态显CZ同的行ؓ?/span></li> <li style="margin: 0px 0px 0px 2.571428571rem; padding: 0px; border: 0px; vertical-align: baseline;"><span style="font-size: 12pt; font-family: Arial;">状态模式封装了对象的状态,而策略模式封装算法或{略。因为状态是跟对象密切相关的Q它不能被重用;而通过从Context中分d{略或算法,我们可以重用它们?/span></li> <li style="margin: 0px 0px 0px 2.571428571rem; padding: 0px; border: 0px; vertical-align: baseline;"><span style="font-size: 12pt; font-family: Arial;">在状态模式中Q每个状态通过持有Context的引用,来实现状态{U;但是每个{略都不持有Context的引用,它们只是被Context使用?/span></li> <li style="margin: 0px 0px 0px 2.571428571rem; padding: 0px; border: 0px; vertical-align: baseline;"><span style="font-size: 12pt; font-family: Arial;">{略实现可以作ؓ参数传递给使用它的对象Q例如Collections.sort()Q它的参数包含一个Comparator{略。另一斚wQ状态是Context对象自己的一部分Q随着旉的推U,Context对象从一个状态{Ud另一个状态?/span></li> <li style="margin: 0px 0px 0px 2.571428571rem; padding: 0px; border: 0px; vertical-align: baseline;"><span style="font-size: 12pt; font-family: Arial;">虽然它们都符合OCP原则Q策略模式也W合SRP原则Q单一职责原则Q,因ؓ每个{略都封装自q法Q且不依赖其他策略。一个策略的改变Qƈ不会D其他{略的变化?/span></li> <li style="margin: 0px 0px 0px 2.571428571rem; padding: 0px; border: 0px; vertical-align: baseline;"><span style="font-size: 12pt; font-family: Arial;">另一个理Z的不同:{略模式定义了对?#8220;怎么?#8221;的部分。例如,排序对象怎么Ҏ据排序。状态模式定义了对象“是什?#8221;?#8220;什么时候做”的部分。例如,对象处于什么状态,什么时候处在某个特定的状态?/span></li> <li style="margin: 0px 0px 0px 2.571428571rem; padding: 0px; border: 0px; vertical-align: baseline;"><span style="font-size: 12pt; font-family: Arial;">状态模式中很好的定义了状态{Uȝơ序Q而策略模式ƈ无此需要:Client可以自由的选择M{略?/span></li> <li style="margin: 0px 0px 0px 2.571428571rem; padding: 0px; border: 0px; vertical-align: baseline;"><span style="font-size: 12pt; font-family: Arial;">一些常见的{略模式的例子是装法Q例如排序算法,加密法或者压~算法。如果你看到你的代码需要用不同类型的相关法Q那么考虑使用{略模式吧。而识别何时用状态模式是很简单的Q如果你需要管理状态和状态{U,但不想用大量嵌套的条g语句Q那么就是它了?/span></li> <li style="margin: 0px 0px 0px 2.571428571rem; padding: 0px; border: 0px; vertical-align: baseline;"><span style="font-size: 12pt; font-family: Arial;">最后但最重要的一个不同之处是Q策略的改变由Client完成Q而状态的改变Q由Context或状态自己?/span></li> </ol> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;"><span style="font-size: 12pt; font-family: Arial;">本文译自Q?/span><a style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; outline: none; color: #9f9f9f;"><span style="font-size: 12pt; font-family: Arial;">Difference between State and Strategy Design Pattern in Java</span></a></p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;"><strong style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; font-size: 12pt; font-family: Arial;">原创文章Q{载请注明Q?/strong><span style="font-size: 12pt; font-family: Arial;"> 转蝲?/span><a style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; outline: none; color: #9f9f9f; font-size: 12pt; font-family: Arial;"><span style="color: #0000ff;">LetsCoding.cn</span></a><br style="font-size: 12pt; font-family: Arial;" /><span style="font-size: 12pt; font-family: Arial;"> </span><strong style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; font-size: 12pt; font-family: Arial;">本文链接地址:</strong><span style="font-size: 12pt; font-family: Arial;"> </span><a style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; outline: none; color: #9f9f9f; font-size: 12pt; font-family: Arial;"><span style="color: #0000ff;">Java中,状态模式和{略模式的区?/span></a></p><img src ="http://www.tkk7.com/4cai/aggbug/413717.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/4cai/" target="_blank">Rolandz</a> 2014-05-16 03:23 <a href="http://www.tkk7.com/4cai/archive/2014/05/16/413717.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java 8QLambda表达式(二)http://www.tkk7.com/4cai/archive/2014/05/11/413510.htmlRolandzRolandzSun, 11 May 2014 04:07:00 GMThttp://www.tkk7.com/4cai/archive/2014/05/11/413510.htmlhttp://www.tkk7.com/4cai/comments/413510.htmlhttp://www.tkk7.com/4cai/archive/2014/05/11/413510.html#Feedback2http://www.tkk7.com/4cai/comments/commentRss/413510.htmlhttp://www.tkk7.com/4cai/services/trackbacks/413510.html阅读全文

Rolandz 2014-05-11 12:07 发表评论
]]>
Java 8QLambda表达式(三)http://www.tkk7.com/4cai/archive/2014/05/11/413511.htmlRolandzRolandzSun, 11 May 2014 04:07:00 GMThttp://www.tkk7.com/4cai/archive/2014/05/11/413511.htmlhttp://www.tkk7.com/4cai/comments/413511.htmlhttp://www.tkk7.com/4cai/archive/2014/05/11/413511.html#Feedback0http://www.tkk7.com/4cai/comments/commentRss/413511.htmlhttp://www.tkk7.com/4cai/services/trackbacks/413511.html阅读全文

Rolandz 2014-05-11 12:07 发表评论
]]>
Java 8QLambda表达式(一Q?/title><link>http://www.tkk7.com/4cai/archive/2014/05/11/413509.html</link><dc:creator>Rolandz</dc:creator><author>Rolandz</author><pubDate>Sun, 11 May 2014 04:06:00 GMT</pubDate><guid>http://www.tkk7.com/4cai/archive/2014/05/11/413509.html</guid><wfw:comment>http://www.tkk7.com/4cai/comments/413509.html</wfw:comment><comments>http://www.tkk7.com/4cai/archive/2014/05/11/413509.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.tkk7.com/4cai/comments/commentRss/413509.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/4cai/services/trackbacks/413509.html</trackback:ping><description><![CDATA[<strong>Java 8中,最重要的一个改变得代码更快、更z,q向FPQ函数式~程Q打开了方便之门。下面我们来看看Q它是如何做到的?/strong><br /> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;">在上世纪九十q代QJava被设计成了OOP语言Q在当时QOOP是Y件开发中的标杆。远在OOPq没有出现的时候,已经产生了FP语言Q例如Lisp和SchemeQ但是它们的益处Qƈ没有受到学术圈外的h重视。最q,FP的重要性被提升了,因ؓ它非帔R合q发~程和事仉动编E。然而,qƈ不意味着OO不好Q相反,好的{略应该是؜用OOP和FP。就你对ƈ发编E不感兴,q也很有道理。例如,如果~程语言有一个方便写函数表达式的语法Q集合类库就能拥有强大的API?/p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;">Java 8中最主要的增强,是把FP的概忉|度整合进OO。在本文中,我将会展C其基本语法以及Q在不同的上下文中,如何使用它。关键点如下Q?/p> <ul style="margin: 0px 0px 1.714285714rem; padding: 0px; border: 0px; vertical-align: baseline; list-style-position: outside; list-style-image: initial; line-height: 1.714285714;"> <li style="margin: 0px 0px 0px 2.571428571rem; padding: 0px; border: 0px; vertical-align: baseline;">Lambda表达式,是有参数的代码块?/li> <li style="margin: 0px 0px 0px 2.571428571rem; padding: 0px; border: 0px; vertical-align: baseline;">在Q何时候,你想E后执行一个代码块Ӟ用Lambda表达式?/li> <li style="margin: 0px 0px 0px 2.571428571rem; padding: 0px; border: 0px; vertical-align: baseline;">Lambda表达式可以被转型成函数式接口?/li> <li style="margin: 0px 0px 0px 2.571428571rem; padding: 0px; border: 0px; vertical-align: baseline;">Lambda表达式可以从闭作用域有效访问final的变量?/li> <li style="margin: 0px 0px 0px 2.571428571rem; padding: 0px; border: 0px; vertical-align: baseline;">Ҏ和构造器的引用可在不调用它们的情况下引用它们?/li> <li style="margin: 0px 0px 0px 2.571428571rem; padding: 0px; border: 0px; vertical-align: baseline;">你现在可以把default和staticҎ的具体实现写在接口中?/li> <li style="margin: 0px 0px 0px 2.571428571rem; padding: 0px; border: 0px; vertical-align: baseline;">你必L动解决不同接口中M的defaultҎ冲突?/li> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;"></p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;"><em style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;"><strong style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">Z么需要Lambda表达式?</strong></em></p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;">Lambda表达式是一个代码块Q你可以l过它,因此它能在稍后执行,仅一ơ或多次。在介绍语法Q甚x奇怪的名称Q之前,让我们后退一步,看看一直以来,你在Java中,cM的代码块会在什么地方用到?/p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;">当你惛_一个独立的U程中执行代码时Q你把代码放到Runnable的runҎ中,像q样Q?/p> <div no="" java"="" style="margin: 0px 0px 1em; font-size: 11px; vertical-align: baseline; background-color: #eeeeee; overflow: auto; white-space: nowrap; position: relative; font-family: monospace;"> <ol style="margin: 0px; padding: 0px 0px 0px 0em; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-style: none; vertical-align: baseline; list-style: none outside; line-height: 1.714285714;"> <li style="margin: 0px 0px 0px 2.571428571rem; padding: 0px; border: 0px; vertical-align: baseline; list-style-type: none;"> <div style="margin: 0px; padding-left: 5px; border: 0px; vertical-align: baseline; background-image: none; color: #000000;"><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; font-weight: bold;">class</span> Worker <span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; font-weight: bold;">implements</span> <span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #0000cc;">Runnable</span> <span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">{</span></div> </li> <li style="margin: 0px 0px 0px 2.571428571rem; padding: 0px; border: 0px; vertical-align: baseline; list-style-type: none;"> <div style="margin: 0px; padding-left: 5px; border: 0px; vertical-align: baseline; background-image: none; color: #000000;">     <span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; font-weight: bold;">public</span> <span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #f63333;">void</span> run<span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">(</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">)</span> <span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">{</span></div> </li> <li style="margin: 0px 0px 0px 2.571428571rem; padding: 0px; border: 0px; vertical-align: baseline; list-style-type: none;"> <div style="margin: 0px; padding-left: 5px; border: 0px; vertical-align: baseline; background-image: none; color: #000000;">         <span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #a1a100;">for</span> <span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">(</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #f63333;">int</span> i = <span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #ff33ff;">0</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">;</span> i <span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;"><</span> <span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #ff33ff;">1000</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">;</span> i++<span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">)</span></div> </li> <li style="margin: 0px 0px 0px 2.571428571rem; padding: 0px; border: 0px; vertical-align: baseline; list-style-type: none;"> <div style="margin: 0px; padding-left: 5px; border: 0px; vertical-align: baseline; background-image: none; color: #000000;">             doWork<span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">(</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">)</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">;</span></div> </li> <li style="margin: 0px 0px 0px 2.571428571rem; padding: 0px; border: 0px; vertical-align: baseline; list-style-type: none;"> <div style="margin: 0px; padding-left: 5px; border: 0px; vertical-align: baseline; background-image: none; color: #000000;">     <span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">}</span></div> </li> <li style="margin: 0px 0px 0px 2.571428571rem; padding: 0px; border: 0px; vertical-align: baseline; list-style-type: none;"> <div style="margin: 0px; padding-left: 5px; border: 0px; vertical-align: baseline; background-image: none; color: #000000;">     <span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #808080;">// …</span></div> </li> <li style="margin: 0px 0px 0px 2.571428571rem; padding: 0px; border: 0px; vertical-align: baseline; list-style-type: none;"> <div style="margin: 0px; padding-left: 5px; border: 0px; vertical-align: baseline; background-image: none; color: #000000;"><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">}</span></div> </li> </ol> </div> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;">然后Q当你想执行q段代码Ӟ你创Z个Worker实例Q把它提交给U程池,或者简单的开始一个新U程Q?/p> <div no="" java"="" style="margin: 0px 0px 1em; font-size: 11px; vertical-align: baseline; background-color: #eeeeee; overflow: auto; white-space: nowrap; position: relative; font-family: monospace;"> <ol style="margin: 0px; padding: 0px 0px 0px 0em; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-style: none; vertical-align: baseline; list-style: none outside; line-height: 1.714285714;"> <li style="margin: 0px 0px 0px 2.571428571rem; padding: 0px; border: 0px; vertical-align: baseline; list-style-type: none;"> <div style="margin: 0px; padding-left: 5px; border: 0px; vertical-align: baseline; background-image: none; color: #000000;">Worker w = <span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; font-weight: bold;">new</span> Worker<span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">(</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">)</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">;</span></div> </li> <li style="margin: 0px 0px 0px 2.571428571rem; padding: 0px; border: 0px; vertical-align: baseline; list-style-type: none;"> <div style="margin: 0px; padding-left: 5px; border: 0px; vertical-align: baseline; background-image: none; color: #000000;"><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; font-weight: bold;">new</span> <span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #0000cc;">Thread</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">(</span>w<span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">)</span>.<span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">start</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">(</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">)</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">;</span></div> </li> </ol> </div> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;">q里的关键点在于QrunҎ中包含你惛_独立U程中执行的代码?/p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;">x用自定义的Comparator排序。如果你想以长度Q而不以默认的字典序对字W串排序Q你可以传递一个Comparator对象lsortҎQ?/p> <div no="" java"="" style="margin: 0px 0px 1em; font-size: 11px; vertical-align: baseline; background-color: #eeeeee; overflow: auto; white-space: nowrap; position: relative; font-family: monospace;"> <ol style="margin: 0px; padding: 0px 0px 0px 0em; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-style: none; vertical-align: baseline; list-style: none outside; line-height: 1.714285714;"> <li style="margin: 0px 0px 0px 2.571428571rem; padding: 0px; border: 0px; vertical-align: baseline; list-style-type: none;"> <div style="margin: 0px; padding-left: 5px; border: 0px; vertical-align: baseline; background-image: none; color: #000000;"><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; font-weight: bold;">class</span> LengthComparator <span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; font-weight: bold;">implements</span> Comparator<span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;"><</span> <span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #0000cc;">String</span> <span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">></span> <span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">{</span></div> </li> <li style="margin: 0px 0px 0px 2.571428571rem; padding: 0px; border: 0px; vertical-align: baseline; list-style-type: none;"> <div style="margin: 0px; padding-left: 5px; border: 0px; vertical-align: baseline; background-image: none; color: #000000;">     <span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; font-weight: bold;">public</span> <span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #f63333;">int</span> compare<span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">(</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #0000cc;">String</span> first, <span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #0000cc;">String</span> second<span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">)</span> <span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">{</span></div> </li> <li style="margin: 0px 0px 0px 2.571428571rem; padding: 0px; border: 0px; vertical-align: baseline; list-style-type: none;"> <div style="margin: 0px; padding-left: 5px; border: 0px; vertical-align: baseline; background-image: none; color: #000000;">         <span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; font-weight: bold;">return</span> <span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #0000cc;">Integer</span>.<span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">compare</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">(</span>first.<span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">length</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">(</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">)</span>, second.<span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">length</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">(</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">)</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">)</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">;</span></div> </li> <li style="margin: 0px 0px 0px 2.571428571rem; padding: 0px; border: 0px; vertical-align: baseline; list-style-type: none;"> <div style="margin: 0px; padding-left: 5px; border: 0px; vertical-align: baseline; background-image: none; color: #000000;">     <span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">}</span></div> </li> <li style="margin: 0px 0px 0px 2.571428571rem; padding: 0px; border: 0px; vertical-align: baseline; list-style-type: none;"> <div style="margin: 0px; padding-left: 5px; border: 0px; vertical-align: baseline; background-image: none; color: #000000;"><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">}</span></div> </li> <li style="margin: 0px 0px 0px 2.571428571rem; padding: 0px; border: 0px; vertical-align: baseline; list-style-type: none;"> <div style="margin: 0px; padding-left: 5px; border: 0px; vertical-align: baseline; background-image: none; color: #000000;">   </div> </li> <li style="margin: 0px 0px 0px 2.571428571rem; padding: 0px; border: 0px; vertical-align: baseline; list-style-type: none;"> <div style="margin: 0px; padding-left: 5px; border: 0px; vertical-align: baseline; background-image: none; color: #000000;"><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #0000cc;">Arrays</span>.<span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">sort</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">(</span>strings, <span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; font-weight: bold;">new</span> LengthComparator<span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">(</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">)</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">)</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">;</span></div> </li> </ol> </div> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;">sortҎ会持l调用compareҎQ重排ؕ序的元素Q直到数l排序完毕。你lsortҎ传递一个比较元素的代码片段Q这D代码被整合q其余的、你也许不想重新d现的排序逻辑。注意:如果 x{于yQInteger.compare(x, y)q回0Qx < yQ返回负敎ͼx > yQ返回正数。这个staticҎ在Java 7中被加入。你千万不能计算x - y来比较它们的大小Q那LL反的大操作数会导致计溢出的?/p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;">作ؓ另外一个g后执行的例子Q考虑一个按钮回调。你新徏一个承Listener接口的类Q把回调动作放进其中Q创建它的一个实例,最后把实例注册到按钮。这U场景司I惯,以至于很多程序员都?#8220;匿名cȝ匿名实例”语法Q?/p> <div no="" java"="" style="margin: 0px 0px 1em; font-size: 11px; vertical-align: baseline; background-color: #eeeeee; overflow: auto; white-space: nowrap; position: relative; font-family: monospace;"> <ol style="margin: 0px; padding: 0px 0px 0px 0em; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-style: none; vertical-align: baseline; list-style: none outside; line-height: 1.714285714;"> <li style="margin: 0px 0px 0px 2.571428571rem; padding: 0px; border: 0px; vertical-align: baseline; list-style-type: none;"> <div style="margin: 0px; padding-left: 5px; border: 0px; vertical-align: baseline; background-image: none; color: #000000;">button.<span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">setOnAction</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">(</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; font-weight: bold;">new</span> EventHandler<span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;"><</span> <span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #0000cc;">ActionEvent</span> <span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">></span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">(</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">)</span> <span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">{</span></div> </li> <li style="margin: 0px 0px 0px 2.571428571rem; padding: 0px; border: 0px; vertical-align: baseline; list-style-type: none;"> <div style="margin: 0px; padding-left: 5px; border: 0px; vertical-align: baseline; background-image: none; color: #000000;">    <span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; font-weight: bold;">public</span> <span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #f63333;">void</span> handle<span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">(</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #0000cc;">ActionEvent</span> event<span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">)</span> <span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">{</span></div> </li> <li style="margin: 0px 0px 0px 2.571428571rem; padding: 0px; border: 0px; vertical-align: baseline; list-style-type: none;"> <div style="margin: 0px; padding-left: 5px; border: 0px; vertical-align: baseline; background-image: none; color: #000000;">        <span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #0000cc;">System</span>.<span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">out</span>.<span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">println</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">(</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #ff0000;">"Thanks for clicking!"</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">)</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">;</span></div> </li> <li style="margin: 0px 0px 0px 2.571428571rem; padding: 0px; border: 0px; vertical-align: baseline; list-style-type: none;"> <div style="margin: 0px; padding-left: 5px; border: 0px; vertical-align: baseline; background-image: none; color: #000000;">    <span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">}</span></div> </li> <li style="margin: 0px 0px 0px 2.571428571rem; padding: 0px; border: 0px; vertical-align: baseline; list-style-type: none;"> <div style="margin: 0px; padding-left: 5px; border: 0px; vertical-align: baseline; background-image: none; color: #000000;"><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">}</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">)</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">;</span></div> </li> </ol> </div> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;">重要的是handleҎ中的代码QQ何时候按钮被点击Q它׃被执行?/p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;">因ؓJava 8把JavaFX作ؓSwing GUI工具包的lQ者,我在例子里是使用JavaFX。这些细节ƈ不重要,因ؓ在所有的UI工具包中Q不是SwingQJavaFXQ还是AndroidQ都是你l按钮一些代码,在按钮被点击的时候执行?/p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;">在上面的三个例子中,你看C相同的方式。代码块被传递给某hQ线E池QsortҎ或按钮,它将在稍后被调用?/p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;">到现在ؓ止,在Java中传递代码块q不单。你不能只是传递代码块QJava是一个OOP语言Q因此你必须先创Z个属于某个类的实例,而这个类拥有我们需要传递的代码块?/p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;">在其他语a中,是可能直接用代码块的。在很长一D|间里QJava的设计者们反对增加q个Ҏ,毕竟QJava的伟大力量在于简单性和一致性。如果一个语aQ包含所有的能够产生量更紧凑代码的Ҏ,它就会变成不可维护的一团糟。经如此,在其他语a中,它们q不仅仅是可以更单的启动一个线E,或者注册一个按钮点ȝ处理E序Q它们中的大量API都更加简单,更加一_更加强大。在Java里,Z本应该能够写出类似的APIQ它们用承特定函数的cȝ实例Q但是,q样的APIQ让人用hq不愉快?/p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;">一D|间以来,问题变成Qƈ不是要不要在Java中添加FPQ而是怎么L加。在W合Java的设计出来之前,设计者们׃几年的时间来做试验。在本文下一部分Q你会看到Q你是如何在Java 8中用代码块的?/p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;"><em style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;"><strong style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">Lambda表达式的语法</strong></em></p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;">再想想上面排序的例子。我们传递比较字W串长度的代码。我们计:</p> <div no="" java"="" style="margin: 0px 0px 1em; font-size: 11px; vertical-align: baseline; background-color: #eeeeee; overflow: auto; white-space: nowrap; position: relative; font-family: monospace;"> <ol style="margin: 0px; padding: 0px 0px 0px 0em; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-style: none; vertical-align: baseline; list-style: none outside; line-height: 1.714285714;"> <li style="margin: 0px 0px 0px 2.571428571rem; padding: 0px; border: 0px; vertical-align: baseline; list-style-type: none;"> <div style="margin: 0px; padding-left: 5px; border: 0px; vertical-align: baseline; background-image: none; color: #000000;"><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #0000cc;">Integer</span>.<span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">compare</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">(</span>first.<span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">length</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">(</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">)</span>, second.<span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">length</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">(</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">)</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">)</span></div> </li> </ol> </div> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;">fisrt和second是什么?它们都是字符ԌJava是强cd语言Q我们也必须指明q一点:</p> <div no="" java"="" style="margin: 0px 0px 1em; font-size: 11px; vertical-align: baseline; background-color: #eeeeee; overflow: auto; white-space: nowrap; position: relative; font-family: monospace;"> <ol style="margin: 0px; padding: 0px 0px 0px 0em; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-style: none; vertical-align: baseline; list-style: none outside; line-height: 1.714285714;"> <li style="margin: 0px 0px 0px 2.571428571rem; padding: 0px; border: 0px; vertical-align: baseline; list-style-type: none;"> <div style="margin: 0px; padding-left: 5px; border: 0px; vertical-align: baseline; background-image: none; color: #000000;"><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">(</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #0000cc;">String</span> first, <span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #0000cc;">String</span> second<span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">)</span> -<span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">></span> <span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #0000cc;">Integer</span>.<span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">compare</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">(</span>first.<span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">length</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">(</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">)</span>, second.<span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">length</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">(</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">)</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">)</span></div> </li> </ol> </div> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;">你看C你的W一个Lambda表达式。它只是单的代码块和必须传给它的变量说明?/p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;">它的名称Lambda是怎么来的呢?很多q前Q还在计机出现之前Q逻辑学家Alonzo Church惌形式化数学函敎ͼ让它h更有效的可计性。(奇怪的事,Z知道有些函数的存在,却没有h知道怎么计算它们的倹{)他用希腊字母lambdaQ?#955;Q来表示函数参数。如果他懂得Jav APIQ他可能会这样写Q?/p> <div no="" java"="" style="margin: 0px 0px 1em; font-size: 11px; vertical-align: baseline; background-color: #eeeeee; overflow: auto; white-space: nowrap; position: relative; font-family: monospace;"> <ol style="margin: 0px; padding: 0px 0px 0px 0em; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-style: none; vertical-align: baseline; list-style: none outside; line-height: 1.714285714;"> <li style="margin: 0px 0px 0px 2.571428571rem; padding: 0px; border: 0px; vertical-align: baseline; list-style-type: none;"> <div style="margin: 0px; padding-left: 5px; border: 0px; vertical-align: baseline; background-image: none; color: #000000;">λfirst.λsecond.<span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #0000cc;">Integer</span>.<span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">compare</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">(</span>first.<span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">length</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">(</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">)</span>, second.<span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">length</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">(</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">)</span><span style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: #66cc66;">)</span></div> </li> </ol> </div> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;">那ؓ什么是字母λ呢?是Church用完了其他所有的字母了吗Q实际上Q伟大的《数学原理》?#710;来表C由变量,它激发了Church用一个大写的lambdaQ?#955;Q表C参数的灉|。但是最l,他还是用了写版本。自此以后,一个拥有参数的表达式就被称Z“Lambda表达?#8221;?/p> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;">本文译自Q?a style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; outline: none; color: #9f9f9f;">Lambda Expressions in Java 8</a></p> </ul> <p style="margin: 1rem 0px; padding: 0px; border: 0px; vertical-align: baseline; line-height: 1.714285714;"><strong style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">原创文章Q{载请注明Q?/strong> 转蝲?a style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; outline: none; color: #9f9f9f;">LetsCoding.cn</a><br /> <strong style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline;">本文链接地址:</strong> <a style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; outline: none; color: #9f9f9f;">Java 8QLambda表达式(一Q?/a></p> <img src ="http://www.tkk7.com/4cai/aggbug/413509.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/4cai/" target="_blank">Rolandz</a> 2014-05-11 12:06 <a href="http://www.tkk7.com/4cai/archive/2014/05/11/413509.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://8izh.com" target="_blank">޹һ</a>| <a href="http://czdlglass.com" target="_blank">è˳վ</a>| <a href="http://yiqigxfc.com" target="_blank">պƵۿ</a>| <a href="http://xx9911.com" target="_blank">ƬƵһ</a>| <a href="http://cnkaiertong.com" target="_blank">ĻۺϾþò</a>| <a href="http://ettedia.com" target="_blank">þ99׾Ʒ</a>| <a href="http://xtolm.com" target="_blank">AVһӰ</a>| <a href="http://xww678.com" target="_blank">㽶þþƷ</a>| <a href="http://grjeans.com" target="_blank">2020þþƷ</a>| <a href="http://tiantiantegou.com" target="_blank">ѾƷƵ</a>| <a href="http://www-kj5799.com" target="_blank">޸һ</a>| <a href="http://nyminer.com" target="_blank">޾ƷŮþþþ99С˵</a>| <a href="http://smalody.com" target="_blank">ӾƷ</a>| <a href="http://obtainfo.com" target="_blank">wwwһwww</a>| <a href="http://fl6fe.com" target="_blank">2016</a>| <a href="http://8k4c.com" target="_blank">vaר</a>| <a href="http://o091i.com" target="_blank">߹ѹۿ</a>| <a href="http://33sse.com" target="_blank">þù߳׽ѹۿ</a>| <a href="http://www99xyxy.com" target="_blank">˴WWW</a>| <a href="http://yanyingqiang.com" target="_blank">޶Ƶ˵ӰԺ</a>| <a href="http://kekead.com" target="_blank">ۺ</a>| <a href="http://xdxsw.com" target="_blank">AVվ</a>| <a href="http://xiamenwave.com" target="_blank">avѵӰ</a>| <a href="http://jyzs888.com" target="_blank">þ䰮</a>| <a href="http://65123456.com" target="_blank">޳ɵӰ߹ۿ</a>| <a href="http://9844555.com" target="_blank">ĻƷ</a>| <a href="http://51comcomcom.com" target="_blank">ëƬ߹ۿվ</a>| <a href="http://155562.com" target="_blank">99߹ۿ</a>| <a href="http://5g6z.com" target="_blank">һƵ</a>| <a href="http://www-456446.com" target="_blank">Ůʮ·Ůbbw</a>| <a href="http://wwwly6080.com" target="_blank">þþþavרˮ</a>| <a href="http://qq367.com" target="_blank">ۺɫƵ߹ۿ</a>| <a href="http://rr7733.com" target="_blank">ѹۿһƬ</a>| <a href="http://612662.com" target="_blank">97</a>| <a href="http://lanoss.com" target="_blank">߹ۿƵ</a>| <a href="http://whlnrsqsie.com" target="_blank">ѹۿ</a>| <a href="http://xp189.com" target="_blank">Ƭѹۿþ</a>| <a href="http://vo168.com" target="_blank">߹ۿƵ</a>| <a href="http://sdshfengji.com" target="_blank">ƷavƬ</a>| <a href="http://www52a.com" target="_blank">Ƶ</a>| <a href="http://35469642.com" target="_blank">޸Ƶ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>