検索
ホームページウェブフロントエンドhtmlチュートリアルclassloader_html/css_WEB-ITnose によってロードされる親委任モード

ClassLoader を詳しく理解するには、まず ClassLoader が何に使用されるかを知る必要があります。その名前が示すように、プログラムで使用するためにクラス ファイルを JVM にロードするために使用されます。 Java プログラムがクラス定義を動的にロードできること、およびこの動的ロード メカニズムが ClassLoader を通じて実装されていることはわかっているため、ClassLoader の重要性が想像できるでしょう。

これを見て、ある質問を考える友人もいるかもしれません。つまり、ClassLoader はクラスを JVM にロードするために使用されるのですが、ClassLoader はどのようにロードされるのでしょうか? Javaクラスじゃないの?

そうです、ここには Java 言語で書かれたクラスローダーはありませんが、JVM 実装の一部です。このクラスローダーは、JVM の起動時に Java コア API をロードします。ユーザー定義の ClassLoader など、Java プログラムの最も基本的なニーズを満たすために、ここでのいわゆるユーザー定義とは、Java プログラムを通じて実装された ClassLoader を指します。1 つは ExtClassLoader で、この ClassLoader は Java の拡張 API をロードするために使用されます。 / lib/ext 内のクラスのうち、1 つは AppClassLoader です。この ClassLoader は、ユーザーのマシンの CLASSPATH 設定ディレクトリにあるクラスをロードするために使用されます。通常、ClassLoader が指定されていない場合、プログラマがカスタマイズしたクラスが ClassLoader によってロードされます。

プログラムを実行すると、JVM が起動してブートストラップ クラスローダーが実行され、ClassLoader が Java コア API をロードし (この時点で ExtClassLoader と AppClassLoader もロードされます)、次に ExtClassLoader を呼び出して拡張 API をロードし、最後に AppClassLoader がクラスをロードします。 CLASSPATH ディレクトリに定義されており、これはプログラムの最も基本的なロード プロセスです。

上記では、ClassLoader の機能と最も基本的なロード処理について簡単に説明しました。次に、ClassLoader がクラスのロードに使用する親委任モードについて説明します。

すべてのカスタム ClassLoader は抽象クラス ClassLoader を継承する必要があり、各 ClassLoader は親 ClassLoader を持ちます。このメソッドは、現在の ClassLoader の親を返すために使用されます。 . 、この親は継承されたクラスを参照するのではなく、ClassLoader をインスタンス化するときに指定された ClassLoader を参照することに注意してください。親が null の場合、ClassLoader のデフォルトの親はブートストラップ クラスローダーになります。

ClientDefClassLoader をカスタマイズし、このカスタマイズされた ClassLoader を使用して java.lang.String をロードすると仮定すると、このような状況が考えられます。ここでの String はこの ClassLoader によってロードされるでしょうか?実際、java.lang.String クラスは ClientDefClassLoader によってではなく、ブートストラップ クラスローダーによってロードされます。これはなぜでしょうか。実際、これが親委任モードの理由です。カスタム ClassLoader は、クラスをロードする前に、まずその親 ClassLoader にそのクラスのロードを委任し、親 ClassLoader が正常にロードできなかった場合にのみ、クラスローダ自体がロードされます。上に示したように、この例では、java.lang.String は Java コア API に属するクラスであるため、ClientDefClassLoader を使用してロードする場合、前述のように、ClassLoader の親がロードされると、まず ClassLoader がその親 ClassLoader にロードを委託します。 is null このとき、ClassLoader の親はブートストラップ クラスローダーであるため、ClassLoader の最上位はブートストラップ クラスローダーであるため、最終的にブートストラップ クラスローダーに委譲されると、ブートストラップ クラスローダーは String のクラスを返します。

ClassLoader のソース コードの一部を見てみましょう:

     protected synchronized Class loadClass(String name, boolean resolve) throws ClassNotFoundException{           // 首先检查该name指定的class是否有被加载           Class c = findLoadedClass(name);           if (c == null) {               try {                   if (parent != null) {                       //如果parent不为null,则调用parent的loadClass进行加载                       c = parent.loadClass(name, false);                   }else{                       //parent为null,则调用BootstrapClassLoader进行加载                       c = findBootstrapClass0(name);                   }               }catch(ClassNotFoundException e) {                   //如果仍然无法加载成功,则调用自身的findClass进行加载                               c = findClass(name);               }           }           if (resolve) {               resolveClass(c);           }           return c;      } 

上記のコード部分から、クラスをロードする一般的なプロセスが前に示した例と同じであることがわかります。カスタム クラスを実装するときは、findClass メソッドを実装するだけで済みます。

この親委任モデルを使用する理由は何ですか?

1 つ目の理由は、これにより、父親がすでにクラスをロードしている場合、子 ClassLoader がそれを再度ロードする必要がないためです。

2 番目の理由は、セキュリティ要素を考慮することです。この委任モードを使用しない場合、いつでもカスタム String を使用して、Java コア API で定義された型を動的に置き換えることができると考えてください。これはセキュリティ上の大きな問題ですが、起動時に String がロードされるため、ユーザー定義クラスはカスタム ClassLoader をロードできないため、親委任メソッドによってこの状況を回避できます。

ClassLoader のロードメカニズムについては上で簡単に紹介しました。次に、ClassLoader に関連する別のクラス、つまり Class クラスについて説明する必要があります。ClassLoader によってロードされる各クラス ファイルは、最終的にプログラマによって参照されるクラス インスタンスとして分類されます。 Class クラスを共通クラスのテンプレートと見なすことができ、JVM はこのテンプレートに基づいて対応するインスタンスを生成し、最終的にプログラマによって使用されます。

Class クラスには静的メソッド forName があることがわかります。このメソッドは ClassLoader のloadClass メソッドと同じ目的を持っていますが、両方の機能に違いがあります。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
HTML:構造、CSS:スタイル、JavaScript:動作HTML:構造、CSS:スタイル、JavaScript:動作Apr 18, 2025 am 12:09 AM

Web開発におけるHTML、CSS、およびJavaScriptの役割は次のとおりです。1。HTMLは、Webページ構造を定義し、2。CSSはWebページスタイルを制御し、3。JavaScriptは動的な動作を追加します。一緒に、彼らは最新のウェブサイトのフレームワーク、美学、および相互作用を構築します。

HTMLの未来:ウェブデザインの進化とトレンドHTMLの未来:ウェブデザインの進化とトレンドApr 17, 2025 am 12:12 AM

HTMLの将来は、無限の可能性に満ちています。 1)新機能と標準には、より多くのセマンティックタグとWebComponentsの人気が含まれます。 2)Webデザインのトレンドは、レスポンシブでアクセス可能なデザインに向けて発展し続けます。 3)パフォーマンスの最適化により、応答性の高い画像読み込みと怠zyなロードテクノロジーを通じてユーザーエクスペリエンスが向上します。

HTML対CSS対JavaScript:比較概要HTML対CSS対JavaScript:比較概要Apr 16, 2025 am 12:04 AM

Web開発におけるHTML、CSS、およびJavaScriptの役割は次のとおりです。HTMLはコンテンツ構造を担当し、CSSはスタイルを担当し、JavaScriptは動的な動作を担当します。 1。HTMLは、セマンティクスを確保するためにタグを使用してWebページの構造とコンテンツを定義します。 2。CSSは、セレクターと属性を介してWebページスタイルを制御して、美しく読みやすくします。 3。JavaScriptは、動的でインタラクティブな関数を実現するために、スクリプトを通じてWebページの動作を制御します。

HTML:それはプログラミング言語か何か他のものですか?HTML:それはプログラミング言語か何か他のものですか?Apr 15, 2025 am 12:13 AM

htmlisnotaprogramminglanguage; itisamarkuplanguage.1)htmlStructuresandformatswebcontentusingtags.2)ItworkswithcsssssssssdjavascriptforInteractivity、強化を促進します。

HTML:Webページの構造の構築HTML:Webページの構造の構築Apr 14, 2025 am 12:14 AM

HTMLは、Webページ構造の構築の基礎です。 1。HTMLは、コンテンツ構造とセマンティクス、および使用などを定義します。タグ。 2. SEO効果を改善するために、などのセマンティックマーカーを提供します。 3.タグを介したユーザーの相互作用を実現するには、フォーム検証に注意してください。 4. JavaScriptと組み合わせて、動的効果を実現するなどの高度な要素を使用します。 5.一般的なエラーには、閉じられていないラベルと引用されていない属性値が含まれ、検証ツールが必要です。 6.最適化戦略には、HTTP要求の削減、HTMLの圧縮、セマンティックタグの使用などが含まれます。

テキストからウェブサイトへ:HTMLの力テキストからウェブサイトへ:HTMLの力Apr 13, 2025 am 12:07 AM

HTMLは、Webページを構築するために使用される言語であり、タグと属性を使用してWebページの構造とコンテンツを定義します。 1)htmlは、などのタグを介してドキュメント構造を整理します。 2)ブラウザはHTMLを分析してDOMを構築し、Webページをレンダリングします。 3)マルチメディア関数を強化するなど、HTML5の新機能。 4)一般的なエラーには、閉じられていないラベルと引用されていない属性値が含まれます。 5)最適化の提案には、セマンティックタグの使用とファイルサイズの削減が含まれます。

HTML、CSS、およびJavaScriptの理解:初心者向けガイドHTML、CSS、およびJavaScriptの理解:初心者向けガイドApr 12, 2025 am 12:02 AM

webdevelopmentReliesOnhtml、css、andjavascript:1)htmlStructuresContent、2)cssStylesit、および3)Javascriptaddsinteractivity、形成、

HTMLの役割:Webコンテンツの構造HTMLの役割:Webコンテンツの構造Apr 11, 2025 am 12:12 AM

HTMLの役割は、タグと属性を使用してWebページの構造とコンテンツを定義することです。 1。HTMLは、読みやすく理解しやすいようなタグを介してコンテンツを整理します。 2。アクセシビリティとSEOを強化するには、セマンティックタグなどを使用します。 3. HTMLコードの最適化により、Webページの読み込み速度とユーザーエクスペリエンスが向上する可能性があります。

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ヘンタイを無料で生成します。

ホットツール

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SecLists

SecLists

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

SublimeText3 Mac版

SublimeText3 Mac版

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

メモ帳++7.3.1

メモ帳++7.3.1

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