美文网首页
Java的动态机制---反射

Java的动态机制---反射

作者: 吃块西瓜写代码 | 来源:发表于2019-07-26 21:20 被阅读0次

反射机制

动态语言,程序运行时可改变程序结构或变量类型Python、ruby。运行时可以动态的改变结构。利用反射机制,可以让java获得动态特性。

1 什么是反射

  • 反射指得是可以与运行时加载、探知、使用编译时完全未知的类。
  • Class c = Class.firName("com.User")
  • 在加载类之后,在堆内存中,就产生了一个Class类型的对象。
//测试java.lang.Class对象的获取方式
public class Test01{

  public static void main(String[] args){
//一个类被加载后,JVM会创建一个对应该类的Class对象。类的整个信息会被放到对应的Class的对象中。
//同一个类指挥加载一次。
//class interface annotation enm,type ,void                bb
    Class clz = Class.forName(path);
// getClass();对象.getClass()
//String.class;
  int [] arr1 = new int[10];
  int [] arr2 = new int[20];
arr1.getclass().hashCode()==arr2.getclass().hashCode();

}

}

2 应用反射API获取类的信息

//测试java.lang.Class对象的获取方式
public class Test02{

  public static void main(String[] args){
//一个类被加载后,JVM会创建一个对应该类的Class对象。类的整个信息会被放到对应的Class的对象中。
//同一个类指挥加载一次。
//class interface annotation nm,type ,void          
    Class clz = Class.forName(path);
// getClass();对象.getClass()
//String.class;
clz.getNmae();//获得名字
clz.getSimpleName();

//获得属性。将Field换成Method可以获得方法
Field f = clz.getField(String name);//
Field[] f = clz.getFields();//只能获得Public的field;
Method m01 = clz.getDeclaredMethod("getUname",null);
Method m01 = clz.getDeclaredMethod("getUname",String);//加上参数类型。防止重载
Field[] f = clz.gerDeclaredFields();//获得所有field

Constructor[] constructors = clz.getDeclardConstructors();
Constructor constructor = clz.getDeclardConstructor(null );
Constructor<User> c= clz.getDeclaredConstructor(int.class,int.class,String.class);
User u2 = c.newInstance(1,2,"sd");

//通过API调用构造方法,调用的是无参构造方法
User u = clz.newInstance();
//通过反射调用普通方法
Method method = clz.getDeclaredMethod("setUname",String,class);
method.invoke(u,"参数");

//通过API操作属性
Field f = clz.getDeclaredField("uname");
f.set(u,value);//不能访问私有属性。
f.setAccessible(true);
f.set(u,value);//能访问私有属性。



}






}

3 反射机制性能

  • setAccessible
  • 为true时反射对象在使用时取消Java语言的访问检查。职位false应该做java语言访问检查。
  • 禁用安全检查,可以提高反射的运行速度。但安全性会降低

4 反射操作泛型

  • java采用泛型擦除机制,java新增了ParameterizedType,几种类型来代表不能被归一到class类中的类型。但又于原始类相同的类
getGenericParameterTypes();//获得参数信息
getGenericReturnType();//获得返回信息

5 反射操作注解

//获得类注解
Annotation[] annotation = clz.getAnnotations();
Table st = (Table)clz.getAnnotation(Table.class);
Filed f= clz.getDeclaredFiled("studentName");
Filed1 filed1 = f.getAnnotation(Filed1.class);


相关文章

  • Java反射与动态代理

    Java反射 Java反射机制可以动态地获取类的结构,动态地调用对象的方法,是java语言一个动态化的机制 特点:...

  • java反射机制

    java反射机制是为了动态获取类的结构,动态地调用对象的方法 java反射机制 获取类Class对象 A.clas...

  • Java反射机制

    一、什么是JAVA的反射机制 Java反射是Java被视为动态(或准动态)语言的一个关键性质。这个机制允许程序在运...

  • Java反射机制

    一、Java 反射机制概述 1. 反射概述 Reflection (反射)是被视为 动态语言 (动态性是核心,底...

  • Java 反射机制

    Java 反射机制 什么是反射 Java 反射是Java语言的一个很重要的特征,它使得Java具体了“动态性”。 ...

  • Java反射机制详解(二)

    本篇文章继续介绍Java反射机制,不同的是侧重于介绍动态代理。动态代理是代理模式中的一种,是通过Java反射机制来...

  • Java反射机制总结(二)

    本篇文章继续介绍Java反射机制,不同的是侧重于介绍动态代理。动态代理是代理模式中的一种,是通过Java反射机制来...

  • 第6讲 | 动态代理是基于什么原理?

    谈谈 Java 反射机制,动态代理是基于什么原理? 典型回答 反射机制是 Java 语言提供的一种基础功能,赋予程...

  • Java反射实践

    一、概述 Java的反射机制是Java语言动态性的一种体现。反射机制是通过反射API来实现的,它允许程序在运行过程...

  • Java学习day-23:反射机制

    一、反射机制_Class对象获取: 1.反射机制: 反射机制是java的动态性之一;一个类被加载后,JVM 会创建...

网友评论

      本文标题:Java的动态机制---反射

      本文链接:https://www.haomeiwen.com/subject/kqfqrctx.html