目次
(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 8 Stream Foreachから休憩または戻ってきますか? Java 8 Stream Foreachから休憩または戻ってきますか? Feb 07, 2025 pm 12:09 PM

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

PHP:Web開発の重要な言語 PHP:Web開発の重要な言語 Apr 13, 2025 am 12:08 AM

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

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は、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。

PHP対その他の言語:比較 PHP対その他の言語:比較 Apr 13, 2025 am 12:19 AM

PHPは、特に迅速な開発や動的なコンテンツの処理に適していますが、データサイエンスとエンタープライズレベルのアプリケーションには良くありません。 Pythonと比較して、PHPはWeb開発においてより多くの利点がありますが、データサイエンスの分野ではPythonほど良くありません。 Javaと比較して、PHPはエンタープライズレベルのアプリケーションでより悪化しますが、Web開発により柔軟性があります。 JavaScriptと比較して、PHPはバックエンド開発により簡潔ですが、フロントエンド開発のJavaScriptほど良くありません。

PHP対Python:コア機能と機能 PHP対Python:コア機能と機能 Apr 13, 2025 am 12:16 AM

PHPとPythonにはそれぞれ独自の利点があり、さまざまなシナリオに適しています。 1.PHPはWeb開発に適しており、組み込みのWebサーバーとRich Functionライブラリを提供します。 2。Pythonは、簡潔な構文と強力な標準ライブラリを備えたデータサイエンスと機械学習に適しています。選択するときは、プロジェクトの要件に基づいて決定する必要があります。

PHPの影響:Web開発など PHPの影響:Web開発など Apr 18, 2025 am 12:10 AM

phphassiblasifly-impactedwebdevevermentandsbeyondit.1)itpowersmajorplatformslikewordpratsandexcelsindatabase interactions.2)php'sadaptableability allowsitale forlargeapplicationsusingframeworkslikelavel.3)

PHP:多くのウェブサイトの基礎 PHP:多くのウェブサイトの基礎 Apr 13, 2025 am 12:07 AM

PHPが多くのWebサイトよりも優先テクノロジースタックである理由には、その使いやすさ、強力なコミュニティサポート、広範な使用が含まれます。 1)初心者に適した学習と使用が簡単です。 2)巨大な開発者コミュニティと豊富なリソースを持っています。 3)WordPress、Drupal、その他のプラットフォームで広く使用されています。 4)Webサーバーとしっかりと統合して、開発の展開を簡素化します。

PHP対Python:ユースケースとアプリケーション PHP対Python:ユースケースとアプリケーション Apr 17, 2025 am 12:23 AM

PHPはWeb開発およびコンテンツ管理システムに適しており、Pythonはデータサイエンス、機械学習、自動化スクリプトに適しています。 1.PHPは、高速でスケーラブルなWebサイトとアプリケーションの構築においてうまく機能し、WordPressなどのCMSで一般的に使用されます。 2。Pythonは、NumpyやTensorflowなどの豊富なライブラリを使用して、データサイエンスと機械学習の分野で驚くほどパフォーマンスを発揮しています。

See all articles