赞
踩
- interface JdkTest{
- public abstract void PrintHello();
- default void test(){
- System.out.println("this is a test method");
- }
- }
- public class demo2 implements JdkTest{
- public void PrintHello(){
- System.out.println("this is a PrintHello method");
- }
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- demo2 d=new demo2();
- d.PrintHello();
- d.test();
- }
-
- }
-

在代码中,接口JdkTest有一个抽象方法:PrintHello();以及一个default方法test。demo2实现该接口,重写抽象方法后,可以在测试中看见直接调用test方法。输出结果也符合test方法的输出。
在jdk1.8之前,非基本对象的比较需要用到比较器,使用较为麻烦,具体代码如下:
- public class demo3 {
- public static void main(String[] args) {
- List <String> rank =Arrays.asList("first","second","third");
- Collections.sort(rank, new Comparator<String>() {
- @Override
- public int compare(String a,String b){
- return b.compareTo(a);
- }
- } );
- for(String name:rank){
- System.out.println(name);
- }
- }
-
- }
Arrays.asList的作用是将列表转换成数组,二者捆绑,修改其中一个另一个也将修改。但是不可用于基本数据类型数组。这里创建一个匿名比较器对象,然后传递给sort方法。
jdk1.8使用lambda降低了代码量,使得代码更加简洁。
- public class demo3 {
- public static void main(String[] args) {
- List <String> rank1 =Arrays.asList("first","second","third");
- List <String> rank2=Arrays.asList("first","second","third");
- List <String> rank3=Arrays.asList("first","second","third");
- System.out.println("------jdk1.8之前------");
- Collections.sort(rank1, new Comparator<String>() {
- @Override
- public int compare(String a,String b){
- return b.compareTo(a);
- }
- } );
- for(String name:rank1){
- System.out.println(name);
- }
- System.out.println("------lambda1.0------");
- Collections.sort(rank2,(String a,String b)->{
- return b.compareTo(a);
- } );
- for(String name:rank2){
- System.out.println(name);
- }
- System.out.println("------lambda2.0------");
- Collections.sort(rank3,(String a,String b)->b.compareTo(a));
- for(String name:rank2){
- System.out.println(name);
- }
- }
- }

函数是接口仅包含一个抽象方法,但可以有default方法,因为这个不是抽象方法。经常与lanbda合用。用FunctionalInterface注解,则被这个注解的接口如果超过一个抽象类方法,那么系统就会被报错。
在jdk1.8中,注解中增加使用范围,可以在任何范围使用;新增2个ElementType,分别是TYPE_USE和TYPE_PARAMETER;允许重复注解。
这一部分直接使用代码说明,注释很充分。个人觉得1.8后的DateAPI挺好用。
- /*
- * 新版本的DateTimeFormatter是线程安全的。
- */
- public class demo1 {
-
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- System.out.println("*********clock时钟*********");
- /*
- * Clock是时区敏感的,可以用System.currentTimeMillis()来获取当前微秒数
- * 也能用Instant类来获取某一个特定的时间,也可以用来创建老的java.util.Date对象
- */
- Clock clock =Clock.systemDefaultZone();
- long millis =clock.millis();
- System.out.println(millis+":"+System.currentTimeMillis());
- Instant instant =clock.instant();
- Date legacyDate =Date.from(instant);
- System.out.println(legacyDate);
- System.out.println("*******Timezones时区*******");
- /*
- * 在新API中使用 ZoneId来表示。时区可用静态方法of获取
- */
- System.out.println(ZoneId.getAvailableZoneIds());
- ZoneId zone1 =ZoneId.of("Europe/Berlin");
- ZoneId zone2 =ZoneId.of("Brazil/East");
- System.out.println(zone1.getRules());
- System.out.println(zone2.getRules());
- System.out.println("*********LocalTime*********");
- /*
- *定义一个没有时区信息的时间。例如:17:30:15
- */
- LocalTime now1 =LocalTime.now(zone1);
- LocalTime now2 =LocalTime.now(zone2);
- System.out.println(now1.isBefore(now2));
- long hoursBetween =ChronoUnit.HOURS.between(now1, now2);
- long minutesBetween=ChronoUnit.MINUTES.between(now1, now2);
- System.out.println(hoursBetween);
- System.out.println(minutesBetween);
- System.out.println("LocalTime提供多种工厂方法简化对象的创建,包括解析时间字符串");
- LocalTime late=LocalTime.of(23, 59, 59);
- System.out.println(late);
- DateTimeFormatter germanFormatter=DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT).withLocale(Locale.GERMAN);
- LocalTime leetTime =LocalTime.parse("13:37",germanFormatter);
- System.out.println(leetTime);
- System.out.println("******LocalDate******");
- /*
- * LocalDate表示确切的日期,如:2018-08-03 该对象值是不可变的。因此同String,修改后返回的是一个新实例。
- */
- LocalDate today =LocalDate.now();
- LocalDate tomorrow=today.plus(1,ChronoUnit.DAYS);
- LocalDate yesterday=tomorrow.minusDays(2);
- System.out.println(yesterday);
- LocalDate independenceDay =LocalDate.of(2014, Month.JULY, 4);
- DayOfWeek dayOfWeek=independenceDay.getDayOfWeek();
- System.out.println(dayOfWeek);
- DateTimeFormatter germanFormatter1 =DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM).withLocale(Locale.GERMAN);
- LocalDate xms=LocalDate.parse("24.12.2014", germanFormatter1);
- System.out.println(xms);
- System.out.println("***LocalDateTime****");
- /*
- * 将LocalDate和LocalTime合并到同一个对象上。这三个都是不可变的
- */
- LocalDateTime sylvester = LocalDateTime.of(2018, Month.AUGUST, 1, 0, 5,29);
- DayOfWeek dayOfWeek1= sylvester.getDayOfWeek();
- Month month=sylvester.getMonth();
- int dayOfMonth1=sylvester.getDayOfMonth();
- System.out.println(dayOfWeek1);
- System.out.println(month);
- System.out.println(dayOfMonth1);
- long minuteOfDay=sylvester.getLong(ChronoField.MINUTE_OF_DAY);//距离给定的时间8.1日凌晨过去了几分钟。
- System.out.println(minuteOfDay);
- /*
- * 附加时区信息,将其转换为一个时间点Instatn对象,然后就能容易转换为老的java.util.Date.
- */
- Instant instant1=sylvester.atZone(ZoneId.systemDefault()).toInstant();
- Date legacyDate1 =Date.from(instant1);
- System.out.println(legacyDate1);
- /*
- * LocalDateTime除了使用预定义好的格式之外,还可以自己的定义格式
- */
- DateTimeFormatter formatrer=DateTimeFormatter.ofPattern("MM dd, yyyy - HH:mm");
- LocalDateTime parsed= LocalDateTime.parse("Nov 03, 2014 - 07:13",formatrer);
- String string=formatrer.format(parsed);
- System.out.println(string);
-
- }
-
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。