java语法糖之jdk迭代的新特性汇总

论坛 期权论坛 脚本     
niminba   2021-5-26 12:31   4909   0

语法糖(Syntactic sugar)

是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。

糖1:for-each

功能和传统的fori相似

代码样例

public class Test {
    public static void main(String[] args) {
        int[] num = new int[10];
        for (int i = 0; i < 10; i++) {
            num[i] = i;
        }
        //旧版本
        for (int i = 0; i < num.length; i++) {
            System.out.print(num[i]+" ");
        }
        System.out.println();
        //新版本
        for (int i:num) {
            System.out.print(num[i]+" ");
        }
    }
}

输出对比

0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9

特性

  • for-each从JDK5.0开始引入
  • for-each语法更加简洁
  • for-each可以避免语法越界错误
  • fori可以删除元素,for-each不可以
  • for-each遍历时候不知道当前元素的具体位置
  • for-each只能正向遍历,不能反向遍历
  • for-each不能同时遍历两个集合

糖2:枚举类型

变量的取值只在一个有限的集合里面

代码样例

public class Test {
    public static void main(String[] args) {
        enum Size{
            SMALL,MEDIUM,LARGE;
        }
        Size s1 = Size.SMALL;
        Size s2 = Size.MEDIUM;
        Size s3 = Size.LARGE;
        Size s4 = Size.SMALL;
        System.out.println(s1==s4);
        System.out.println(s3==s4);
    }
}

输出样例

true
false

特性

  • enum声明枚举类,且都是Enum的 子类
  • enum内部有多少个值,就有多少个实例对象
  • 不能直接new枚举类对象
  • 除了枚举的内容 ,还可以添加属性,方法 ,构造函数
  • 构造函数只能是private类型,只能内部调用
  • enum也继承了Enum的子类,也继承了相应方法
  • ordinal()返回枚举值所在的索引位置
  • compareTo()比较两个枚举值的索引位置大小
  • toString()放回枚举值的字符串表示
  • valueOf()将字符串初始化为枚举对象
  • values()返回所有的枚举值

糖3:不定项参数

普通函数的形参列表是固定个数/类型/顺序

JDK5.0提供了不定项参数(可变参数)功能

代码样例

public class Test {
    public static void main(String[] args) {
        test("aaa");
        test("aaa","bbb","ccc");
    }
    public static void test(String... args){
        System.out.println(args.length);
        for (String arg:args) {
            System.out.println(arg);
        }
    }
}

输出样例

1
aaa
3
aaa
bbb
ccc

特性

  • 类型后面加…表示,如代码样例所示
  • 可变参数,实际上是一个数组
  • 一个方法只能有一个不定项参数,且必须位于参数列表的最后
  • 优先规则1:固定参数的方法比可变参数优先级更高
  • 优先规则2:调用语句,同时与两个带可变参数的方法匹配,则报错

糖4:静态导入

import导入程序所需要的类

import static导入一个类的静态方法和静态常量(JDK5.0引入)

代码样例

import static java.lang.Math.pow;
import static java.lang.Math.sqrt;
import static java.lang.System.out;

public class Test {
    public static void main(String[] args) {
        int a=3,b=4,c=0;
        //静态引入
        c = (int) sqrt(pow(a,2)+pow(b,2));
        //原本用法
        c = (int) Math.sqrt(Math.pow(a,2)+Math.pow(b,2));
        //静态引入
        out.println(c);
        //原本用法
        System.out.println(c);
    }
}

输出样例

5
5

特性

  • 可以省略类名,直接用
  • 静态方法具有明确特征,如有重名,需要补充类名
  • 通配符:*

糖5:自动装箱和拆箱

在java中,基本类型放在栈里面,对象则是在堆里开辟了内存空间,把对象的引用存入栈里面,基本类型可以包含在对象里面,所以形象的形容为装箱

从JDK5.0开始引入,简化了基本类型和对象转化的写法

基本类型:boolean/byte/char/int/short/long/float/doubm[]X[X[ o,]X[X[9[yyCBBXX]XXZ[[H\H h%yB]X[X[ [J N e&z+%yB]X[[[X[ [J N]]X[X[ K[J NCBCB OB ]B)B[BO+fy yyg.+9yc#9.#ylg.kd9ycOBOkd99kd9ycy"yofy yy#9c&/`9g*9yc#yiz, B OB B L{yc9"yyB σB99ayc9"yyB. y- B]\HHBH\H\]NBXX\\XX[\X]X[X[]]H ^[K [HNCBCBBXX[\X]X[[[X[^[]X[X[ o,]X[X[9[yyCBBXX]XXZ[[H\H e&z+%yB]X[X[ [J N]X[[[X[ [J N]]X[X[ K[J NCBCB OB ]B)B[BO)*n9ygfy yy9aykza#ze OBO"yyg.+9yc#9c*9+9ycy/o#9.#ylg.kd9ycOBOkd99kd9ycy"yo"yy#9.g OBOgfy y"yy K9y #:gggfy y"yy9y B OB B LK] \\\B σBn9d%`a9;`o#onkalB n.9f(;]yKXY[[z/c9/B9K] \\\KXY[[y9y/B. y-B]\HHBH\H\]NBXX\\[\[Y[]]XXHB]]H[YH NB\YCBXXJ H^[[K [al$9bNCBBXX]XXZ[[H\HJ\LH[\\H]\ J^[K [[\\YNH ^[JHK[XX NCBCBCBB OB ]B/-BBNBal$9bB B) B[BO-a99khyon]]XXyyc#9clyyOBOg*KXgec9d#/&!9iyyOBO)y`k.by.-9y-B\[\\H]\ NBJ\H[\\x) OBO.#yg*:)y`k.by.-9#9cy/oB\[\\H]\ NBJ[\\x)B OB B L\\[y:/oOB σBcc{\\[zn9.N NKLyyo#oyBc#\\[zn9.N9yo#oyB M;\gB σB]y.cy. 9+.g  B*c*9k.by&yl,yk.gB99a\l`:`9O B. y- B]\HHBH\H\]NBXX\\XX]XXZ[[H\H\LHH N\LH Y\LHX[HH NH Y[HX[K [LOOXJN[K [LOXN[K [LXCBCB OB ]B/-BBYOBYOBYO B B)B[BO`o/kfO OBOkd9.c#O OBOy$OBO\c*9g*9l`:`"gg$9df9cOBO\c*9g*YXXo.+O OBOh#n% OBO.#z *9g*9yhc:/nOBOi)*9/&k ym9/d)OBO\c*9+m*;y"yg*9ke y.+yo%yaiy9ayk{.g"y.$y!!9B OB B M{]b!+mB σB9aB. y-B]\HHBH\H\]NBXX\\XX]XXZ[[H\H[[H[[\] [ ^[X\[H]YX I\H \[H I\H X I\H Y][ I\H LNCBCBCB OB ]B .σBb,9i:/l]z+b9),y.,:/9&al9)z+'9c..cy%c"9al#9&.#i&i&+/c.

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1060120
帖子:212021
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP