当前位置:   article > 正文

JDK1.8几大新特性_fillstyle在jdk几

fillstyle在jdk几

1.接口这允许使用default方法,并在一个类实现该接口后能直接调用default:

  1. interface JdkTest{
  2. public abstract void PrintHello();
  3. default void test(){
  4. System.out.println("this is a test method");
  5. }
  6. }
  7. public class demo2 implements JdkTest{
  8. public void PrintHello(){
  9. System.out.println("this is a PrintHello method");
  10. }
  11. public static void main(String[] args) {
  12. // TODO Auto-generated method stub
  13. demo2 d=new demo2();
  14. d.PrintHello();
  15. d.test();
  16. }
  17. }

在代码中,接口JdkTest有一个抽象方法:PrintHello();以及一个default方法test。demo2实现该接口,重写抽象方法后,可以在测试中看见直接调用test方法。输出结果也符合test方法的输出。

2.Lambda表达式:

在jdk1.8之前,非基本对象的比较需要用到比较器,使用较为麻烦,具体代码如下:

  1. public class demo3 {
  2. public static void main(String[] args) {
  3. List <String> rank =Arrays.asList("first","second","third");
  4. Collections.sort(rank, new Comparator<String>() {
  5. @Override
  6. public int compare(String a,String b){
  7. return b.compareTo(a);
  8. }
  9. } );
  10. for(String name:rank){
  11. System.out.println(name);
  12. }
  13. }
  14. }

 Arrays.asList的作用是将列表转换成数组,二者捆绑,修改其中一个另一个也将修改。但是不可用于基本数据类型数组。这里创建一个匿名比较器对象,然后传递给sort方法。

jdk1.8使用lambda降低了代码量,使得代码更加简洁。

  1. public class demo3 {
  2. public static void main(String[] args) {
  3. List <String> rank1 =Arrays.asList("first","second","third");
  4. List <String> rank2=Arrays.asList("first","second","third");
  5. List <String> rank3=Arrays.asList("first","second","third");
  6. System.out.println("------jdk1.8之前------");
  7. Collections.sort(rank1, new Comparator<String>() {
  8. @Override
  9. public int compare(String a,String b){
  10. return b.compareTo(a);
  11. }
  12. } );
  13. for(String name:rank1){
  14. System.out.println(name);
  15. }
  16. System.out.println("------lambda1.0------");
  17. Collections.sort(rank2,(String a,String b)->{
  18. return b.compareTo(a);
  19. } );
  20. for(String name:rank2){
  21. System.out.println(name);
  22. }
  23. System.out.println("------lambda2.0------");
  24. Collections.sort(rank3,(String a,String b)->b.compareTo(a));
  25. for(String name:rank2){
  26. System.out.println(name);
  27. }
  28. }
  29. }


3.函数式接口

函数是接口仅包含一个抽象方法,但可以有default方法,因为这个不是抽象方法。经常与lanbda合用。用FunctionalInterface注解,则被这个注解的接口如果超过一个抽象类方法,那么系统就会被报错。

4.注解

在jdk1.8中,注解中增加使用范围,可以在任何范围使用;新增2个ElementType,分别是TYPE_USE和TYPE_PARAMETER;允许重复注解。

5.新的DateAPI

这一部分直接使用代码说明,注释很充分。个人觉得1.8后的DateAPI挺好用。

  1. /*
  2. * 新版本的DateTimeFormatter是线程安全的。
  3. */
  4. public class demo1 {
  5. public static void main(String[] args) {
  6. // TODO Auto-generated method stub
  7. System.out.println("*********clock时钟*********");
  8. /*
  9. * Clock是时区敏感的,可以用System.currentTimeMillis()来获取当前微秒数
  10. * 也能用Instant类来获取某一个特定的时间,也可以用来创建老的java.util.Date对象
  11. */
  12. Clock clock =Clock.systemDefaultZone();
  13. long millis =clock.millis();
  14. System.out.println(millis+":"+System.currentTimeMillis());
  15. Instant instant =clock.instant();
  16. Date legacyDate =Date.from(instant);
  17. System.out.println(legacyDate);
  18. System.out.println("*******Timezones时区*******");
  19. /*
  20. * 在新API中使用 ZoneId来表示。时区可用静态方法of获取
  21. */
  22. System.out.println(ZoneId.getAvailableZoneIds());
  23. ZoneId zone1 =ZoneId.of("Europe/Berlin");
  24. ZoneId zone2 =ZoneId.of("Brazil/East");
  25. System.out.println(zone1.getRules());
  26. System.out.println(zone2.getRules());
  27. System.out.println("*********LocalTime*********");
  28. /*
  29. *定义一个没有时区信息的时间。例如:173015
  30. */
  31. LocalTime now1 =LocalTime.now(zone1);
  32. LocalTime now2 =LocalTime.now(zone2);
  33. System.out.println(now1.isBefore(now2));
  34. long hoursBetween =ChronoUnit.HOURS.between(now1, now2);
  35. long minutesBetween=ChronoUnit.MINUTES.between(now1, now2);
  36. System.out.println(hoursBetween);
  37. System.out.println(minutesBetween);
  38. System.out.println("LocalTime提供多种工厂方法简化对象的创建,包括解析时间字符串");
  39. LocalTime late=LocalTime.of(23, 59, 59);
  40. System.out.println(late);
  41. DateTimeFormatter germanFormatter=DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT).withLocale(Locale.GERMAN);
  42. LocalTime leetTime =LocalTime.parse("13:37",germanFormatter);
  43. System.out.println(leetTime);
  44. System.out.println("******LocalDate******");
  45. /*
  46. * LocalDate表示确切的日期,如:2018-08-03 该对象值是不可变的。因此同String,修改后返回的是一个新实例。
  47. */
  48. LocalDate today =LocalDate.now();
  49. LocalDate tomorrow=today.plus(1,ChronoUnit.DAYS);
  50. LocalDate yesterday=tomorrow.minusDays(2);
  51. System.out.println(yesterday);
  52. LocalDate independenceDay =LocalDate.of(2014, Month.JULY, 4);
  53. DayOfWeek dayOfWeek=independenceDay.getDayOfWeek();
  54. System.out.println(dayOfWeek);
  55. DateTimeFormatter germanFormatter1 =DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM).withLocale(Locale.GERMAN);
  56. LocalDate xms=LocalDate.parse("24.12.2014", germanFormatter1);
  57. System.out.println(xms);
  58. System.out.println("***LocalDateTime****");
  59. /*
  60. * 将LocalDate和LocalTime合并到同一个对象上。这三个都是不可变的
  61. */
  62. LocalDateTime sylvester = LocalDateTime.of(2018, Month.AUGUST, 1, 0, 5,29);
  63. DayOfWeek dayOfWeek1= sylvester.getDayOfWeek();
  64. Month month=sylvester.getMonth();
  65. int dayOfMonth1=sylvester.getDayOfMonth();
  66. System.out.println(dayOfWeek1);
  67. System.out.println(month);
  68. System.out.println(dayOfMonth1);
  69. long minuteOfDay=sylvester.getLong(ChronoField.MINUTE_OF_DAY);//距离给定的时间8.1日凌晨过去了几分钟。
  70. System.out.println(minuteOfDay);
  71. /*
  72. * 附加时区信息,将其转换为一个时间点Instatn对象,然后就能容易转换为老的java.util.Date.
  73. */
  74. Instant instant1=sylvester.atZone(ZoneId.systemDefault()).toInstant();
  75. Date legacyDate1 =Date.from(instant1);
  76. System.out.println(legacyDate1);
  77. /*
  78. * LocalDateTime除了使用预定义好的格式之外,还可以自己的定义格式
  79. */
  80. DateTimeFormatter formatrer=DateTimeFormatter.ofPattern("MM dd, yyyy - HH:mm");
  81. LocalDateTime parsed= LocalDateTime.parse("Nov 03, 2014 - 07:13",formatrer);
  82. String string=formatrer.format(parsed);
  83. System.out.println(string);
  84. }
  85. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/52890
推荐阅读
相关标签
  

闽ICP备14008679号