zoukankan      html  css  js  c++  java
  • Java关键技术强化:JDK5.0新特性1 (day07)

    • 运行环境

       JDK8+IntelliJ IDEA 2018.3 x64

     

    • 问题

    静态导入?

    自动装箱/拆箱?

    for-each循环?

    可变参数?

    枚举?

     

    • JDK 5.0 新特性简介

    JDK 5.0 的一个重要主题就是通过新增一些特性来简化开发,这些特性包括:

    静态导入、自动装箱/拆箱 for-each循环、可变参数、枚举、泛型、注解、使用这些特性有助于编写更加清晰,精悍,安全的代码。

     

    • 静态导入

      JDK5.0增加的静态导入语法用于导入指定类的某个静态属性值(方法)或全部静态属性值(方法) 静态导入语句使用 import static 语句

      导入指定类的单个静态属性:import static java.lang.System.out

           导入指定类全部静态属性:import static java.lang.Math.*

      

    代码示例

     1 package com.chenmengfan.demo1;
     2 
     3 //导入System类的单个静态属性out
     4 import static java.lang.System.out;
     5 //导入Math类的所有静态成员
     6 import static java.lang.Math.*;
     7 //不推荐这样使用,这样会让性能变慢,除非该类的静态方法或属性被大量调用
     8 //import static java.lang.Math.abs;
     9 //import static java.lang.Math.PI;
    10 
    11 /*
    12 * 1.导入类的静态属性
    13 * import java.lang.System 使用频率极高
    14 * 2.没有显示导入
    15 */
    16 
    17 public class Demo1 {
    18     public static void main(String[] args) {
    19         out.println("hello");
    20         out.println(abs(-1)); //绝对值
    21         out.println(PI); //打印圆周率 Math
    22 
    23         //当前类中若用到某一个类的静态方法或静态属性特别多,可用类名 *
    24     }
    25 }

     

    运行效果

    hello
    1
    3.141592653589793
    

      

    • 自动装箱/拆箱

       自动装箱(autoboxing):把一个基本数据类型直接赋给对应的包装类变量, 或者赋给 Object 变量 自动拆箱:把包装类对象直接赋给一个对应的基本类型变量

      基本数据类型的自动拆箱与装箱

      

    代码示例

     1 package com.chenmengfan.demo2;
     2 
     3 public class Demo2 {
     4     public static void main(String[] args) {
     5         Integer integer1 = 400;
     6         Integer integer2 = 400;//自动装箱
     7 
     8         System.out.println(integer1.equals(integer2));
     9         System.out.println(integer1 == integer2);
    10 
    11         // == 比较的是 是否是同一个对象
    12 
    13         // 不是每一个equals都是比较值 String
    14         // equals 是object equals 就是 ==
    15         // 所有除非该类重写了equals 否则equals== "=="
    16 
    17         int a = 400;
    18         int b = 400;
    19 
    20         System.out.println(a == b);
    21 
    22         Integer integer3 = -128;
    23         Integer integer4 = -128;
    24 
    25         System.out.println(integer3.equals(integer4));
    26         System.out.println(integer3 == integer4);
    27 
    28        
    29     }
    30 }

    运行效果

    true
    false
    true
    true
    true
    
    • for-each循环

    使用foreach循环遍历数组和集合元素时, 无须获得数组和集合长度, 无须根据索引来访问数组元素和集合元素,

    forearch 循环自动遍历数组和集合的每个元素

    语法格式:

    for(type varName : array | collection){

      //varName 自动迭代访问每一个元素

    }

     

    代码示例

     1 package com.chenmengfan.demo3;
     2 
     3 import java.util.ArrayList;
     4 import java.util.HashSet;
     5 import java.util.List;
     6 import java.util.Set;
     7 
     8 /*
     9 *  增强型for循环,不是基于index下标去遍历的,可用Set来证明.
    10 * */
    11 public class Demo3 {
    12     public static void main(String[] args) {
    13         // 集合第一次用增强型for循环 迭代器专门为集合打造的
    14         List list1 = new ArrayList();  // 集合 array长度可变的数组
    15         list1.add(1);
    16         list1.add(2);
    17         list1.add(3);
    18         list1.add(4);
    19         list1.add(5);
    20         list1.add(6);
    21 
    22         for (int i = 0;i<list1.size();i++){
    23             System.out.println("i:"+list1.get(i));
    24         }
    25 
    26         /*
    27         *  相比传统的for循环,增强型for循环代码简洁
    28         * */
    29 
    30         for (Object i : list1) {
    31             System.out.println(i);
    32         }
    33 
    34         //集合 Set 无序(无下标) 迭代器 增强型for
    35 
    36         Set set = new HashSet();
    37         set.add("a");
    38         set.add("b");
    39         set.add("c");
    40 
    41         for (Object o : set) {
    42             System.out.println(o);
    43         }
    44     }
    45 }

     运行效果

    i:1
    i:2
    i:3
    i:4
    i:5
    i:6
    1
    2
    3
    4
    5
    6
    a
    b
    c
    

      

    • 可变参数

      • 从JDK5.0 开始, Java 允许定义形参长度可变的参数,从而允许为方法指定数量不确定的形参。
      • 若在定义方法时, 在最后一个形参的类型后增加三点(…), 则表明该形参可以接受多个参数值, 多个参数值被当成数组传入。
      • 可变形参只能处于形参列表的最后, 所以一个方法最多只能有一个长度可变的形参。
      • 调用包含一个可变形参的方法时, 可以为该形参传入多个参数或一个数组。

    代码示例    

     

     

     1 package com.chenmengfan.demo4;
     2 
     3 /**
     4  * 定义可变长度参数时:两个注意
     5  * 1.可变长度的参数必须置于形参列表的最后
     6  * 2.可变长度的参数在形参列表中只能出现一个
     7  */
     8 public class Demo4 {
     9     public static void main(String[] args) {
    10         Demo4.fun("aa");
    11         Demo4.fun("bb",1);
    12         Demo4.fun("cc",1,2,3);
    13         int[] arr = new int[]{10,20,30};
    14         Demo4.fun("dd",arr);
    15     }
    16 
    17     public static void fun(String s,int...x){
    18         System.out.println("---------");
    19         System.out.println(x.length);
    20         for (int i : x){
    21             System.out.println(i);
    22         }
    23     }
    24 }

    运行效果

    ---------
    0
    ---------
    1
    1
    ---------
    3
    1
    2
    3
    ---------
    3
    10
    20
    30
    

      

    • 枚举类

       在某些情况下, 一个类的对象是有限而且固定的(例如:季节类, 行星类), 这种实例有限而且固定的类, 在Java中被称为枚举类。

      枚举类入门

     

        JDK5 新增的enum关键字用于定义枚举类。

    枚举类和普通类的区别:

    • 使用 enum 定义的枚举类默认继承了java.lang.Enum类。
    • 枚举类的构造器只能使用private访问控制符。

     

    • 枚举类的所有实例必须在枚举类中显示列出(”,”分隔,”;”结尾). 列出的事例系统会自动添加 public static final 修饰。

     

    • 所有的枚举类都提供了一个values方法, 该方法可以很方便地遍历所有的枚举值。

     

    JDK5.0 中可以在 switch 表达式中使用枚举类的对象作为表达式, case 子句可以直接使用枚举值的名字, 无需添加枚举类作为限定。

     

      实现接口的枚举类

       和普通Java类一样枚举类可以实现一个或多个接口

        若需要每个枚举值在调用实现的接口方法呈现出不同的行为方式, 则可以让每个枚举值分别来实现该方法。

    • 总结

       在-128 ~ 127 这个范围内直接赋值int数值,Integer不会new 对象。

       日拱一卒,不期速成。

  • 相关阅读:
    SpringBoot 启动报 No bean named 'org.springframework.context.annotation.ConfigurationClassPostProcessor.importRegistry' available 异常
    踩坑记录:springboot 不识别properties配置文件
    简单说一下MySQL sum(1) count(1) 区别和联系
    @EnableConfigServer 注解无法导入
    给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
    阿里云服务器
    穷爸爸富爸爸观后感- 生活的抉择
    java request get 请求乱码解决
    递归与八皇后问题
    编译型语言和解释型语言
  • 原文地址:https://www.cnblogs.com/cmf12/p/13567086.html
Copyright © 2011-2022 走看看