反射

本文介绍了Java反射机制的基本概念,详细讲解了如何获取Class对象、访问类的属性、方法和构造器。通过实例展示了反射调用方法和赋值,讨论了setAccessible的使用,并提及其带来的性能和安全问题。反射在框架开发中扮演重要角色,如Spring的IOC和AOP功能。文章还提及了反射在JDBC和模块化开发中的应用。
摘要由CSDN通过智能技术生成

如果你即将学Spring SpringMVC Mybatis 等框架的话,那么你应该先学习反射机制

如果你用过了Spring SpringMVC Mybatis等框架的话,若想进一步了解它们的原理的话,你也应该学习反射

我之前呢,已经写过SSM的使用了,如果你没用过SSM的话,可以回顾一下奥

https://blog.csdn.net/JunSIrhl/article/details/104031954

https://blog.csdn.net/JunSIrhl/article/details/104034370

https://blog.csdn.net/JunSIrhl/article/details/104035337

同时,注解与反射在框架开发中地位相同,这是框架的核心基础

https://blog.csdn.net/JunSIrhl/article/details/104017247

本文会对Java的反射机制做一个概述,并详细介绍它的基本使用,并试着阐述反射机制的原理,希望对点进这篇文章你的有帮助

What is Reflect

JAVA反射机制(Reflect)是在运行状态中

对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性

这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制

Class类

我们知道类是具有相同属性或者行为的一类事物,那么类本身也可以再被抽象,因为类们也有共同的属性和行为(比如类都有属性,都有构造器,都有方法,都能调用方法),所以把类们又抽象成了一个类Class

众所周知Java有个Object 类,是所有Java 类的继承根源,其内声明了数个应该在所有Java 类中被改写的方法:hashCode()、equals()、clone()、toString()、getClass()等。其中getClass()就返回了一个Class 对象

Class 类十分特殊。它和一般类一样继承自Object,其实体用以表达Java程序运行时的classes和interfaces,也用来表达enum、array、primitive Java types(boolean, byte, char, short, int, long, float, double)以及关键词void

当一个class被加载,或当加载器(class loader)的defineClass()被JVM调用,JVM 便自动产生一个Class 对象

在学习Class类的过程中我们还需要学习Field类,Method类,Constructor类
Field类:类属性的抽象
Method类:类方法的抽象
Constructor类:类构造器的抽象

必须掌握的操作

获取Class类对象

  • 方式一
	//根据一个类的全名字符串来获得一个类的类对象
	Class<?> clazz = Class.forName("java.util.HashMap");
  • 方式二
//obj为任意对象,getClass是所有对象都带的一个方法
Class<?> clazz = obj.getClass();

获得类对象所有方法

//获得传递过来的类的所有方法
Method[] methods = clazz.getDeclaredMethods();

//System.out.println(Arrays.toString(methods));
for(Method m : methods){
   
	System.out.println(m);	}

public java.lang.Object java.util.HashMap.remove(java.lang.Object)
public boolean java.util.HashMap.remove(java.lang.Object,java.lang.Object)
public java.lang.Object java.util.HashMap.get(java.lang.Object)

//其余方法省略

获取类对象所有属性

  	  Field[] fields = clazz.getDeclaredFields();
 		 for(Field f : fields){
   
    		  System.out.println(f);
  		  }

private static final long java.util.HashMap.serialVersionUID<

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值