反射

来源:互联网 发布:kindle保护套知乎 编辑:程序博客网 时间:2024/05/16 17:36


反射
反射的基石:Class 类
代表java类对应的各个类在内存中的字节码,类加载到内存,在内存空间里内容就是类的字节码,一个个空间分别用一个个对象来表示,对象有相同的类型。
——————
得到字节码对应的实例对象方法(Class类型)
1,类名.class:
System.class
任何数据类型都具备的静态属性
2,对象.getClass:
new Date().getClass()
Object中的getClass方法
3,通过给定的类的字符串名称使用Class.forName()方法类获取该类:
Class.forName("java.util.Date")
——
八个基本类型和void,
有九种预定义的 Class实例对象,八个基本类型和 void。这些类对象由 Java 虚拟机创建,与其表示的基本类型同名,即 boolean、byte、char、short、int、long、float 和 double。 
基本类型的字节码获取方式只有一种就是类名.class。例如int.class;void.class
isPrimitive()是否是基本类型
isArray()是否是数组
**只要是在源程序中出现的类型,都有各自的Class实例对象。int[],void,int.
——————
Java反射机制是在运动状态中,对于任意一个类都能知道这个类的所有属性和方法。
对于任意一个对象都能够调用它的任意一个方法和属性,这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。
简单说:反射就是将Java类中的各种成分映射成相应的java类。
Field变量,Method方法,Contructor构造方法,Package包等。

import java.lang.reflect.Constructor;/** * 1,得到字节码的三个方法 * 2,基本类型和数组类型 *  * */public class ClassDemo{public static void main(String[] args) throws Exception {String str = "abc";//通过对象,Class cl1 = str.getClass();//通过类名Class cl2 = String.class;//通过给定类的字符串名称Class.forName("java.util.Date");//是否基本类型int.class.isPrimitive();void.class.isPrimitive();//是否数组int[].class.isArray();//Contructor构造方法Constructor constructor = String.class.getConstructor(StringBuilder.class);//得到构造方法//使用构造方法String str1 = (String)constructor.newInstance(new StringBuilder("abc"));//Field变量Demo d = new Demo(3,6);Field fieldy = d.getClass().getField("y");//返回一个 Field 对象,它反映此 Class 对象所表示的类或接口的指定公共成员字段//y是类上变量//getDeclaredField返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段filedy.get(d);}class Demo{int x;int y;Demo(int x,int y){this.x=x;this.y=y;}}}


原创粉丝点击