JDK 1.8 新特性

jdk1.8(Java 8)是java语言开发的一个主要版本,Oracle公司于2014年3月18日发布Java 8.它支持函数式编程,新的JavaScript引擎等等。

1. Lambda表达式 

    它允许把函数作为一个方法的参数

    格式:(parameters参数)-> expression表达体或方法体

                 parameters参数: 类似于方法中的形参列表,这里的参数是函数式接口里的参数

                 ->:"被用于"的意思

                 方法体:可以是表达式也可以是代码块,是函数接口里方法的实现,如果负责运算的代码无法用表达式表示,可以使用编写方法实现,但必须使用{}包围并按需明确使用return语句。

lambda实现多线程:

​
public static void main(String[] args) {
		//lambda表达式
		new Thread(() -> System.out.println("线程1")).start();
		
		//方法体
		new Thread( ()->{
			for(int i=0;i<6;i++) {
				System.out.println("线程2执行第:"+i);
			}
		}).start();
}

​

2. 方法引用

  方法引用提供了非常有用的语法,通过方法的名字来指向一个方法,可以直接引用已有Java类或对象(实例)的方法或构造方法。 与lambda联合使用,方法引用可以使语言的构造更简洁紧凑,减少冗余代码。使用一对冒号::,后面只是方法名,不能加()。forEach也是jdk1.8的新特性。

​
public static void main(String[] args) {
    Arrays.asList("a","b","f","g").forEach(e ->{
			String m = "123"+e;
			System.out.println(m);
		});
		/**打印结果
		 *  123a
			123b
			123f
			123g
		 */
    ArrayList<String> list = new ArrayList<String>();
		list.add("ass");
		list.add("bsx");
		list.add("dsx");
		list.add("ert");
		list.forEach(System.out::println);
}

​

3. 函数式接口

   就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。函数式接口可以被隐式转换为lambda表达式。

public static void main(String[] args) {
		List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
        
	      // Predicate<Integer> predicate = n -> true
	      // n 是一个参数传递到 Predicate 接口的 test 方法
	      // n 如果存在则 test 方法返回 true
	        
	      System.out.println("输出所有数据:");
	        
	      // 传递参数 n
	      eval(list, n->true);
	        
	      // Predicate<Integer> predicate1 = n -> n%2 == 0
	      // n 是一个参数传递到 Predicate 接口的 test 方法
	      // 如果 n%2 为 0 test 方法返回 true
	        
	      System.out.println("输出所有偶数:");
	      eval(list, n-> n%2 == 0 );
	        
	      // Predicate<Integer> predicate2 = n -> n > 3
	      // n 是一个参数传递到 Predicate 接口的 test 方法
	      // 如果 n 大于 3 test 方法返回 true
	        
	      System.out.println("输出大于 3 的所有数字:");
	      eval(list, n-> n > 3 );
	   }
	    
	   public static void eval(List<Integer> list, Predicate<Integer> predicate) {
	      for(Integer n: list) {
	         if(predicate.test(n)) {
	            System.out.print(n + " "+" ");
	         }
	      }
	      System.out.println();
	   }

执行结果:

4. 接口的默认方法

  即在一个接口里可以使用 default关键字声明具体的方法,这个特征又叫做扩展方法,同时也允许使用static声明具体方法。

public interface Test1 {
	void sayMsg(String msg);
	default void write(String str) {
		
	}
	public static boolean writes(String str) {
		if(!StringUtils.isNullOrEmpty(str.trim())) {
			return true;
		}
		return false;
	}
}

5. 新工具

 新的编译工具,如:Nashorn引擎jjs,类依赖分析器jdeps.

6.Stream API

  新添加的Stream API(java.util.stream)把真正的函数式编程风格引入到java中。

7. Date Time  API

    加强对日期与时间的处理

8. Optional类

   Optional类用来解决空指针异常

9. Nashorn ,JavaScript引擎

   提供了一个新的Nashorn JavaScript 引擎,它允许我们在jvm上运行特定的JavaScript应用。

进jdk1.8的新特性小结至此,如有不同意见欢迎留言指正。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值