java语法糖

语法糖(Syntactic sugar):也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。
简单理解:代码的简写方式;对java而言,简写方式经过编译器处理后(解语法糖)生成的class文件与原始方式的一致,虚拟机不认识也不关心源码怎么编写;

不同的反编译工具生成的代码会有出入,上方为源码,下方为反编译出来的代码

1、泛型

ArrayList<String> arrayList = new ArrayList<String>();
ArrayList arrayList = new ArrayList();

2、自动装箱,自动拆箱
装拆箱的陷阱见基本数据类型包装类“==”判定

int primitiveInt = new Integer(1);
Integer warpperInt = 1;
int primitiveInt = (new Integer(1)).intValue();
Integer warpperInt = Integer.valueOf(1);

3、数组简写

String[] intArray = {"1", "2"};
String[] intArray = new String[]{"1", "2"};

4、foreach循环

//对于实现了Iterator借口的数据类型
for (String i : arrayList) {
            System.out.println(i);
}
Iterator innerClass = arrayList.iterator();
while(innerClass.hasNext()) {
            String str = (String)innerClass.next();
            System.out.println(str);
}
//对于数组
for (String i : intArray) {
            System.out.println(i);
        }

int var23 = intArray.length;
for(int string = 0; string < var23; ++string) {
            String e = var22[string];
            System.out.println(e);
}

5、条件编译

        if (true) {
            System.out.println("if branch");
        } else {
            System.out.println("else branch");
        }
System.out.println("if branch");

6、变长参数
Java变长参数
7、switch对字符串和枚举的支持
不同的Java版本支持的类型不同,jdk1.8支持的数据类型是:char、byte、short、int、枚举、字符型

使用idea自带的反编译工具出来的代码,用jd-GUI已经可以完全还原为源码

        //switch枚举的支持
        EnumTest str = EnumTest.FRI;
        switch (str) {
            case MON:
                System.out.println(str);
                break;
            default:
                System.out.println("unknown");
        }

        EnumTest var24 = EnumTest.FRI;
        switch(null.$SwitchMap$javaCompile$EnumTest[var24.ordinal()]) {//不知道为什么反编译出来是这样,通过下方的case语句可以看出来还是转换为判断int来达到目的;
        case 1:
            System.out.println(var24);
            break;
        default:
            System.out.println("unknown");
        }
        //switch对string支持
        String string = "1";
        switch (string) {
            case "1":
                System.out.println(string);
                break;
            default:
                System.out.println("unknown");
        }
        String var13 = "1";
        byte var9 = -1;
        switch(var13.hashCode()) {
        case 49:
        //转换为int来做判断
            if(var13.equals("1")) {
                var9 = 0;
            }
        default:
            switch(var9) {
            case 0:
                System.out.println(var13);
                break;
            default:
                System.out.println("unknown");
            }
        }

8、try语句中定义和关闭资源
从 1.7 开始AutoCloseable方式关闭资源

        try(BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(new File(""))))) {
            System.out.println(reader.readLine());
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            BufferedReader e = new BufferedReader(new InputStreamReader(new FileInputStream(new File(""))));
            Throwable var2 = null;

            try {
                System.out.println(e.readLine());
            } catch (Throwable var12) {
                var2 = var12;
                throw var12;
            } finally {
                if(e != null) {
                    if(var2 != null) {
                        try {
                            e.close();
                        } catch (Throwable var11) {
                            var2.addSuppressed(var11);
                        }
                    } else {
                        e.close();
                    }
                }

            }
        } catch (IOException var14) {
            var14.printStackTrace();
        }

9、内部类、内部类
通过编译生成fatherclass$innerclass.class文件达到目的,比一般的语法糖规则复杂;枚举类直接继承了Enum抽象类,反编译工具直接按照规则生成代码,看不到中间转换实现;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值