java中的反射机制

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

Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。

反射机制应用场合:在编译时根本无法知道该对象或类可能属于哪些类,程序只依靠运行时信息来发现该对象和类的真实信息

反射的作用:

通过反射可以使程序代码访问装载到JVM 中的类的内部信息
获取已装载类的属性信息
获取已装载类的方法
获取已装载类的构造方法信息

例如一个类User u=new User(); u是类user的对象 那么user是谁的对象那是java.lang.class的对象

class的获取方式

获取方式                                                     说明                                                         实例

object.getclass(); 获取指定对象的的class                             class user u= neuser();classc=u.getclass;

object.class class 直接获取 class c=user.class;

c;lass forName("类名");  用class的静态方法传入类的全称 class forName("文件路径")

在JDK中,主要由以下类来实现Java反射机制,这些类
都位于java.lang.reflect包中
Class类:代表一个类
Field类:代表类的成员变量(也称类的的属性)
Method类:代表类的方法
Constructor类:代表类的构造方法
Array类:提供了动态创建数组,以及访问数组元素的静态方法
 获得Class对象
Class  c1=Class.forName("cn.bjsxt.bean.User");
sysp("全路径:"+c1.getName());
sysp("类名:"+c1.getSimpleName());
sysp("访问权限:"+Modifier.toString(c1.getModifiers()));
sysp("是否是接口:"+c1.isInterface());
sysp("父亲全路径名:"+c1.getSuperclass().getName());
sysp("父类名:"+c1.getSuperclass().getSimpleName());                                                        

通过反射获取类的属性
获取public的属性:object.getFields()
获取所有的属性:   object.getDeclaredFields()
根据属性名称获取public的属性信息:
                                         object.getField(“sex”);
根据属性名称获取属性的信息:
                                       object.getDeclaredField(“name”);

通过反射获取类的方法
获得公有的方法(包括父类的,接口的)等:object.getMethods();
获取全部的方法(本类定义的):object.getDeclaredMethods();
根据方法名称获得方法:object.getDeclaredMethods(“show”,null)
   object.getDeclaredMethods(“show”,int.class,String.class);
获取方法参数的列表
    Class [] cm=方法对象.getParameterTypes();

通过反射获取类的构造方法
获得所有的构造方法: Constructor[]con=object.getDeclaredConstructors();
获得公有的构造方法:Constructor [] con=obj.getConstructors();
根据参数获得指定的构造方法:
   object.getConstructors(int.class,int.class,String.class);
   object.getConstructors(null);

使用反射动态创建对象

方法一:使用Class的newInstance()方法,仅适用于无参构造方法

Class<User> clazz=(Class<User>)Class.forName("cn.bjsxt.bean.User");
User u=clazz.newInstance();

方法二:调用Constructor的newInstance()方法,适用所有构造方法

Constructor<User> cons = clazz.getConstructor(
                    int.class,int.class, String.class,String.class );
User u= cons.newInstance( 1001,19,"王一一","男");




























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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值