现在的位置: 首页 > 综合 > 正文

【Java】 Java的反射机制概述及方法介绍

2014年09月05日 ⁄ 综合 ⁄ 共 1972字 ⁄ 字号 评论关闭

反射基石 Class类

java类用于描述一类事物的共性,该类事物有什么属性,没有什么属性,至于这个属性的值是什么,则是由这个类的实例对象来确定的,不同的实例对象有不同的属性。Java程序中的各个java类,它们是否属于同一个类,是不是可以用一个类来描述这类事物呢?这个类的名字就是Class,要主要与小写class关键字的区别。Class类描述了哪些方面的信息呢?类的名字,类的访问属性,类所属于的包名,字段名称的列表、方法名称的列表,等等。学习反射,首先就要明白Class这个类

java程序中各个java类同属于一类事物,描述这类事物的java类名就是class
对比提问:众多的人用一个什么类表示?众多的Java类用一个什么类表示?
人---->person
java类---->class

类名.class.例如System.class
对象.getClass(),例如new Date().getClass()

CLass.forName("类名")  例如Class.forName("java.util.Date")//forName 作用返回字节码

反射就是把java类中的各种成分映射成相应的java类,例如,一个java类中用一个Class类的对象来表示,一个类中的组成部分:成员变量,方法,构造方法,包等等信息也用一个个的java类来表示,就想汽车是一个类,汽车中的发动机,变速箱等等也是一个个的类。表示java类的class类显然要提供一系列的方法,来获得其中的变量,方法,构造方法,修饰符,包等信息,这些信息就是用相应类的实例对象来表示,它们是Field,Method,Contructor,Package等等。

Constructor类
得到某个类所有的构造方法:
例子:Constructor constructors[]=
Class.forName("java.lang.String"),getConstructors();
得到某一个构造方法:
例子 Constructor constructor=
Class.forName("java.lang.String")getConstructor(StringBuffer.class)
//new String(new StringBuffer("abc"));
Constructor constructor1=String.class.getConstructor(StringBuffer.class)//得要方法的时候需要类型
String str2=(String)constructor1.newInstsance(new StringBuffer("abc"));//调用获得的方法
System.out.println(str2.CharAt(2));

Class.newinstance()方法
例子 String obj=(String)Class.forName("java.lang.String").newInstance();
该方法内部先得到默认构造方法,然后用该构造方法创建实例对象。

Filed类代表某一个类中的一个成员变量

public class Reflectpoint
{
private int x;
public int y;

public Reflectpoint(int x,int y)
 {
 super();
 this.x=x;
 this.y=y;
 }
}
Reflectpoint pt1=new Reflectpoint(3,5)
Field fieldY = pt1.getClass().getField("y");//不代表具体的值
//fieldY的值是多少?是5,错 FieldY不是对象身上的变量,而是类上,要用它去取某个对象上对应的值
System.out.println(fieldY.get(pt1));
Field fieldX = pt1.getClass().getDeclared("x");
fieldX.setAccessible(ture);
System.out,println(fieldX.get(pt1))

Method类
Method类代表某个类中的一个成员方法
通常方式,System.out.println(Str.charAt(1));
反射方式,System.out.println(charAt.invoke(str,1));
如果传递给Method对象的invoke()方法的第一个参数为null,说明该Method对象对应的是一个静态方法

//str1.charAt(1);
Method methosCharAt=String.class.getMethod("ChatAt",int.class)
System.out.println(methosCharAt.invoke(str,1));

抱歉!评论已关闭.