検索
ホームページJava&#&チュートリアルJavaのシュガーコート構文(Syntactic Sugar)の詳細説明


シュガーコーティングされた構文。シュガー構文とも呼ばれます。これはもともと英国のコンピューター科学者ピーター 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)</size>在编译的过程中,编译器把这个序号作为他们的标记来替换switch中的枚举类型。

(八)断言语句

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

(九)总结

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

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


声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?Mar 17, 2025 pm 05:46 PM

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?Mar 17, 2025 pm 05:45 PM

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?Mar 17, 2025 pm 05:44 PM

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?Mar 17, 2025 pm 05:43 PM

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?Mar 17, 2025 pm 05:35 PM

Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します

See all articles

ホット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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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