Java 语法糖 详解

Java 语法糖解析

本文是基于博客https://blog.youkuaiyun.com/danchu/article/details/5498644 以及知乎陈鹏、DisLido等的回答分享的个人理解与感悟

语法糖指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,并没有给语言添加什么新东西,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。 —摘自《百度百科》

泛型与类型擦除

类型擦除指的是替换代码中所有类型参数(比如我们常用的L,E等)为他们的界限(通配符定义的界限,如果没有界限就替换为Object),使得替换后的代码只含有常规的类、接口和方法。以下为示例:

图片来自王忠杰老师讲义PPT

自动装箱机制和拆箱机制

最简单的两句代码理解装箱与拆箱机制:

	//自动装箱
	Integer a = 100;
	//自动拆箱
	int b = a;

实际上,这一部分的代码实际执行的是:

	Integer a = Integer.valueOf(100);
	int b = a.intValue();

变长参数

这里举得例子是从其他博客中copy来的:

//原代码
public class Varargs {
    public static void print(String... args) {
        for(String str : args){
            System.out.println(str);
        }
    }

    public static void main(String[] args) {
        print("hello", "world");
    }
}


//编译后的代码
public class Varargs {
    public Varargs() {
    }

    public static void print(String... args) {
        String[] var1 = args;
        int var2 = args.length;
        //增强for循环的数组实现方式
        for(int var3 = 0; var3 < var2; ++var3) {
            String str = var1[var3];
            System.out.println(str);
        }

    }

    public static void main(String[] args) {
        //变长参数转换为数组
        print(new String[]{"hello", "world"});
    }
}

支持foreach

foreach用来遍历对应数据结构的。支持foreach语法糖的数据结构有限制,要么是数组,要么实现了Iterable接口。

枚举类

在Java本身的字节码结构中是没有Enum结构的,Enum编译后也成为一个普通的类,继承于java.lang.Enum,并被final修饰。
以下为示例代码:(同copy)

	//源代码
	public enum Fruit {
    	APPLE,ORINGE
    }
    
    //继承java.lang.Enum并声明为final
    public final class Fruit extends Enum
    {

        public static Fruit[] values()
        {
            return (Fruit[])$VALUES.clone();
        }

        public static Fruit valueOf(String s)
        {
            return (Fruit)Enum.valueOf(Fruit, s);
        }

        private Fruit(String s, int i)
        {
            super(s, i);
        }
        //枚举类型常量
        public static final Fruit APPLE;
        public static final Fruit ORANGE;
        private static final Fruit $VALUES[];//使用数组进行维护

        static
        {
            APPLE = new Fruit("APPLE", 0);
            ORANGE = new Fruit("ORANGE", 1);
            $VALUES = (new Fruit[] {
                APPLE, ORANGE
            });
        }
    }

try-with-resources 语法

示例代码如下:

    try (FileInputStream f = new FileInputStream("test.txt")){
        // ...
    } catch (IOException e) {
        e.printStackTrace();
    }

静态导入

示例代码如下:

    import static java.lang.System.out;

    out.println(123);

Lambda 表达式

啥?你还不了解Lambda表达式?点这里看看吧!https://blog.youkuaiyun.com/HelloTheWholeWorld/article/details/89115173

综上,加油呀!

第n次卑微求赞,嘿嘿

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值