您的位置:首页 > 编程语言 > Java开发

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

2012-09-04 11:28 405 查看
反射基石 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));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: