久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    JDK8 十大新特性

     KeepSimple 2020-07-07
    復(fù)制代碼
      1 /**
      2  * 
      3  * @ClassName:JDK8_features
      4  * @Description:JDK8新特性
      5  * @author diandian.zhang
      6  * @date 2017年4月17日上午9:13:24
      7  */
      8 public class JDK8_features {
      9     
     10     public List<Integer> list = Lists.newArrayList(1,2,3,4,5,6,7,8,9,10);
     11     
     12     /**
     13      * 1.Lambda表達(dá)式
     14      */
     15     @Test
     16     public void testLambda(){
     17         list.forEach(System.out::println);
     18         list.forEach(e -> System.out.println("方式二:"+e));
     19     }
     20     
     21     /**
     22      * 2.Stream函數(shù)式操作流元素集合
     23      */
     24     @Test
     25     public void testStream(){
     26         List<Integer> nums = Lists.newArrayList(1,1,null,2,3,4,null,5,6,7,8,9,10);
     27         System.out.println("求和:"+nums
     28                 .stream()//轉(zhuǎn)成Stream
     29                 .filter(team -> team!=null)//過濾
     30                 .distinct()//去重
     31                 .mapToInt(num->num*2)//map操作
     32                 .skip(2)//跳過前2個(gè)元素
     33                 .limit(4)//限制取前4個(gè)元素
     34                 .peek(System.out::println)//流式處理對(duì)象函數(shù)
     35                 .sum());//
     36     }
     37     
     38     /**
     39      * 3.接口新增:默認(rèn)方法與靜態(tài)方法
     40      *  default 接口默認(rèn)實(shí)現(xiàn)方法是為了讓集合類默認(rèn)實(shí)現(xiàn)這些函數(shù)式處理,而不用修改現(xiàn)有代碼
     41      *  (List繼承于Iterable<T>,接口默認(rèn)方法不必須實(shí)現(xiàn)default forEach方法)
     42      */
     43     @Test
     44     public void testDefaultFunctionInterface(){
     45         //可以直接使用接口名.靜態(tài)方法來訪問接口中的靜態(tài)方法
     46         JDK8Interface1.staticMethod();
     47         //接口中的默認(rèn)方法必須通過它的實(shí)現(xiàn)類來調(diào)用
     48         new JDK8InterfaceImpl1().defaultMethod();
     49         //多實(shí)現(xiàn)類,默認(rèn)方法重名時(shí)必須復(fù)寫
     50         new JDK8InterfaceImpl2().defaultMethod();
     51     }
     52     
     53     public class JDK8InterfaceImpl1 implements JDK8Interface1 {
     54         //實(shí)現(xiàn)接口后,因?yàn)槟J(rèn)方法不是抽象方法,重寫/不重寫都成!
     55 //        @Override
     56 //        public void defaultMethod(){
     57 //            System.out.println("接口中的默認(rèn)方法");
     58 //        }
     59     }
     60     
     61     public class JDK8InterfaceImpl2 implements JDK8Interface1,JDK8Interface2 {
     62         //實(shí)現(xiàn)接口后,默認(rèn)方法名相同,必須復(fù)寫默認(rèn)方法
     63         @Override
     64         public void defaultMethod() {
     65             //接口的
     66             JDK8Interface1.super.defaultMethod();
     67             System.out.println("實(shí)現(xiàn)類復(fù)寫重名默認(rèn)方法!!!!");
     68         }
     69     }
     70         
     71     /**
     72      * 4.方法引用,與Lambda表達(dá)式聯(lián)合使用
     73      */
     74     @Test
     75     public void testMethodReference(){
     76         //構(gòu)造器引用。語法是Class::new,或者更一般的Class< T >::new,要求構(gòu)造器方法是沒有參數(shù);
     77         final Car car = Car.create( Car::new );
     78         final List< Car > cars = Arrays.asList( car );
     79         //靜態(tài)方法引用。語法是Class::static_method,要求接受一個(gè)Class類型的參數(shù);
     80         cars.forEach( Car::collide );
     81         //任意對(duì)象的方法引用。它的語法是Class::method。無參,所有元素調(diào)用;
     82         cars.forEach( Car::repair );
     83         //特定對(duì)象的方法引用,它的語法是instance::method。有參,在某個(gè)對(duì)象上調(diào)用方法,將列表元素作為參數(shù)傳入;
     84         final Car police = Car.create( Car::new );
     85         cars.forEach( police::follow );
     86     }
     87     
     88     public static class Car {
     89         public static Car create( final Supplier< Car > supplier ) {
     90             return supplier.get();
     91         }              
     92              
     93         public static void collide( final Car car ) {
     94             System.out.println( "靜態(tài)方法引用 " + car.toString() );
     95         }
     96              
     97         public void repair() {   
     98             System.out.println( "任意對(duì)象的方法引用 " + this.toString() );
     99         }
    100         
    101         public void follow( final Car car ) {
    102             System.out.println( "特定對(duì)象的方法引用 " + car.toString() );
    103         }
    104     }
    105     
    106     /**
    107      * 5.引入重復(fù)注解
    108      * 1.@Repeatable 
    109      * 2.可以不用以前的“注解容器”寫法,直接寫2次相同注解即可
    110      * 
    111      * Java 8在編譯器層做了優(yōu)化,相同注解會(huì)以集合的方式保存,因此底層的原理并沒有變化。
    112      */
    113     @Test
    114     public void RepeatingAnnotations(){
    115         RepeatingAnnotations.main(null);
    116     }
    117     
    118     /**
    119      * 6.類型注解
    120      * 新增類型注解:ElementType.TYPE_USE 和ElementType.TYPE_PARAMETER(在Target上)
    121      * 
    122      */
    123     @Test
    124     public void ElementType(){
    125         Annotations.main(null);
    126     }
    127     
    128     /**
    129      * 7.最新的Date/Time API (JSR 310)
    130      */
    131     @Test
    132     public void DateTime(){
    133         //1.Clock
    134         final Clock clock = Clock.systemUTC();
    135         System.out.println( clock.instant() );
    136         System.out.println( clock.millis() );
    137         
    138         //2. ISO-8601格式且無時(shí)區(qū)信息的日期部分
    139         final LocalDate date = LocalDate.now();
    140         final LocalDate dateFromClock = LocalDate.now( clock );
    141                  
    142         System.out.println( date );
    143         System.out.println( dateFromClock );
    144                  
    145         // ISO-8601格式且無時(shí)區(qū)信息的時(shí)間部分
    146         final LocalTime time = LocalTime.now();
    147         final LocalTime timeFromClock = LocalTime.now( clock );
    148                  
    149         System.out.println( time );
    150         System.out.println( timeFromClock );
    151         
    152         // 3.ISO-8601格式無時(shí)區(qū)信息的日期與時(shí)間
    153         final LocalDateTime datetime = LocalDateTime.now();
    154         final LocalDateTime datetimeFromClock = LocalDateTime.now( clock );
    155                  
    156         System.out.println( datetime );
    157         System.out.println( datetimeFromClock );
    158         
    159         // 4.特定時(shí)區(qū)的日期/時(shí)間,
    160         final ZonedDateTime zonedDatetime = ZonedDateTime.now();
    161         final ZonedDateTime zonedDatetimeFromClock = ZonedDateTime.now( clock );
    162         final ZonedDateTime zonedDatetimeFromZone = ZonedDateTime.now( ZoneId.of( "America/Los_Angeles" ) );
    163                  
    164         System.out.println( zonedDatetime );
    165         System.out.println( zonedDatetimeFromClock );
    166         System.out.println( zonedDatetimeFromZone );
    167         
    168         //5.在秒與納秒級(jí)別上的一段時(shí)間
    169         final LocalDateTime from = LocalDateTime.of( 2014, Month.APRIL, 16, 0, 0, 0 );
    170         final LocalDateTime to = LocalDateTime.of( 2015, Month.APRIL, 16, 23, 59, 59 );
    171          
    172         final Duration duration = Duration.between( from, to );
    173         System.out.println( "Duration in days: " + duration.toDays() );
    174         System.out.println( "Duration in hours: " + duration.toHours() );
    175     }
    176     
    177     /**
    178      * 8.新增base64加解密API
    179      */
    180     @Test
    181     public void testBase64(){
    182         final String text = "就是要測(cè)試加解密!!abjdkhdkuasu!!@@@@";
    183         String encoded = Base64.getEncoder()
    184             .encodeToString( text.getBytes( StandardCharsets.UTF_8 ) );
    185         System.out.println("加密后="+ encoded );
    186          
    187         final String decoded = new String( 
    188             Base64.getDecoder().decode( encoded ),
    189             StandardCharsets.UTF_8 );
    190         System.out.println( "解密后="+decoded );
    191     }
    192     
    193     /**
    194      * 9.數(shù)組并行(parallel)操作
    195      */
    196     @Test
    197     public void testParallel(){
    198         long[] arrayOfLong = new long [ 20000 ];        
    199         //1.給數(shù)組隨機(jī)賦值
    200         Arrays.parallelSetAll( arrayOfLong, 
    201             index -> ThreadLocalRandom.current().nextInt( 1000000 ) );
    202         //2.打印出前10個(gè)元素
    203         Arrays.stream( arrayOfLong ).limit( 10 ).forEach( 
    204             i -> System.out.print( i + " " ) );
    205         System.out.println();
    206         //3.數(shù)組排序
    207         Arrays.parallelSort( arrayOfLong );     
    208         //4.打印排序后的前10個(gè)元素
    209         Arrays.stream( arrayOfLong ).limit( 10 ).forEach( 
    210             i -> System.out.print( i + " " ) );
    211         System.out.println();
    212     }
    213     
    214     /**
    215      * 10.JVM的PermGen空間被移除:取代它的是Metaspace(JEP 122)元空間
    216      */
    217     @Test
    218     public void testMetaspace(){
    219         //-XX:MetaspaceSize初始空間大小,達(dá)到該值就會(huì)觸發(fā)垃圾收集進(jìn)行類型卸載,同時(shí)GC會(huì)對(duì)該值進(jìn)行調(diào)整
    220         //-XX:MaxMetaspaceSize最大空間,默認(rèn)是沒有限制
    221         //-XX:MinMetaspaceFreeRatio在GC之后,最小的Metaspace剩余空間容量的百分比,減少為分配空間所導(dǎo)致的垃圾收集
    222         //-XX:MaxMetaspaceFreeRatio在GC之后,最大的Metaspace剩余空間容量的百分比,減少為釋放空間所導(dǎo)致的垃圾收集
    223     }
    224     
    225 }
    引用到的相關(guān)類:
    復(fù)制代碼
     1 public interface JDK8Interface1 {
     2 
     3     //1.接口中可以定義靜態(tài)方法了
     4     public static void staticMethod(){
     5         System.out.println("接口中的靜態(tài)方法");
     6     }
     7     
     8     //2.使用default之后就可以定義普通方法的方法體了
     9     public default void defaultMethod(){
    10         System.out.println("接口中的默認(rèn)方法");
    11     }
    12 }
    13 
    14 public interface JDK8Interface2 {
    15 
    16     //接口中可以定義靜態(tài)方法了
    17     public static void staticMethod(){
    18         System.out.println("接口中的靜態(tài)方法");
    19     }
    20     //使用default之后就可以定義普通方法的方法體了
    21     public default void defaultMethod(){
    22         System.out.println("接口中的默認(rèn)方法");
    23     }
    24 }
    25 
    26 /**
    27  * 
    28  * @ClassName:RepeatingAnnotations
    29  * @Description:重復(fù)注解@Repeatable
    30  * @author diandian.zhang
    31  * @date 2017年3月31日下午3:48:13
    32  */
    33 public class RepeatingAnnotations {
    34     @Target( ElementType.TYPE )
    35     @Retention( RetentionPolicy.RUNTIME )
    36     public @interface Filters {
    37         Filter[] value();
    38     }
    39      
    40     @Target( ElementType.TYPE )
    41     @Retention( RetentionPolicy.RUNTIME )
    42     @Repeatable( Filters.class )
    43     public @interface Filter {
    44         String value();
    45         String value2();
    46     };
    47      
    48     @Filter( value="filter1",value2="111" )
    49     @Filter( value="filter2", value2="222")
    50     //@Filters({@Filter(  value="filter1",value2="111" ),@Filter(  value="filter2", value2="222")}).注意:JDK8之前:1.沒有@Repeatable2.采用本行“注解容器”寫法
    51     public interface Filterable {        
    52     }
    53          
    54     public static void main(String[] args) {
    55         //獲取注解后遍歷打印值
    56         for( Filter filter: Filterable.class.getAnnotationsByType( Filter.class ) ) {
    57             System.out.println( filter.value() +filter.value2());
    58         }
    59     }
    60 }
    61 
    62 /**
    63  * 
    64  * @ClassName:Annotations
    65  * @Description:新增類型注解:ElementType.TYPE_USE 和ElementType.TYPE_PARAMETER(在Target上)
    66  * @author diandian.zhang
    67  * @date 2017年3月31日下午4:39:57
    68  */
    69 public class Annotations {
    70     @Retention( RetentionPolicy.RUNTIME )
    71     @Target( { ElementType.TYPE_USE, ElementType.TYPE_PARAMETER } )
    72     public @interface NonEmpty {        
    73     }
    74          
    75     public static class Holder< @NonEmpty T > extends @NonEmpty Object {
    76         public void method() throws @NonEmpty Exception {           
    77         }
    78     }
    79          
    80     public static void main(String[] args) {
    81         final Holder< String > holder = new @NonEmpty Holder< String >();       
    82         @NonEmpty Collection< @NonEmpty String > strings = new ArrayList<>();       
    83     }
    84 }
    復(fù)制代碼

     

    復(fù)制代碼

      本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
      轉(zhuǎn)藏 分享 獻(xiàn)花(0

      0條評(píng)論

      發(fā)表

      請(qǐng)遵守用戶 評(píng)論公約

      類似文章 更多

      主站蜘蛛池模板: 久久婷婷五月综合色国产免费观看| 亚洲色欲色欱WWW在线| 一区二区亚洲人妻精品| 熟女系列丰满熟妇AV| 西西人体44WWW高清大胆| 欧美又粗又大XXXXBBBB疯狂| 免费无码又爽又刺激高潮虎虎视频| 夜夜爱夜鲁夜鲁很鲁| 在线观看免费人成视频播放| 国产成人一区二区不卡| 国产又黄又爽又刺激的免费网址 | 白嫩少妇激情无码| 日韩高清亚洲日韩精品一区二区| 巨茎中出肉欲人妻在线视频| 日日摸日日碰夜夜爽亚洲| 国产成人无码A区在线观| 午夜无码片在线观看影院A| 亚洲理论在线A中文字幕| 精品一区二区三区免费播放| 成人3D动漫一区二区三区| 天干天干天啪啪夜爽爽AV| 高清自拍亚洲精品二区| 国产成人无码A区在线观看视频| 亚洲偷自拍国综合| 国精无码欧精品亚洲一区| 成年女人片免费视频播放A| 久久综合九色欧美综合狠狠| 第一亚洲中文久久精品无码| 中文字幕av无码免费一区| 中文字幕理伦午夜福利片| 中文字幕人妻精品在线| 国产AV人人夜夜澡人人爽| 免费无码成人AV片在线| 无码精品国产D在线观看| 久久大香伊蕉在人线免费AV| 国产精品亚洲二区亚瑟| 亚州少妇无套内射激情视频| 日本XXXX色视频在线观看免费不卡| 国产盗摄xxxx视频xxxx| 亚洲精品无码永久在线观看你懂的| 久久综合久中文字幕青草|