匿名内部クラスは、コマンド モードで必要な Command オブジェクトなど、一度だけ使用する必要があるクラスの作成に適しています。匿名内部クラスの構文は少し奇妙です。匿名内部クラスが作成されると、そのクラスのインスタンスがすぐに作成され、そのクラス定義はすぐに削除され、その匿名内部クラスは再利用できません。
匿名内部クラスを定義するための形式は次のとおりです:
new 父类构造器(参数列表)|实现接口() { //匿名内部类的类体部分 }
上記の定義からわかるように、匿名内部クラスは親クラスを継承するか、インターフェイスを実装する必要がありますが、親クラスを継承するかインターフェイスを実装できるのは 1 つだけです。インターフェース。
匿名内部クラスについては、さらに 2 つのルールがあります:
1) 匿名内部クラスを抽象クラスにすることはできません。これは、システムが匿名内部クラスを作成すると、すぐに内部クラスのオブジェクトが作成されるためです。したがって、匿名内部クラスを抽象クラスとして定義することはできません。
2) 匿名内部クラスはコンストラクターを定義しません。匿名内部クラスにはクラス名がないため、コンストラクターを定義できませんが、インスタンス初期化ブロックを使用して、コンストラクターが必要なことを完了します。成し遂げる。
匿名内部クラスを作成する最も一般的な方法は、次のプログラムに示すように、インターフェイス タイプのオブジェクトを作成することです:
interface Product{ public double getPrice(); public String getName(); } public class TestAnonymous{ public void test(Product p){ System.out.println("购买了一个"+p.getName()+",花掉 了"+p.getPrice()); } public static void main(String[]args){ TestAnonymous ta = new TestAnonymous(); ta.test(new Product(){ public double getPrice(){ return 567; } public String getName(){ return "AGP显卡"; } }); } }
上記のプログラムの TestAnonymous クラスは、Product オブジェクトを必要とするテスト メソッドを定義します。ただし、Product は単なるインターフェイスであり、オブジェクトを直接作成することはできません。そのため、この Product インターフェイス実装クラスを繰り返し使用する必要がある場合は、Product インターフェイス実装クラスのオブジェクトを作成してこのメソッドに渡すことを検討してください。独立したオブジェクトは実装クラスを通じて定義する必要があります。この Product インターフェイス実装クラスを 1 回だけ使用する必要がある場合は、上記のプログラムのメソッドを使用して匿名の内部クラスを定義できます。 上記のプログラムでわかるように、匿名クラスを定義するために class キーワードは必要ありません。代わりに、匿名内部クラスを定義するときに、匿名内部クラスのオブジェクトが直接生成されます。上記の太字のコード部分は、匿名クラスのクラス本体部分です。
匿名内部クラスを抽象クラスにすることはできないため、匿名内部クラスは、その抽象親クラスまたはインターフェイスに含まれるすべての抽象メソッドを実装する必要があります。
Product 実装クラス オブジェクトを作成するための上記のコードは、次のコードに分割できます:
class AnonymousProduct implements Product{ public double getPrice(){ return 567; } public String getName(){ return "AGP显卡"; } } ta.test(new AnonymousProduct());
インターフェイスの実装によって匿名内部クラスが作成される場合、匿名内部クラスは明示的にコンストラクターを作成できないため、匿名内部クラスはコンストラクターのみを持ちます。 1 つは暗黙的なパラメーターなしのコンストラクター
であるため、新しいインターフェイス名の後の括弧内にパラメーター値を渡すことはできません。
ただし、親クラスを継承して匿名内部クラスを作成した場合、匿名内部クラスは親クラスと同様のコンストラクターを持ちます。ここでの類似性とは、同じ仮パラメーターのリストを持つことを指します。
abstract class Device{ private String name; public Device(){ } public Device(String name){ this.name = name; } public abstract double getPrice(); //此处省略了name属性的setter和getter方法 } public class AnonymousInner{ public void test(Device d){ System.out.println("购买了一个"+d.getName()+",花掉了"+d.getPrice()); } public static void main(String[] args){ AnonymousInner ai = new AnonymousInner(); //调用有参数的构造器创建Device匿名实现类的对象 ai.test(new Device("电子示波器"){ public double getPrice(){ return 67; } }); //调用无参数的构造器创建Device匿名实现类的对象 Device d = new Device(){ //初始化块 { System.out.println("匿名内部类的初始化块..."); } //实现抽象方法 public double getPrice(){ return 56; } public Sting getName(){ return "键盘"; } }; ai.test(d); } }
上記のプログラムは、抽象親クラス Device を作成します。この抽象親クラスには 2 つのコンストラクターが含まれています。1 つはパラメーターなし、もう 1 つはパラメーターありです。 Deviceを親クラスとして匿名内部クラスを作成する場合、パラメータを渡すことはできます(上記プログラムの最初の段落の太字部分など)、パラメータを渡すことはできません(上のプログラムの2番目の太字部分など)上記プログラム)文字部分)。
匿名内部クラスを作成するときは、すべての抽象メソッドをインターフェイスまたは抽象親クラスに実装する必要があります。必要に応じて、親クラスの通常のメソッドをオーバーライドすることもできます。たとえば、上記のプログラムの 2 番目の太字のコード部分では、匿名内部クラスが抽象親クラス Device クラスの getName メソッドをオーバーライドします。抽象的なメソッドではありません。
匿名内部クラスが外部クラスのローカル変数にアクセスする必要がある場合、final 修飾子を使用して外部クラスのローカル変数を変更する必要があります。そうしないと、システムがエラーを報告します。
interface A{ void test(); } public class TestA{ public static void main(Strign[] args){ int age = 0; A a = new A(){ public void test(){ //下面语句将提示错误:匿名内部类内访问局部变量必须使用final修饰 System.out.println(age); } }; } }
上記のプログラムの太字のサブコードは、匿名内部クラスが外部クラスのローカル変数にアクセスすることを意味します。age 変数は Final 修飾子で変更されていないため、太字のコードはコンパイル例外を引き起こします。
匿名内部クラスに関連するその他の記事については、PHP 中国語 Web サイトに注目してください。

JVMは、バイトコード解釈、プラットフォームに依存しないAPI、動的クラスの負荷を介してJavaのWORA機能を実装します。 2。標準API抽象オペレーティングシステムの違い。 3.クラスは、実行時に動的にロードされ、一貫性を確保します。

Javaの最新バージョンは、JVMの最適化、標準的なライブラリの改善、サードパーティライブラリサポートを通じて、プラットフォーム固有の問題を効果的に解決します。 1)Java11のZGCなどのJVM最適化により、ガベージコレクションのパフォーマンスが向上します。 2)Java9のモジュールシステムなどの標準的なライブラリの改善は、プラットフォーム関連の問題を削減します。 3)サードパーティライブラリは、OpenCVなどのプラットフォーム最適化バージョンを提供します。

JVMのバイトコード検証プロセスには、4つの重要な手順が含まれます。1)クラスファイル形式が仕様に準拠しているかどうかを確認し、2)バイトコード命令の有効性と正確性を確認し、3)データフロー分析を実行してタイプの安全性を確保し、検証の完全性とパフォーマンスのバランスをとる。これらの手順を通じて、JVMは、安全で正しいバイトコードのみが実行されることを保証し、それによりプログラムの完全性とセキュリティを保護します。

java'splatformendencealLowsApplicationStorunOperatingSystemwithajvm.1)singlecodebase:writeandcompileonceforallplatforms.2)easyUpdates:updatebytecodeforsimultaneousdeployment.3)テストの実験効果:scalbortffortfforduniverbehaviol.4)

Javaのプラットフォームの独立性は、JVM、JITコンピレーション、標準化、ジェネリック、ラムダ式、Projectpanamaなどのテクノロジーを通じて継続的に強化されています。 1990年代以来、Javaは基本的なJVMから高性能モダンJVMに進化し、さまざまなプラットフォームでのコードの一貫性と効率を確保しています。

Javaはプラットフォーム固有の問題をどのように軽減しますか? Javaは、JVMおよび標準ライブラリを通じてプラットフォームに依存します。 1)bytecodeとjvmを使用して、オペレーティングシステムの違いを抽象化します。 2)標準のライブラリは、パスクラス処理ファイルパス、CHARSETクラス処理文字エンコードなど、クロスプラットフォームAPIを提供します。 3)最適化とデバッグのために、実際のプロジェクトで構成ファイルとマルチプラットフォームテストを使用します。

java'splatformentencentenhancesmicroservicesecturectureby byofferingdeploymentflexability、一貫性、スケーラビリティ、およびポート可能性。1)展開の展開の展開は、AllosmicRoserviThajvm.2)deploymentflexibility lowsmicroserviceSjvm.2)一貫性のあるAcrossServicessimplisimpligiessdevelisementand

Graalvmは、Javaのプラットフォームの独立性を3つの方法で強化します。1。言語間の相互運用性、Javaが他の言語とシームレスに相互運用できるようにします。 2。独立したランタイム環境、graalvmnativeimageを介してJavaプログラムをローカル実行可能ファイルにコンパイルします。 3.パフォーマンスの最適化、Graalコンパイラは、Javaプログラムのパフォーマンスと一貫性を改善するための効率的なマシンコードを生成します。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

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

Dreamweaver Mac版
ビジュアル Web 開発ツール

ホットトピック









