JDK8较JDK7部分新特性

参考:浅谈JDK8相对于JDK7的一些新特性
本文所有代码在JDK1.8 中运行

特性一、接口的默认方法

在JDK8中,允许给接口本身添加一个默认的实现。用“default”进行修饰。

/**
 * Created by user on 2017/9/4.
 */
public interface MyComputer {
    default int sum(int a,int b){
        return a+b;
    }
    int subtraction(int a,int b);
}

public class test2170814 implements MyComputer{
    public int subtraction(int a, int b) {
        return a-b;
    }
    public static void main(String[] args){
        MyComputer a = new test2170814() ;
        System.out.println(a.sum(1,3));
        System.out.println(a.subtraction(3,2));

    }
}

运行结果:
4
1

特性二、静态方法与构造函数的引用

  1. 静态方法引用

用来存储这个引用的类型用@FunctionlaInterface注解来标识。

//@param <F> 传值类型
//@param <T> 结果类型
public class test1 {
     public static void main(String[] args){
            Fun<String,String> fun = test1::testMethod;
            System.out.println(fun.run("This is a test"));
        }
        @FunctionalInterface
        interface Fun<F,T>{
            T run(F from);
        }
        public static String testMethod(String args){
            return args;
        }

}

运行结果:
This is a test
test1::testMethod 表示test1类中的testMethod方法

  1. 构造函数的引用
public class test1 {
     public static void main(String[] args){
         Fun2<test1> mainFun = test1::new;
          mainFun.run("Creating");
        }
        @FunctionalInterface
        interface Fun2<F extends test1>{
            F run(String args);
        }
        public test1(String arg){
              System.out.println(arg);
             }

}

运行结果:
Creating

特性三、Lambda表达式

在JDK8中,引入了Lambda

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class test1 {
     public static void main(String[] args){
         List<String> list = Arrays.asList("asd","dweas","aw","trs");
         Collections.sort(list,(str1,str2)-> str1.compareTo(str2));
         for(String i :list){
             System.out.println(i);
         }
     }

}

运行结果:
asd
aw
dweas
trs

上述为升序
再来看看降序:

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class test1 {
     public static void main(String[] args){
         List<String> list = Arrays.asList("asd","dweas","aw","trs");
         Collections.sort(list,(str1,str2)-> str2.compareTo(str1));
         for(String i :list){
             System.out.println(i);
         }
     }

}

运行结果:
trs
dweas
aw
asd

核心代码:Collections.sort(list,(str1,str2)-> str2.compareTo(str1));

特性四、反射加强

它允许你直接通过反射获取参数的名字

import java.lang.reflect.Method;
import java.lang.reflect.Parameter;

public class ParameterNames {
    public static void main(String[] args) throws Exception {
        Method method = ParameterNames.class.getMethod( "main", String[].class );
        for( final Parameter parameter: method.getParameters() ) {
            System.out.println( "Parameter: " + parameter.getName() );
        }
    }
}

如果不使用–parameters参数来编译这个类,然后运行这个类,会得到下面的输出:

Parameter: arg0

如果使用–parameters参数来编译这个类,程序的结构会有所不同(参数的真实名字将会显示出来):

Parameter: args

此外,Parameter类有一个很方便的方法isNamePresent()来验证是否可以获取参数的名字。

特性五、JVM新特性

PermGen空间被移除了,取而代之的是Metaspace(JEP
122)。JVM选项-XX:PermSize与-XX:MaxPermSize分别被-XX:MetaSpaceSize与-XX:MaxMetaspaceSize所代替。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值