Java 语法糖解析
本文是基于博客https://blog.youkuaiyun.com/danchu/article/details/5498644 以及知乎陈鹏、DisLido等的回答分享的个人理解与感悟
语法糖指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,并没有给语言添加什么新东西,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。 —摘自《百度百科》
泛型与类型擦除
类型擦除指的是替换代码中所有类型参数(比如我们常用的L,E等)为他们的界限(通配符定义的界限,如果没有界限就替换为Object),使得替换后的代码只含有常规的类、接口和方法。以下为示例:
自动装箱机制和拆箱机制
最简单的两句代码理解装箱与拆箱机制:
//自动装箱
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次卑微求赞,嘿嘿