cari
RumahJavaJavaAsasjava反射机制原理是什么

java反射机制原理是什么

Oct 23, 2020 am 11:04 AM
javamekanisme refleksi

java反射机制原理:1、对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能调用它的任意一个方法;2、一切皆对象,类也是对象;3、当【Animal.class】在硬盘中时是一个文件,当载入到内存中,可以认为是一个对象。

java反射机制原理是什么

java反射机制原理:

一、反射机制的概念:

指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能调用它的任意一个方法.这种动态获取信息,以及动态调用对象方法的功能叫java语言的反射机制.

二、反射机制的应用:

生成动态代理,面向切片编程(在调用方法的前后各加栈帧).

三、反射机制的原理:

1、首先明确的概念: 一切皆对象----类也是对象.

2、然后知道类中的内容 :modifier  constructor  field  method.

3、其次明白加载: 当Animal.class在硬盘中时,是一个文件,当载入到内存中,可以认为是一个对象,是java.lang.class的对象.

当运行程序时,实例化时产生Animal.class对象,这两个对象有什么区别?

如下图,上面的Animal.class对象是java.lang.class的对象;下面的对象是Animal.class实例化产生的对象

3dd15a3164fcefdba83b5cf7b6f6b80.png

 

4、当Animal.class载入到JVM中,JVM是怎么识别Animal.class中含有的方法,成员变量,构造方法等内容?

如下图, Animal.class实例化对象中成员变量  毛色 =红色;

加载到内存的时候,毛色=null,是在实例化的时候毛色被赋值为红色.

6871eedafd27eacc1b72ac8521ed203.png

Animal.class中毛色这个属性对于java.lang.class来说,是Field的一个属性值, 毛色对于java.lang.class来说也是一个对象.这也是反射机制动态获取信息,以及动态调用对象方法的原因.

下图是Java.lang.class 中的方法

6871eedafd27eacc1b72ac8521ed203.png

e2d5681d61b580beaa4f02e5143bce6.png

59f2f39ea2a30acadf537febea9449e.png

在java.lang.class中,毛色是Field的一个属性值,Animal中所有的方法,成员变量,构造器,修饰符都是按照java.lang.class中的标准去写的,否则会在编译的时候报错

6e48ebbf9d537f840cabe8156a3dcbf.png

四、放射机制简单实例代码

public class _14_ReflectTest07
{
     public static void main(String[] args) throws Exception{
         //1.获取类
         Class c = Class.forName("_12_CustomerService");
         //获取某个特定的方法
         //通过:方法名+形参列表
         Method m = c.getDeclaredMethod("login",String.class,String.class);
         //通过反射机制执行login方法.
         Object o = c.newInstance();
         //调用o对象的m方法,传递"admin""123"参数,方法的执行结果是retValue
         Object retValue = m.invoke(o, "admin","123");
         System.out.println(retValue); //true
     }
}
 
 
 
public class _12_CustomerService
{
     //登录
     public boolean login(String name,String pwd){
         if("admin".equals(name) && "123".equals(pwd)){
              return true;
         }
         return false;
     }
     //退出
     public void logout(){
         System.out.println("系统已安全退出!");
     }
}

相关学习推荐:java基础教程

Atas ialah kandungan terperinci java反射机制原理是什么. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
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
Apakah algoritma pengumpulan sampah yang berbeza di Java (siri, selari, CMS, G1, ZGC)?Apakah algoritma pengumpulan sampah yang berbeza di Java (siri, selari, CMS, G1, ZGC)?Mar 14, 2025 pm 05:06 PM

Artikel ini membincangkan pelbagai algoritma pengumpulan sampah Java (Serial, Selari, CMS, G1, ZGC), kesan prestasi mereka, dan kesesuaian untuk aplikasi dengan timbunan besar.

Apakah Mesin Maya Java (JVM) dan bagaimana ia berfungsi secara dalaman?Apakah Mesin Maya Java (JVM) dan bagaimana ia berfungsi secara dalaman?Mar 14, 2025 pm 05:05 PM

Artikel ini membincangkan Mesin Maya Java (JVM), yang memperincikan peranannya dalam menjalankan program Java di seluruh platform yang berbeza. Ia menerangkan proses dalaman JVM, komponen utama, pengurusan memori, pengumpulan sampah, dan pengoptimuman prestasi

Bagaimana saya menggunakan enjin Nashorn Java untuk skrip dengan JavaScript?Bagaimana saya menggunakan enjin Nashorn Java untuk skrip dengan JavaScript?Mar 14, 2025 pm 05:00 PM

Enjin Nashorn Java membolehkan skrip JavaScript dalam aplikasi Java. Langkah -langkah utama termasuk menubuhkan Nashorn, mengurus skrip, dan mengoptimumkan prestasi. Isu utama melibatkan keselamatan, pengurusan ingatan, dan keserasian masa depan kerana deprec Nashorn

Bagaimanakah saya menggunakan pernyataan cubaan Java untuk pengurusan sumber automatik?Bagaimanakah saya menggunakan pernyataan cubaan Java untuk pengurusan sumber automatik?Mar 14, 2025 pm 04:59 PM

Sumber-sumber cuba Java memudahkan pengurusan sumber dengan menutup sumber secara automatik seperti aliran fail atau sambungan pangkalan data, meningkatkan kebolehbacaan kod dan penyelenggaraan.

Bagaimanakah saya menggunakan enum Java untuk mewakili set nilai tetap?Bagaimanakah saya menggunakan enum Java untuk mewakili set nilai tetap?Mar 14, 2025 pm 04:57 PM

Java Enums mewakili set nilai tetap, menawarkan keselamatan jenis, kebolehbacaan, dan fungsi tambahan melalui kaedah dan pembina tersuai. Mereka meningkatkan organisasi kod dan boleh digunakan dalam penyataan suis untuk pengendalian nilai yang cekap.

See all articles

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

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

Muat turun versi mac editor Atom

Muat turun versi mac editor Atom

Editor sumber terbuka yang paling popular

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

SublimeText3 versi Inggeris

SublimeText3 versi Inggeris

Disyorkan: Versi Win, menyokong gesaan kod!

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Persekitaran pembangunan bersepadu PHP yang berkuasa