目次
(1) ジェネリックスとtype Erasure
(2) 自動ボックス化とアンボックス化
(3) foreach ループ
(4) 可変長パラメータ
(5) 条件付きコンパイル
(6) 内部クラス
(7)列挙型クラスとスイッチ
(八)断言语句
(九)总结
ホームページ Java &#&チュートリアル Javaのシュガーコート構文(Syntactic Sugar)の詳細説明

Javaのシュガーコート構文(Syntactic Sugar)の詳細説明

Mar 01, 2017 pm 01:19 PM


シュガーコーティングされた構文。シュガー構文とも呼ばれます。これはもともと英国のコンピューター科学者ピーター J. ランディンによって発明された用語です。構文シュガーは、特定のタイプの構文を指します。このタイプの構文は、同じ機能を維持しながら「構文シュガーを解凍」することでコードを簡潔にし、読みやすくします。
名前が示すように、構文シュガーはコードを簡潔にするシュガー コーティングの層のようなものです。仮想マシンはこのタイプの構文をサポートしていません。仮想マシンが実行される前に、このタイプの構文はより一般的で単純な構文にコンパイルされますが、機能は変わりません。
Java で一般的に使用される糖衣構文は次のとおりです:

  1. ジェネリックと型消去

  2. オートボックス化とアンボックス化

  3. foreach ループ

  4. 変数パラメーター

  5. 条件付きコンパイル

  6. 内部クラス

  7. 列挙型クラスとスイッチ

  8. アサーションステートメント

各構文糖衣の機能的使用法とその実際の使用法を一つ一つ見てみましょう 原則

(1) ジェネリックスとtype Erasure

Java 仮想マシンにはジェネリック クラスはありません。Java 仮想マシンには、各タイプに対応する基本タイプがあります。以下は、ジェネリック医薬品と原則の分析です。

ジェネリッククラスの詳細説明ポータル: http://www.php.cn/java-article-354231.html

(2) 自動ボックス化とアンボックス化

Javaコードでは使えないことが多い8 つの基本型を直接使用しますが、対応するラッパー クラス (ラッパーとも呼ばれる) を使用します。これらのオブジェクト ラッパー クラスの名前も覚えやすいです: Integer、Long、Byte、Double、Float、Character、Boolean、Short。最も単純な例はジェネリックスです。消去後に基本型を Object に保存できないため、パッケージ化クラスを型パラメーターとして使用する必要があります。

List<int> list = new ArrayList<>();//errorList<Integer> list = new ArrayList<>();//ok
ログイン後にコピー

自動ボックス化プロセス: 基本型を対応するパッケージ化型でラップし、基本型を作成します。タイプにはオブジェクトの特性があります。
自動開梱プロセス: 箱詰めプロセスとは逆に、包装タイプは基本タイプに変換されます。

平たく言えば、ボックス化とアンボックス化により、プログラマーによるパッケージ化クラスと基本クラス間の変換が容易になり、コード内にこの種の変換の余分な文が存在することがあります。自動ボックス化と自動ボックス化解除の利点は明らかです。

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++; //实际插入一句拆箱,再自增计算,再装箱
ログイン後にコピー

Integer などのクラスをパッケージ化する場合、値を比較するには、equals メソッドを使用する必要があります。それ以外の場合は、2 つのオブジェクトのアドレスが同じ領域に格納されているかどうかが比較されます。 == を使用して比較します。パッケージ化されているオブジェクトに応じて、結果は true または false になります。

Integer a = 1000;Integer b = 1000;System.out.println(a==b); 
// 输出:falseSystem.out.println(a.equals(b)); //输出:true
ログイン後にコピー

ラッパー クラスは、型変換などの静的メソッドを配置するのにも適した場所であることは言及する価値があります:

int x =Integer.parseInt("111"); // x=111
ログイン後にコピー

(3) foreach ループ

Java は、非常に単純なループ メソッドである foreach ループを提供します。インデックスのないループ メソッドとして、foreach ループは選択せずにすべての要素を走査することしかできませんが、HashMap などのインデックスのないデータ構造では、foreach ループの方が for ループよりもはるかに便利です。 while ループよりもはるかに優れています。では、foreach ループの実装には何が使用されるのでしょうか?答えはイテレータです。

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);}
ログイン後にコピー

すべての要素を走査するためにイテレーターが使用されることは簡単に理解できますが、実際のコード量は foreach ループに比べて大幅に増加します。構文シュガーはコードを便利にする役割を果たし、大きく貢献します。

(4) 可変長パラメータ

java1.5 以降では、可変パラメータを使用したメソッド呼び出しが提供され、パラメータが固定数しか取れないという恥ずかしい状況が打破されました。不思議に聞こえますが、私たちは文字列の書式設定など、日常生活でほぼ毎日、可変長パラメーターのメソッドを使用します。

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

System.out.printf("%d",1);
System.out.printf("%d,%s", 12,"a");//方法中的变长参数必须位于最后一个位置
ログイン後にコピー

可変長パラメーターの本質は、最後の可変長パラメーターを Object[] に置き換えることです。 . 同じ内容の繰り返しです。

(5) 条件付きコンパイル

条件付きコンパイルは、ブール定数の true または false に基づいてコードを簡素化する Java 仮想マシンです。この効果は、定数条件を指定した If ステートメントを使用する場合にのみ実現できます。これもわかりやすいですね。

if(true)  
{  
    System.out.println("true");  
}  
else {  
    System.out.println("false");  
}  
//实际条件编译System.out.println("true");
ログイン後にコピー

(6) 内部クラス

仮想マシンには内部クラスはありません。すべての内部クラスは、特定のメソッドを介して通常のクラスになります。

内部クラスの詳細説明ポータル: http://www.php.cn/java-article-354230.html

(7)列挙型クラスとスイッチ

Java列挙型にも同様のC++がありますですが、客観的には C++ ほど使いやすくはありません。列挙型には限られた数の名前付き値を含めることができ、この型の変数は次のように宣言できます。

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

Size s = Size.S; //声明一个s,值为枚举类型中的S
ログイン後にコピー

列挙型クラスも一種の構文糖衣です。仮想マシンには列挙型クラスが存在せず、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);
ログイン後にコピー

与此同时,既然枚举类型是语法糖,那么也就有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)!


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Javaの完全数 Javaの完全数 Aug 30, 2024 pm 04:28 PM

Java における完全数のガイド。ここでは、定義、Java で完全数を確認する方法、コード実装の例について説明します。

ジャワのウェカ ジャワのウェカ Aug 30, 2024 pm 04:28 PM

Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

Javaのスミス番号 Javaのスミス番号 Aug 30, 2024 pm 04:28 PM

Java のスミス番号のガイド。ここでは定義、Java でスミス番号を確認する方法について説明します。コード実装の例。

Java Springのインタビューの質問 Java Springのインタビューの質問 Aug 30, 2024 pm 04:29 PM

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8 Stream Foreachから休憩または戻ってきますか? Java 8 Stream Foreachから休憩または戻ってきますか? Feb 07, 2025 pm 12:09 PM

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

Java での日付までのタイムスタンプ Java での日付までのタイムスタンプ Aug 30, 2024 pm 04:28 PM

Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。

カプセルの量を見つけるためのJavaプログラム カプセルの量を見つけるためのJavaプログラム Feb 07, 2025 am 11:37 AM

カプセルは3次元の幾何学的図形で、両端にシリンダーと半球で構成されています。カプセルの体積は、シリンダーの体積と両端に半球の体積を追加することで計算できます。このチュートリアルでは、さまざまな方法を使用して、Javaの特定のカプセルの体積を計算する方法について説明します。 カプセルボリュームフォーミュラ カプセルボリュームの式は次のとおりです。 カプセル体積=円筒形の体積2つの半球体積 で、 R:半球の半径。 H:シリンダーの高さ(半球を除く)。 例1 入力 RADIUS = 5ユニット 高さ= 10単位 出力 ボリューム= 1570.8立方ユニット 説明する 式を使用してボリュームを計算します。 ボリューム=π×R2×H(4

PHP対Python:違いを理解します PHP対Python:違いを理解します Apr 11, 2025 am 12:15 AM

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHPは、シンプルな構文と高い実行効率を備えたWeb開発に適しています。 2。Pythonは、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。

See all articles