Rumah Java javaTutorial java基础反射Reflection简单介绍

java基础反射Reflection简单介绍

Apr 03, 2019 pm 06:40 PM
java


反射(Reflection)是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序获取自身的信息,可以在运行时访问 Java 对象的属性,方法,构造方法等。

1554287217367536.jpg

应用场景

开发通用框架 - 反射最重要的用途就是开发各种通用框架。比如 Spring通过 XML 文件配置 JavaBean、Filter 等,为了保证框架的通用性,它们可能需要根据配置文件加载不同的对象或类,调用不同的方法,这个时候就必须用到反射——运行时动态加载需要加载的对象。动态代理 - 在切面编程(AOP)中,需要拦截特定的方法,通常,会选择动态代理方式。注解 - 注解本身仅仅是起到标记作用,它需要利用反射机制,根据注解标记去调用注解解释器,执行行为。如果没有反射机制,注解并不比注释更有用。可扩展性功能 - 应用程序可以通过使用完全限定名称创建可扩展性对象实例来使用外部的用户定义类。缺点

性能开销 大- 反射操作的性能要比非反射操作的性能要差,应该在性能敏感的应用程序中频繁调用的代码段中避免。破坏封装性 - 反射调用方法时可以忽略权限检查,因此可能会破坏封装性而导致安全问题。内部曝光 - 由于反射允许代码执行在非反射代码中非法的操作,例如访问私有字段和方法,所以反射的使用可能会导致意想不到的副作用,这可能会导致代码功能失常并可能破坏可移植性。反射代码打破了抽象,因此可能会随着平台的升级而改变行为。Class 对象

要想使用反射,首先需要获得待操作的类所对应的 Class 对象。

反射的本质:在运行时,把每个Java 类中的各种属性映射成一个个的 Java 对象。

假如定义了以下代码:

User user = new User();

1、JVM 加载方法的时候,遇到new User(),JVM 会根据User的全限定名去加载User.class;

2、JVM 会去本地磁盘查找User.class文件并加载 JVM 内存中。

3、JVM 通过调用类加载器自动创建这个类对应的Class对象,并且存储在 JVM 的方法区。

获得 Class 的三种方法:

(1)使用 Class 类的 forName静态方法

应用场景

开发通用框架 - 反射最重要的用途就是开发各种通用框架。比如 Spring通过 XML 文件配置 JavaBean、Filter 等,为了保证框架的通用性,它们可能需要根据配置文件加载不同的对象或类,调用不同的方法,这个时候就必须用到反射——运行时动态加载需要加载的对象。动态代理 - 在切面编程(AOP)中,需要拦截特定的方法,通常,会选择动态代理方式。注解 - 注解本身仅仅是起到标记作用,它需要利用反射机制,根据注解标记去调用注解解释器,执行行为。如果没有反射机制,注解并不比注释更有用。可扩展性功能 - 应用程序可以通过使用完全限定名称创建可扩展性对象实例来使用外部的用户定义类。缺点

性能开销 大- 反射操作的性能要比非反射操作的性能要差,应该在性能敏感的应用程序中频繁调用的代码段中避免。破坏封装性 - 反射调用方法时可以忽略权限检查,因此可能会破坏封装性而导致安全问题。内部曝光 - 由于反射允许代码执行在非反射代码中非法的操作,例如访问私有字段和方法,所以反射的使用可能会导致意想不到的副作用,这可能会导致代码功能失常并可能破坏可移植性。反射代码打破了抽象,因此可能会随着平台的升级而改变行为。Class 对象

要想使用反射,首先需要获得待操作的类所对应的 Class 对象。

反射的本质:在运行时,把每个Java 类中的各种属性映射成一个个的 Java 对象。

假如定义了以下代码:

User user = new User();

1、JVM 加载方法的时候,遇到new User(),JVM 会根据User的全限定名去加载User.class;

2、JVM 会去本地磁盘查找User.class文件并加载 JVM 内存中。

3、JVM 通过调用类加载器自动创建这个类对应的Class对象,并且存储在 JVM 的方法区。

获得 Class 的三种方法:

(1)使用 Class 类的 forName静态方法

1554287295907346.jpg

(2)调用 Object 的 getClass方法

1554287510753072.jpg

反射创建实例对象

用 Class对象的 newInstance方法。用 Constructor对象的 newInstance 方法

1554287748340863.jpg

java.lang.reflect包的核心接口和类

Member接口 - 反映关于单个成员(字段或方法)或构造函数的标识信息。Field类 - 提供一个类的域的信息以及访问类的域的接口。Method类 - 提供一个类的方法的信息以及访问类的方法的接口。Constructor类 - 提供一个类的构造函数的信息以及访问类的构造函数的接口。Array类 - 该类提供动态地生成和访问 JAVA 数组的方法。Modifier类 - 提供了 static 方法和常量,对类和成员访问修饰符进行解码。Proxy类 - 提供动态地生成代理类和类实例的静态方法。

【推荐课程:Java相关课程

Atas ialah kandungan terperinci java基础反射Reflection简单介绍. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

<🎜>: Bubble Gum Simulator Infinity - Cara Mendapatkan dan Menggunakan Kekunci Diraja
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Sistem Fusion, dijelaskan
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial Java
1677
14
Tutorial PHP
1280
29
Tutorial C#
1257
24
Komposer: Membantu pembangunan PHP melalui AI Komposer: Membantu pembangunan PHP melalui AI Apr 29, 2025 am 12:27 AM

AI boleh membantu mengoptimumkan penggunaan komposer. Kaedah khusus termasuk: 1. Pengoptimuman Pengurusan Ketergantungan: AI menganalisis kebergantungan, mengesyorkan kombinasi versi terbaik, dan mengurangkan konflik. 2. Generasi Kod Automatik: AI menjana fail komposer.json yang sesuai dengan amalan terbaik. 3. Meningkatkan Kualiti Kod: AI mengesan masalah yang berpotensi, memberikan cadangan pengoptimuman, dan meningkatkan kualiti kod. Kaedah ini dilaksanakan melalui pembelajaran mesin dan teknologi pemprosesan bahasa semulajadi untuk membantu pemaju meningkatkan kecekapan dan kualiti kod.

Cara menggunakan fungsi MySQL untuk pemprosesan dan pengiraan data Cara menggunakan fungsi MySQL untuk pemprosesan dan pengiraan data Apr 29, 2025 pm 04:21 PM

Fungsi MySQL boleh digunakan untuk pemprosesan dan pengiraan data. 1. Penggunaan asas termasuk pemprosesan rentetan, pengiraan tarikh dan operasi matematik. 2. Penggunaan lanjutan melibatkan menggabungkan pelbagai fungsi untuk melaksanakan operasi kompleks. 3. Pengoptimuman prestasi memerlukan mengelakkan penggunaan fungsi dalam klausa WHERE dan menggunakan GroupBy dan jadual sementara.

Cara mengkonfigurasi set aksara dan peraturan pengumpulan mysql Cara mengkonfigurasi set aksara dan peraturan pengumpulan mysql Apr 29, 2025 pm 04:06 PM

Kaedah untuk mengkonfigurasi set aksara dan kolasi dalam MySQL termasuk: 1. Menetapkan set aksara dan kolasi di peringkat pelayan: setNames'utf8 '; Setcharactersetutf8; SetCollation_Connection = 'UTF8_GENERAL_CI'; 2. Buat pangkalan data yang menggunakan set aksara tertentu dan kolasi: createdataTabaseexample_dbcharactersetutf8collateutf8_general_ci; 3. Nyatakan set aksara dan kolasi semasa membuat jadual: createTableExample_table (idint

Cara menamakan semula pangkalan data di mysql Cara menamakan semula pangkalan data di mysql Apr 29, 2025 pm 04:00 PM

Menamakan semula pangkalan data dalam MySQL memerlukan kaedah tidak langsung. Langkah -langkah adalah seperti berikut: 1. Buat pangkalan data baru; 2. Gunakan mysqldump untuk mengeksport pangkalan data lama; 3. Import data ke dalam pangkalan data baru; 4. Padam pangkalan data lama.

Bagaimana untuk melaksanakan corak singleton di C? Bagaimana untuk melaksanakan corak singleton di C? Apr 28, 2025 pm 10:03 PM

Melaksanakan corak singleton di C dapat memastikan bahawa hanya ada satu contoh kelas melalui pembolehubah ahli statik dan fungsi ahli statik. Langkah -langkah khusus termasuk: 1. Gunakan pembina peribadi dan padamkan pembina salinan dan pengendali tugasan untuk mengelakkan instantiasi langsung luaran. 2. Menyediakan titik akses global melalui kaedah statik GetInstance untuk memastikan hanya satu contoh yang dibuat. 3. Untuk keselamatan benang, mod kunci semak dua boleh digunakan. 4. Gunakan petunjuk pintar seperti std :: shared_ptr untuk mengelakkan kebocoran ingatan. 5. Bagi keperluan prestasi tinggi, pembolehubah tempatan statik boleh dilaksanakan. Harus diingat bahawa corak singleton boleh menyebabkan penyalahgunaan negara global, dan disyorkan untuk menggunakannya dengan berhati -hati dan mempertimbangkan alternatif.

Apakah peranan Java dalam pembangunan peranti IoT (Internet of Things), memandangkan kemerdekaan platform? Apakah peranan Java dalam pembangunan peranti IoT (Internet of Things), memandangkan kemerdekaan platform? May 03, 2025 am 12:22 AM

JavaPlaysasignificantroleiniotduetoitsplatformindant.1) itAllowscodetobewrittenceandondrariousdevices.2) Java'secosystemprovidesuseFullibrariesforiot.3)

Apakah kelebihan menggunakan Java untuk aplikasi web yang perlu dijalankan pada pelayan yang berbeza? Apakah kelebihan menggunakan Java untuk aplikasi web yang perlu dijalankan pada pelayan yang berbeza? May 03, 2025 am 12:13 AM

Java sesuai untuk membangunkan aplikasi web cross-server. 1) Falsafah "Tulis Sekali, Di Mana -mana" Java membuat kodnya dijalankan di mana -mana platform yang menyokong JVM. 2) Java mempunyai ekosistem yang kaya, termasuk alat seperti Spring dan Hibernate, untuk memudahkan proses pembangunan. 3) Java melaksanakan dengan baik dalam prestasi dan keselamatan, menyediakan pengurusan memori yang cekap dan jaminan keselamatan yang kuat.

Cara menetapkan kesan putaran elemen HTML Cara menetapkan kesan putaran elemen HTML Apr 30, 2025 pm 02:42 PM

Bagaimana untuk menetapkan kesan putaran elemen dalam HTML? Ia boleh dicapai menggunakan CSS dan JavaScript. 1. Harta transformasi CSS digunakan untuk putaran statik, seperti berputar (45DEG). 2. JavaScript boleh mengawal putaran secara dinamik, yang dilaksanakan dengan mengubah atribut Transform.

See all articles