首页 > 编程语言 >Java的反射机制

Java的反射机制

时间:2023-09-01 10:32:50浏览次数:47  
标签:反射 Java 对象 class 实例 机制 任意 Class


JAVA反射机制:

程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。尽管在这样的定义与分类下Java不是动态语言,它却有着一个非常突出的动态相关机制:Reflection(反射机制)。

概述:

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

功能:

Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。

原理:

任何一个类如果没有明确地声明继承自哪个父类时,则默认继承Object类.

所以下面两行代码含义一样:

calss Person extends Object{}
    class Person{}



Java的反射机制_动态语言


在java中Object类是一切类的父类,那么所有类的对象实际上也就都是java.lang.Class类的实例,所以所有的对象都可以转变为java.lang.Class类型表示.


实例化Class类对象:

package org.lxh.demo.getclassdemo ;
class X{
};
public class GetClassDemo{
	public static void main(String args[]){
		Class<?> c1 = null ;		// 指定泛型
		Class<?> c2 = null ;		// 指定泛型
		Class<?> c3 = null ;		// 指定泛型
		try{
			// 以下的操作形式是在开发中最常用的一种形式
			c1 = Class.forName("org.lxh.demo.getclassdemo.X") ;
		}catch(ClassNotFoundException e){
			e.printStackTrace() ;
		}
		c2 = new X().getClass() ;		// 通过Object类中的方法实例化
		c3 = X.class ;	// 通过类.class实例化
		System.out.println("类名称:" + c1.getName())  ;	// 得到类的名称
		System.out.println("类名称:" + c2.getName())  ;	// 得到类的名称
		System.out.println("类名称:" + c3.getName())  ;	// 得到类的名称
	}
};




Java的反射机制_实例化_02


所以JAVA反射机制是Java动态性的体现.


Class类的使用:


  • 通过无参构造实例化对象
  • 调用有参构造实例化对象


反射的应用(取得类的结构):

  • 取得所实现的全部接口
  • 取得父类
  • 取得全部构造方法
  • 取得全部方法
  • 取得全部属性

类及对象的生命周期:


要使用一个类,首先要使JVM通过装载,链接,初始化


Java的反射机制_动态语言_03




标签:反射,Java,对象,class,实例,机制,任意,Class
From: https://blog.51cto.com/u_5759800/7318210

相关文章

  • Java数据类型(基本数据类型和引用数据类型)
    Java数据分为基本数据类型和引用数据类型.其中基本数据类型有4类8种.基本数据类型:类似于普通的值引用数据类型:传递的是内存的地址对于引用类型来说,声明只会分配一个引用,指向null,当你想使用的时候不能直接引用,必须实例化之后才能使用。否则,会引起空指针exception。基本数......
  • Java语言的运行机制
    计算机语言分为编译型和解释性两种类型.编译型:( C/C++、Pascal/ObjectPascal(Delphi))编译型语言写的程序执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,比如exe文件,以后要运行的话就不用重新翻译了,直接使用编译的结果就行了(exe文件),因为翻译只做了一次,运行时不需......
  • What's the difference between Async Await and Promise in JavaScript All In One
    What'sthedifferencebetweenAsyncAwaitandPromiseinJavaScriptAllInOneAsyncvsPromisedemos(......
  • Java - ThreadPoolExecutor线程池分析
    Java- ThreadPoolExecutor源码分析 1.为什么要自定义线程池首先ThreadPoolExecutor中,一共提供了7个参数,每个参数都是非常核心的属性,在线程池去执行任务时,每个参数都有决定性的作用。但是如果直接采用JDK提供的方式去构建,可见设置的核心参数最多就两个,这样就会导致对线程池......
  • java多线程
    实现Runnable接口publicclassMyRunnableimplementsRunnable{@Overridepublicvoidrun(){//线程执行的代码}}然后在主线程中创建一个线程对象,并启动该线程:Threadthread=newThread(newMyRunnable());thread.start();继承Thread类publicc......
  • JavaScript 防抖&节流
    JavaScript的防抖(Debouncing)和节流(Throttling)是两种用于优化高频率事件处理的常见技术。它们都可以限制事件的触发频率,以减少过度触发事件处理函数而导致的性能问题。防抖(Debouncing)防抖是指在事件被触发后,等待一定时间再执行事件处理函数。如果在等待时间内事件再次被触发,那么......
  • Arthas(阿尔萨斯)Java 诊断工具
    Arthas(阿尔萨斯)能为你做什么?Arthas是Alibaba开源的Java诊断工具,深受开发者喜爱。当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:1.这个类从哪个jar包加载的?为什么会报各种类相关的Exception?2.我改的代码为什么没有执行到?难道是我没commit?分支搞错了?3.遇到问......
  • 深入探讨进程间通信的重要性:理解不同的通信机制(上)
    进程间通信在操作系统中,进程间通信是指不同进程之间进行信息共享、数据传输和消息通知等交互的过程。每个进程在创建时都有自己独立的虚拟地址空间,但它们共享内核空间。因此,要实现进程间的通信,必须通过内核来进行中介,如下图所示:在Linux系统中,提供了多种进程间通信的机制,包括管......
  • java 使用多线程的注意事项
    线程安全:确保共享资源的正确访问和修改,避免并发冲突。可以通过同步机制(如锁、互斥量、信号量等)或使用线程安全的数据结构来实现线程安全。案例:银行账户并发访问importjava.util.concurrent.locks.Lock;importjava.util.concurrent.locks.ReentrantLock;classBankAccount{......
  • Java中的ThreadLocal详解
     一、ThreadLocal简介多线程访问同一个共享变量的时候容易出现并发问题,特别是多个线程对一个变量进行写入的时候,为了保证线程安全,一般使用者在访问共享变量的时候需要进行额外的同步措施才能保证线程安全性。ThreadLocal是除了加锁这种同步方式之外的一种保证一种规避多线......