検索
ホームページウェブフロントエンドjsチュートリアルChuanzhi ポッドキャスト Java リフレクション_JavaScript スキルの学習

さらに、Bi 先生はリフレクションのメカニズムについても説明してくれました。将来的には必ずしもリフレクションを開発プロセスに組み込む必要はありませんが、リフレクションは Java の強力なツールであり、実行時に実行できる柔軟なコードを作成できます。コンポーネント間のソース代表リンクを使用しないアセンブリ。たとえば、Tomcat クラス ローダーでは、このメカニズムは多くのフレームワークで使用されています。
1. リフレクションとは
リフレクションの概念は、1982 年に Smith によって最初に提案されました。これは主に、プログラムが自身の状態の動作にアクセスし、検出し、変更する能力を指します。リフレクションは、Java プログラム開発言語の機能の 1 つであり、実行中の Java プログラム自体をチェック (「自己監査」) し、プログラムの内部プロパティを直接操作することもできます。
2. Java リフレクションに必要なクラス
1.Class クラス: そのインスタンスは、実行中の Java アプリケーション内のクラスとインターフェイスを表します
2.Constructor クラス: クラス情報とアクセスのための単一のコンストラクター メソッドを提供します。
3.Method クラス: クラスまたはインターフェイスの単一メソッドに関する情報を提供します。
4.Array クラス: 配列を動的に作成したり、配列にアクセスしたりするための静的メソッドを提供します。
5.フィールド クラス: クラスまたはインターフェイスのプロパティに関する情報と、それに対する動的アクセス権を提供します。
3. リフレクションの機能
上記で関連するクラスをリストしましたが、これらのクラスを使用して具体的に何ができるでしょうか?
1) 指定されたクラスの Class オブジェクトを取得します。
メソッド 1、object.getClass を介して (例: person p; Class c=p.getClass();)
メソッド 2、forName を介して取得します。 Class クラスのメソッド (例: Class c=Class.forName(class name);)
方法 3: name.class 型で取得 (Class c = int.class)
2) 任意のオブジェクトを構築します
① クラス名に基づいてオブジェクトを作成します。
② 新しく作成したオブジェクトを返します。
l 引数なしのコンストラクターを使用すると、newInstance メソッドを使用するだけで済みます。クラスオブジェクトの。
Class c=Class.forName(クラス名); Person p =(Person)c.newInstance;
l パラメータ化されたコンストラクターを使用します。手順は次のとおりです。
① 指定されたクラスのオブジェクトを取得します。 (同上)
② 指定したパラメータの要件を満たすコンストラクタクラスオブジェクトを Class オブジェクト経由で取得
Constructor cons = c.getConstructor(String.class)
③ の newInstance メソッドを呼び出す指定された Constructor オブジェクトを取得し、対応するパラメーター値を渡してオブジェクトを作成します。
人 p = (人) cons.newInstance ("Zhang San");
3) 実行時に任意のオブジェクトのメソッドを呼び出し、リフレクションを通じてプライベート メソッドを呼び出すこともできます
① 指定されたメソッドを取得しますclass オブジェクト(同上)
② 必要に応じてインスタンスを作成します
③ Class オブジェクトの getDeclaredMethods で Method のインスタンスを取得し(必要に応じて別のメソッドを選択できます)、invoke メソッドでメソッドを呼び出します
Method m=c.getDeclaredMethods( "setName", String.class);
returnvalue = m.invoke(p,"zhangsan");
注: プライベート メソッドの場合は、最初に呼び出すことができます。このメソッドに対応する Method オブジェクトの setAccessible(true) このメソッドのセキュリティ チェックをキャンセルします
4) 実行時に任意のオブジェクトのプロパティを呼び出します
① 指定されたクラスのオブジェクトを取得します (同上)
② 必要に応じてインスタンスを作成します。
③ Class オブジェクトの getDeclaredField を渡します(必要に応じて別のメソッドを選択できます) Field クラスのインスタンスを取得し、Set メソッドで指定したオブジェクトの値を変更し、取得しますオブジェクトの値。
フィールド f =c.getDeclaredField("name");
f.set(p,"Zhang San");

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
解决Java反射异常(ReflectiveOperationException)的方法解决Java反射异常(ReflectiveOperationException)的方法Aug 26, 2023 am 09:55 AM

解决Java反射异常(ReflectiveOperationException)的方法在Java开发中,反射(Reflection)是一种强大的机制,它允许程序在运行时动态地获取和操作类、对象、方法和属性等。通过反射,我们可以实现一些灵活的功能,比如动态创建对象、调用私有方法、获取类的注解等。然而,使用反射也会带来一些潜在的风险和问题,其中之一就是反射异常(

Golang函数的反射和类型断言的应用和底层实现Golang函数的反射和类型断言的应用和底层实现May 16, 2023 pm 12:01 PM

Golang函数的反射和类型断言的应用和底层实现在Golang编程中,函数的反射和类型断言是两个非常重要的概念。函数的反射可以让我们在运行时动态的调用函数,而类型断言则可以帮助我们在处理接口类型时进行类型转换操作。本文将深入讨论这两个概念的应用以及他们的底层实现原理。一、函数的反射函数的反射是指在程序运行时获取函数的具体信息,比如函数名、参数个数、参数类型等

如何在Java中使用反射调用方法如何在Java中使用反射调用方法Dec 23, 2023 am 08:18 AM

如何在Java中使用反射调用方法反射是Java语言的一个重要特性,它可以在运行时动态地获取类的信息并操作类的成员,包括字段、方法和构造函数等。使用反射可以在编译时不知道具体类的情况下操作类的成员,这使得我们能够编写更加灵活和通用的代码。本文将介绍如何在Java中使用反射调用方法,并给出具体的代码示例。一、获取类的Class对象在Java中,要使用反射来调用方

高级Python元编程:动态代码生成和反射高级Python元编程:动态代码生成和反射Sep 06, 2023 pm 09:13 PM

Python是一种灵活的编程语言,为开发人员提供了广泛的功能和工具。其强大的功能包括元编程——一种先进的技术,使开发人员能够在运行时动态地操作和生成代码。在本文中,我们将踏上高级Python元编程领域的旅程,特别关注动态代码生成和反射。通过采用这些技术,开发人员可以创建能够适应、修改甚至自省的代码,从而为创建灵活高效的应用程序开启了新的可能性世界。通过探索Python中动态代码生成和反射的概念和实际应用,我们将揭示元编程如何彻底改变开发过程,使开发人员能够生成健壮且高度适应性的代码。了解元编程元

Go 语言中的反射机制的局限性是什么?Go 语言中的反射机制的局限性是什么?Jun 09, 2023 pm 11:31 PM

Go语言作为一门静态类型语言,在代码编写时需要明确每个变量的类型。但是,在某些情况下,我们需要对程序中的类型进行动态的分析和操作,这时就需要用到反射机制。反射机制可以在程序运行时动态地获取程序对象的类型信息,并能够对其进行分析和操作,非常有用。但是,Go语言中反射机制也存在一些局限性,下面我们来详细了解一下。反射机制对性能的影响使用反射机制可以大大增强代

Java中的字节码与反射技术Java中的字节码与反射技术Jun 15, 2023 pm 10:47 PM

Java是一种面向对象的编程语言,代码在编译后不直接变成机器语言,而是转化为字节码。字节码是Java虚拟机(JVM)可以理解的一种二进制形式。因此,在JVM上运行的程序可以在任何平台上运行,这就是Java的跨平台性。Java字节码的特征Java字节码是一种中间代码。编译器将Java源代码转换为字节码并存储在.class文件中。字节码指令可以轻松地转换为指示任

Java底层技术解读:如何实现反射与动态代理Java底层技术解读:如何实现反射与动态代理Nov 08, 2023 pm 05:12 PM

Java底层技术解读:如何实现反射与动态代理引言:Java是一种面向对象的编程语言,在开发过程中,我们经常需要使用到一些底层技术,比如反射和动态代理。本文将介绍反射和动态代理的原理,并给出具体的代码示例,帮助读者更好地理解和运用这两个底层技术。一、反射(Reflection)的原理反射是Java中一种强大而灵活的特性,它使得我们可以在运行时动态地获取和操作一

PHP中的反射机制PHP中的反射机制Aug 31, 2023 pm 01:57 PM

反射通常被定义为程序在执行时检查自身并修改其逻辑的能力。用不太专业的术语来说,反射是要求一个对象告诉您它的属性和方法,并更改这些成员(甚至是私有成员)。在本课程中,我们将深入探讨如何实现这一点,以及它何时可能有用。一点历史在编程时代的初期,出现了汇编语言。用汇编语言编写的程序驻留在计算机内部的物理寄存器中。通过读取寄存器可以随时检查其组成、方法和值。更重要的是,您可以在程序运行时通过简单地修改这些寄存器来更改程序。它需要对正在运行的程序有一些深入的了解,但它本质上是反思性的。与任何很酷的玩具一样

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

ホットツール

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

SublimeText3 中国語版

SublimeText3 中国語版

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

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール