java反射机制

一:什么是反射

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

二:三种实例化对象

       Class类是描述整个类的概念,也是整个反射的操作源头,在使⽤Class类的时候需要关注的依然是这个类的对象。⽽这个类的对象的产⽣模式⼀共有三种:

1. 任何类的实例化对象可以通过Object类中的getClass()⽅法取得Class类对象。
2. "类.class":直接根据某个具体的类来取得Class类的实例化对象。
3. 使⽤Class类提供的⽅法:public static Class<?> forName(String className) throws
ClassNotFoundException

三:反射的应用

  • 取得类的包名称: public Package getPackage
  • 取得⽗类的Class对象: public native Class<? super T> getSuperclass();
  • 取得实现的⽗接⼝:public Class<?>[] getInterfaces()
  • 取得指定参数类型的构造:public Constructor<T> getConstructor(Class<?>... parameterTypes)throws NoSuchMethodException, SecurityException
  • 取得类中的所有构造:public Constructor<?>[] getConstructors() throws SecurityException
  • 取得全部普通⽅法:public Method[] getMethods() throws SecurityExcep
  • 取得指定普通⽅法:public Method getMethod(String name, Class<?>... parameterTypes)

注意:在定义简单java类的时候⼀定要保留有⼀个⽆参构造方法,Class类通过反射实例化类对象的时候,只能够调⽤类中的⽆参构造。如果现在类中没有⽆参构造则⽆法使⽤Class类调⽤,只能够通过明确的构造调⽤实例化处理。

四:双亲委派模型

       双亲委派模型的⼯作流程是:如果⼀个类加载器收到了类加载请求,它⾸先不会⾃⼰去尝试加载这个类,⽽是把这个请求委托给⽗类加载器去完成,每⼀个层次的类加载器都是如此。 因此,所有的加载请求都应当传送到顶层的BootStrap加载器中,只有当⽗加载器反馈⽆法完成这个加载请求时(在⾃⼰搜索范围中没有找到此类),⼦加载器才会尝试⾃⼰去加载。

       双亲委派模式对于保证Java程序的稳定运⾏很重要。有⼀个显⽽易⻅的好处就是Java类随着它的类加载器⼀起具备了⼀种带有优先级的层次关系。例如java.lang.Object类,它存放在rt.jar中,⽆论哪⼀个类加载器要加载这个类,最终都是委派给处于顶端的启动类加载器进⾏加载。因此, Object类在程序的各种类加载器环境中都是同⼀个类
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值