
java8
iteye_3843
这个作者很懒,什么都没留下…
展开
-
Lambda表达式基础(1)-什么是Lambda表达式
什么是lambda表达式从数学和计算的角度来看,一个lambda表达式就是一个函数:对于部分 或者全部输入值的组合,它会产生出一个特定的输出。在java语言中Lambda表达式引入了函数式编程的思想。按照java传统术语来解释看,Lambda可以被理解为一种有更复杂语法的匿名方法,可以忽略修饰符,返回类型,在某些情况下参数类型同样可以省略。语法:Lambda的基本语法类似于: ...原创 2013-11-26 14:16:52 · 180 阅读 · 0 评论 -
Lambda表达式基础(12)-什么是构造函数的引用?
什么是构造函数的引用?同理,方法引用是已存在方法的句柄,构造函数引用是已存在构造函数的句柄。使用类似于方法引用的语法,我们可以创建构造函数引用,但要用关键字new来代替方法名。例如: ArrayList::new File::new如果构造函数为泛型,类型参数可以在new之前显式声明 interface Factory { T make(); } ...原创 2013-12-11 13:20:02 · 243 阅读 · 0 评论 -
缺省方法(1)-什么是缺省方法?
什么是缺省方法?在"[url=http://jobar.iteye.com/blog/1981635]为何要在java中加入Lambda表达式[/url]"中使用了一个简单的集合方法forEach来举例,接受一个函数将之作用于每个传入的元素,例如: [code="java"]pointList.forEach(p -> p.move(p.y, p.x));[/code]但java...原创 2013-12-13 13:45:24 · 3272 阅读 · 0 评论 -
缺省方法(2)-Java中缺省方法会引入多重继承吗?
Java中缺省方法会引入多重继承吗?不会,因为多重继承已经存在于Java中了。接口类型的多重继承从一开始一直是语言的一个特点。缺省方法确实引入了一种新的多重继承即多重继承行为。Java将依然不会有多重继承的状态,就像C++那样。这里是多重继承行为的一个例子。新的接口java.util.Sized声明了方法size和sEmpty并提供了后者的默认实现: [code="jav...原创 2013-12-16 14:11:16 · 251 阅读 · 0 评论 -
缺省方法(3)-如何解决方法声明的冲突?
如何解决方法声明的冲突? 因为可以从多个接口继承,相同的缺省方法可以通过不同的路径继承。由于每个继承的默认方法提供了不同的实现,编译器需要一种方式从中做出选择。下面是它的工作模式:(1)类总是优先。类或父类的声明优先级高于任何缺省的方法声明。(2)否则,选择具有相同签名的最具体的默认提供接口的该方法。例如,根据以上规则下面的代码输出Hello World from B。 ...原创 2013-12-17 13:17:43 · 315 阅读 · 0 评论 -
缺省方法(4)-如何处理菱形问题?
如何处理菱形问题?“菱形问题”是一种由于多重继承引起的歧义性问题。对于像c++这类允许状态多重继承的语言来说是一个严重的问题。然而在java中只能在接口上而不允许类的多重继承,因此不会包含状态。考虑下面的情况: [code="java"]interface A { default void m() { ... } } in...原创 2013-12-18 10:36:56 · 130 阅读 · 0 评论 -
集合框架(1)-Java集合框架走向何方?
Java集合框架走向何方?到Java8发布前,Java集合框架的历史将超过15年,并且它成功的经受住了考验,但其背后的一些假设随着Java程序执行环境的变化正越来越多的遭受质疑。最大的变化是在硬件环境中,设计师已经把他们的注意力从提高各个内核的时钟速度并放置更多内核的目标转移到同一个芯片上。要从大规模多核处理器中获得可用潜在性能的提升,应用程序必须能够将它们的工作量分派到许多不同的线程中,...原创 2013-12-20 17:32:27 · 95 阅读 · 0 评论 -
集合框架(2)-什么是stream?
stream是一系列的值。包java.util.stream defines定义了引用值(Stream)的stream类型和一些原语stream类(IntStream,LongStream和DoubleStream)。streams类就像迭代器,它们按处理需求产生元素,但不与任何特定的存储机制关联。stream有时候局部计算-它们中某些元素仍会生成,有时候它的元素会全部参与计算,此时会结束stre...原创 2014-01-09 14:13:36 · 157 阅读 · 0 评论 -
Java8中Lambda表达式的10个例子
Java8中Lambda表达式的10个例子例1 用Lambda表达式实现Runnable接口[code="java"]//Before Java 8:new Thread(new Runnable() {@Overridepublic void run() { System.out.println("Before Java8, too much code for too l...原创 2014-02-27 14:40:38 · 4557 阅读 · 0 评论 -
Lambda表达式基础(11)-实例方法引用的语法是什么?
实例方法引用的语法是什么?引用静态方法的语法在前一节已经提到过了。有两种引用实例方法的方式。一种是严格类似于静态引用的方式,用“对象引用::标识符”替换“类型引用::标识符”。例如:forEach方法可以用来传递集合中的每个元素给一个实例函数来处理: [code="java"]pointList.forEach(System.out::print);[/code]这不是实例方...原创 2013-12-10 12:59:19 · 109 阅读 · 0 评论 -
Lambda表达式基础(10)- 什么是方法引用?
任何lambda表达式可以被看作是一个函数式接口的功能描述的匿名表示。代表一个函数描述符的另一种方法是使用现有类的具体方法。方法引用就是这些现有方法的句柄。例如: String::valueOf Integer::compare是静态方法的引用,类似于没有捕获任何实例或局部变量的lambda表达式。(实例方法引用在下一节阐述)举一个简单的例子,在类java.util.Arrays中的方...原创 2013-12-09 11:01:45 · 174 阅读 · 0 评论 -
Lambda表达式基础(2)-为什么java要引入Lambda表达式?
为什么java要引入Lambda表达式?在现代许多编程语言中Lambda表达式(闭包)是一个很流行的特性。在Java平台引入lambda的众多原因之中最显著的原因之一是Lambda使得更容易在多线程中分布处理集合。现在,lists和sets典型的处理方式是由客户端代码从集合中获取一个迭代器,然后使用该迭代器依次处理它的元素,如果不同元素的处理要并行进行,那么只能由是客户端代码实现而集合对此...原创 2013-11-27 13:00:12 · 162 阅读 · 0 评论 -
Lambda表达式基础(3)-什么是函数式接口?
什么是函数式接口?通俗地说,一个函数式接口是其类型可作为方法参数,就像一个lambda表达式可作实际参数一样。例如,在集合中的forEach方法可以有以下特征:forEach方法参数必须传入仅有一个方法的Consumer接口的一个实例。这个实例可能是一个lambda表达式(请参考(4)什么是lambda表达式的类型?),在这种情况下它可以替代该方法。一个Lambda表达式可以以这种方式...原创 2013-11-28 11:09:26 · 113 阅读 · 0 评论 -
Lambda表达式基础(4)- 什么是Lambda表达式的类型?
什么是Lambda表达式的类型?Lambda表达式是函数式接口的一个实例。但Lambda表达式本身不包含它要实现的函数式接口的信息;这要由它所在的上下文推断出来,例如表达式 x -> 2 * x 可以是一个函数式接口的实例 interface IntOperation { int operate(int i); } 所以这么写是合法的 IntO...原创 2013-11-29 13:14:57 · 276 阅读 · 0 评论 -
Lambda表达式基础(5)- Lambda表达式是对象吗?
Lambda表达式是对象吗?是的,要加一个限定条件:他们是对象子类型的实例,但不一定有唯一标识。一个Lambda表达式是一个函数式接口的一个实例,它本身就是Object的子类型的一个实例。为了说明这一点,考虑下面的合法赋值: Runnable r = () -> {}; // 创建一个Lambda表达式并赋值给一个引用变量r Object o = r; ...原创 2013-12-02 14:12:14 · 1131 阅读 · 2 评论 -
Lambda表达式基础(6)- Lambda表达式可以用在哪些地方?
Lambda表达式可以用在哪些地方?lambda表达式可以用于具有目标类型的任何上下文。有目标类型的上下文是指: 1 变量声明,赋值和数组的初始化,其目标类型是被赋值的类型(或数组类型); 2 return语句,目标类型是方法的返回类型; 3 方法或构造函数的参数,目标类型是相应参数的类型。如果方法或构造函数被重载,重载解析的一般机制用于lambda表达式匹配到目标类型之前。...原创 2013-12-03 11:07:45 · 505 阅读 · 0 评论 -
Lambda表达式基础(7)- 什么是Lambda表达式的作用域规则?
什么是Lambda表达式的作用域规则?Lambda表达式不引入任何新命名环境。在Lambda的body中的变量名就在一个闭包环境中被解释执行,除非在Lambda表达式的形式参数中引入新命名。紧接lambda表达式外的关键字this和super也具有相同的含义- 也就是说,它们引用的是闭包类。形式参数作为方法参数遵循相同的规则用于覆盖类和实例变量。例如,Bar的声明: [code="j...原创 2013-12-04 10:20:51 · 149 阅读 · 0 评论 -
Lambda表达式基础(8)- Lambda表达式可以用来定义递归函数吗?
Lambda表达式可以用来定义递归函数吗?是的,只要递归调用使用在lambda闭包环境中定义的变量名称。这意味着,递归定义仅可在变量赋值的情况下,事实上,考虑到赋值之前使用的规则为局部变量仅限实例或静态变量赋值。因此,在下面的例子中,factorial必须声明为实例或静态变量。例如[code="java"] UnaryOperator factorial = i -> { ret...原创 2013-12-05 10:06:23 · 412 阅读 · 0 评论 -
Lambda表达式基础(9)- lambda表达式可以使用来自它们的环境变量吗?
lambda表达式可以使用来自它们的环境变量吗?是的。这就是所谓的变量捕获。实例和静态变量可以不受限制地在lambda的主体被使用和改变。尽管如此,使用局部变量有更多的限制:局部变量不允许捕获除非他们确定是final的,这是在Java8中引入的一个概念。通俗地说,一个局部变量确定是final的,如果它的其初始值永远不会改变(包括lambda表达式主体内),换句话说,它声明为final将不会导致...原创 2013-12-06 11:10:07 · 530 阅读 · 0 评论 -
在XP 32位上如何安装JDK8
自从微软不支持xp之后,jdk也跟着倒了大霉了,随着jdk8的发布,居然不支持在xp 32位上安装了,从网上搜罗了几篇文章,结合自己的经历,终于把jdk8在xp 32上给装好了,这里稍作总结。1 下载jdk-8-windows-i586.exe 双击安装报错:[img]http://dl2.iteye.com/upload/attachment/0095/9188/5c18bbd6-5...原创 2014-04-09 21:14:18 · 3220 阅读 · 0 评论