Jadual Kandungan
(一)泛型与类型擦除
(二)自动装箱和拆箱
(三)foreach循环
(四)变长参数
(五)条件编译
(六)内部类
(七)枚举类和switch
(八)断言语句
(九)总结
Rumah Java javaTutorial java糖衣语法(Syntactic Sugar)详解

java糖衣语法(Syntactic Sugar)详解

Mar 01, 2017 pm 01:19 PM


糖衣语法,也叫做语法糖。最开始是英国计算机学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语。语法糖是指某一类语法,这类语法通过一些简单的包装,让代码变得简洁、可读性好,并在编译时通过“解语法糖”的方式,在功能不变的情况下用简单语法来通过编译。
正如其名,语法糖就像是一层糖衣,通过这层糖衣让代码变得简洁。虚拟机并不支持这类语法,在虚拟机运行之前,这类语法就会被编译成更通俗的简单的语法,但功能不变。
在java中,常用的语法糖有以下这些:

  1. 泛型与类型擦除

  2. 自动装箱和拆箱

  3. foreach循环

  4. 变长参数

  5. 条件编译

  6. 内部类

  7. 枚举类和switch

  8. 断言语句

下面我们就一个个的来分别看一下每个语法糖的功能用法和他实际的原理

(一)泛型与类型擦除

在java的虚拟机中没有泛型类,每一个类型在java虚拟机中都有一个相对应的基本类型。下面是一篇泛型及原理的解析。

泛型类详解传送门:http://www.php.cn/java-article-354231.html

(二)自动装箱和拆箱

在java代码中,很多时候我们不能直接使用八个基本类型,而是要使用他们对应的包装类(也叫包装器 wrapper)这些对象包装类的名字也很容易记忆:Integer、Long、Byte、Double、Float、Character、Boolean、Short。最简单的例子就是泛型中,因为擦除后无法将基本类型存入Object中,所以必须使用包装类作为类型参数:

List<int> list = new ArrayList<>();//errorList<Integer> list = new ArrayList<>();//ok
Salin selepas log masuk

自动装箱过程:把基本类型用它们对应的包装类型进行包装,使基本类型具有对象特征。
自动拆箱过程:与装箱过程相反,把包装类型转换成基本类型。

通俗地讲,装箱和拆箱就是方便了程序员在包装类和基本类之间的转换,少写了几句话,简洁了代码,有的时候代码里多出一句这样类型的转化确实有煞风景,自动装箱和拆箱优势是显而易见的。

List<Integer> list = new ArrayList<>();list.add(1);list.add(Integer.valueOf(1));//实际操作 自动装箱int n = list.get(0);
int m = list.get(0).intValue();//实际操作 自动拆箱Integer p = 1;
p++; //实际插入一句拆箱,再自增计算,再装箱
Salin selepas log masuk

在Integer等包装类中,数值间的比较需要用equals方法,否则比较的是两个对象的地址是否储存于同一区域。用==来比较,根据被包装到的对象情况,结果是true和false都有可能的。

Integer a = 1000;Integer b = 1000;System.out.println(a==b); 
// 输出:falseSystem.out.println(a.equals(b)); //输出:true
Salin selepas log masuk

值得一提的是,包装类也是放置类型转换这类静态方法的好地方:

int x =Integer.parseInt("111"); // x=111
Salin selepas log masuk

(三)foreach循环

java中提供了一个超级简洁的循环方法,foreach循环。作为一种没有索引的循环方式,foreach循环只能遍历全部的元素而不具有选择性,但是简单的写法还是方便了很多,在HashMap这种毫无索引的数据结构中,foreach循环相比for循环和while循环好的多。那么,foreach循环是用什么来实现的呢?答案就是迭代器Iterator。

for(int i : list){
    System.out.println(i);
}

//实际迭代器实现for (Iterator localIterator = list.iterator(); localIterator.hasNext(); ) { 
    int sub = ((Integer)localIterator.next()).intValue(); 
    System.out.println(sub);}
Salin selepas log masuk

遍历所有的元素是用Iterator来实现的这点是容易想出来的,但是实际上的代码量确实比foreach循环增加了不少,语法糖起到了方便代码的作用,功不可没。

(四)变长参数

在java1.5之后,提供了一种可变参数的方法调用,打破了参数只能是固定数量的尴尬局面。说起来玄,但是变长参数的方法我们在日常中几乎天天用,比如字符串的格式化:

public void foo(String str,Object...args){...}//方法原型

System.out.printf("%d",1);
System.out.printf("%d,%s", 12,"a");//方法中的变长参数必须位于最后一个位置
Salin selepas log masuk

变长参数的实质是把这个位于最后一位变长参数换做Object[],换来换去都是一样的内容。

(五)条件编译

条件编译是Java虚拟机对代码进行了简化,它根据布尔常量的真假,去掉了分支不正确的代码块。只有使用条件为常量的If语句才能达到这种的效果。这一条也是容易理解的。

if(true)  
{  
    System.out.println("true");  
}  
else {  
    System.out.println("false");  
}  
//实际条件编译System.out.println("true");
Salin selepas log masuk

(六)内部类

虚拟机中没有内部类,所有的内部类都通过一定的方法变成了普通类。

内部类详解传送门:http://www.php.cn/java-article-354230.html

(七)枚举类和switch

在java之中也存在着类似c++的枚举类型,但是客观上并没有c++中的好用。枚举类型可以包括有限个命名的值,并且可以声明这种类型其中的变量:

package Syntactic;public enum Size {
    S,M,L,XL
}

Size s = Size.S; //声明一个s,值为枚举类型中的S
Salin selepas log masuk

枚举类也是一种语法糖,在虚拟机中并没有枚举类,JVM也不认识它。首先,所有的枚举类都是继承于java.lang.Enum类。在编译时编译器会把枚举类直接变成实在的Enum的子类。枚举类中的每一个值都会通过构造器变为实例。

//构造器protected Enum(String name, int ordinal) {...}
//第一个参数为枚举值,第二个参数为这个枚举值默认的顺序
//下面是在编译时,实际操作的将枚举值实例化的过程
new Enum<Size>("S",0);new Enum<Size>("M",1);
new Enum<Size>("L",2);new Enum<Size>("XL",3);
Salin selepas log masuk

与此同时,既然枚举类型是语法糖,那么也就有switch用枚举值作为判断,也是一种语法糖。既然枚举类型是语法糖,在虚拟机中并不存在这种语法,switch中的枚举自然也是语法糖,那么它的原理是什么呢?

首先我们要分析一下switch能够用什么来判断。1.char、byte、int、short类型,2.枚举类型,3.字符串字面量。在这些之中一定有一种类型是枚举类型实际采用的判断方式。实际上,枚举类型采用的判断方式是int(short)类型。我们刚才说过,在每个枚举类型实例化的过程中都会贴上一个顺序的序号的“标签”。new Enum<Size>("S",0)在编译的过程中,编译器把这个序号作为他们的标记来替换switch中的枚举类型。

(八)断言语句

断言语句是在java的测试阶段普遍使用的一种语句,在1.4版本发布,而其本身也是一种语法糖。

(九)总结

在java中有很多糖衣语法,这些语法在不改变功能的情况下方便了我们的工作,提高了我们的效率。对于这些语法的内部实际处理虽然不一定用得到,但是有些了解还是很好的。语法糖是指那种在虚拟机中不存在但是我们可以这样编写代码的语法,并不一定只有上述的几种,但是上述是其中较为常用的。

 以上就是java糖衣语法(Syntactic Sugar)详解的内容,更多相关内容请关注PHP中文网(www.php.cn)!


Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

<🎜>: Bubble Gum Simulator Infinity - Cara Mendapatkan dan Menggunakan Kekunci Diraja
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Sistem Fusion, dijelaskan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial Java
1671
14
Tutorial PHP
1276
29
Tutorial C#
1256
24
PHP vs Python: Memahami Perbezaan PHP vs Python: Memahami Perbezaan Apr 11, 2025 am 12:15 AM

PHP dan Python masing -masing mempunyai kelebihan sendiri, dan pilihannya harus berdasarkan keperluan projek. 1.Php sesuai untuk pembangunan web, dengan sintaks mudah dan kecekapan pelaksanaan yang tinggi. 2. Python sesuai untuk sains data dan pembelajaran mesin, dengan sintaks ringkas dan perpustakaan yang kaya.

PHP: Bahasa utama untuk pembangunan web PHP: Bahasa utama untuk pembangunan web Apr 13, 2025 am 12:08 AM

PHP adalah bahasa skrip yang digunakan secara meluas di sisi pelayan, terutamanya sesuai untuk pembangunan web. 1.PHP boleh membenamkan HTML, memproses permintaan dan respons HTTP, dan menyokong pelbagai pangkalan data. 2.PHP digunakan untuk menjana kandungan web dinamik, data borang proses, pangkalan data akses, dan lain -lain, dengan sokongan komuniti yang kuat dan sumber sumber terbuka. 3. PHP adalah bahasa yang ditafsirkan, dan proses pelaksanaan termasuk analisis leksikal, analisis tatabahasa, penyusunan dan pelaksanaan. 4.Php boleh digabungkan dengan MySQL untuk aplikasi lanjutan seperti sistem pendaftaran pengguna. 5. Apabila debugging php, anda boleh menggunakan fungsi seperti error_reporting () dan var_dump (). 6. Mengoptimumkan kod PHP untuk menggunakan mekanisme caching, mengoptimumkan pertanyaan pangkalan data dan menggunakan fungsi terbina dalam. 7

Cuti atau kembali dari Java 8 Stream Foreach? Cuti atau kembali dari Java 8 Stream Foreach? Feb 07, 2025 pm 12:09 PM

Java 8 memperkenalkan API Stream, menyediakan cara yang kuat dan ekspresif untuk memproses koleksi data. Walau bagaimanapun, soalan biasa apabila menggunakan aliran adalah: bagaimana untuk memecahkan atau kembali dari operasi foreach? Gelung tradisional membolehkan gangguan awal atau pulangan, tetapi kaedah Foreach Stream tidak menyokong secara langsung kaedah ini. Artikel ini akan menerangkan sebab -sebab dan meneroka kaedah alternatif untuk melaksanakan penamatan pramatang dalam sistem pemprosesan aliran. Bacaan Lanjut: Penambahbaikan API Java Stream Memahami aliran aliran Kaedah Foreach adalah operasi terminal yang melakukan satu operasi pada setiap elemen dalam aliran. Niat reka bentuknya adalah

PHP vs Bahasa Lain: Perbandingan PHP vs Bahasa Lain: Perbandingan Apr 13, 2025 am 12:19 AM

PHP sesuai untuk pembangunan web, terutamanya dalam pembangunan pesat dan memproses kandungan dinamik, tetapi tidak baik pada sains data dan aplikasi peringkat perusahaan. Berbanding dengan Python, PHP mempunyai lebih banyak kelebihan dalam pembangunan web, tetapi tidak sebaik python dalam bidang sains data; Berbanding dengan Java, PHP melakukan lebih buruk dalam aplikasi peringkat perusahaan, tetapi lebih fleksibel dalam pembangunan web; Berbanding dengan JavaScript, PHP lebih ringkas dalam pembangunan back-end, tetapi tidak sebaik JavaScript dalam pembangunan front-end.

PHP vs Python: Ciri dan Fungsi Teras PHP vs Python: Ciri dan Fungsi Teras Apr 13, 2025 am 12:16 AM

PHP dan Python masing -masing mempunyai kelebihan sendiri dan sesuai untuk senario yang berbeza. 1.PHP sesuai untuk pembangunan web dan menyediakan pelayan web terbina dalam dan perpustakaan fungsi yang kaya. 2. Python sesuai untuk sains data dan pembelajaran mesin, dengan sintaks ringkas dan perpustakaan standard yang kuat. Apabila memilih, ia harus diputuskan berdasarkan keperluan projek.

Impak PHP: Pembangunan Web dan seterusnya Impak PHP: Pembangunan Web dan seterusnya Apr 18, 2025 am 12:10 AM

Phphassignificantelympactedwebdevelopmentandextendsbeyondit.1) itpowersmajorplatformslikeworderpressandexcelsindatabaseIntions.2) php'SadaptabilityAldoStoScaleforlargeapplicationFrameworksLikelara.3)

PHP: asas banyak laman web PHP: asas banyak laman web Apr 13, 2025 am 12:07 AM

Sebab mengapa PHP adalah timbunan teknologi pilihan untuk banyak laman web termasuk kemudahan penggunaannya, sokongan komuniti yang kuat, dan penggunaan yang meluas. 1) Mudah dipelajari dan digunakan, sesuai untuk pemula. 2) Mempunyai komuniti pemaju yang besar dan sumber yang kaya. 3) Digunakan secara meluas dalam platform WordPress, Drupal dan lain -lain. 4) Mengintegrasikan dengan ketat dengan pelayan web untuk memudahkan penggunaan pembangunan.

PHP vs Python: Gunakan Kes dan Aplikasi PHP vs Python: Gunakan Kes dan Aplikasi Apr 17, 2025 am 12:23 AM

PHP sesuai untuk pembangunan web dan sistem pengurusan kandungan, dan Python sesuai untuk sains data, pembelajaran mesin dan skrip automasi. 1.PHP berfungsi dengan baik dalam membina laman web dan aplikasi yang cepat dan berskala dan biasanya digunakan dalam CMS seperti WordPress. 2. Python telah melakukan yang luar biasa dalam bidang sains data dan pembelajaran mesin, dengan perpustakaan yang kaya seperti numpy dan tensorflow.

See all articles