Java反射

-------反射--------

1,java反射(Reflection)的底层实现原理

众所周知Java有个Object 类,是所有Java 类的

继承根源,其内声明了数个应该在所有Java类中

被改写的方法:hashCode()、equals()、clone()、

toString()、getClass()等。其中getClass()返回一个

Class 对象

而这个Class 类十分特殊。它和一般类一样继承自

Object,当一个class被加载,或当加载器(class

loader)的defineClass()被JVM调用,JVM 便自动产生

一个Class 对象。

2,Class类其中的yibufen方法,

  • 获取公共构造器 getConstructors()
  • 获取所有构造器 getDeclaredConstructors
  • 获取包含的方法 getMethod()
  • 获取包含的属性 getField(String name)
  • 获取内部类 getDeclaredClasses()
  • 获取外部类 getDeclaringClass()
  • 获取所实现的接口 getInterfaces()
  • 获取修饰符 getModifiers()
  • 获取所在包 getPackage()
  • 获取类名包含包路径 getName()
  • 类名不包含包路径 getSimpleName()

3,怎么使用反射?

一般情况下我们通过反射创建类对象主要有两种方式:

通过 Class 对象的 newInstance() 方法
通过 Constructor 对象的 newInstance() 方法

4,,java反射的简单演示

上面介绍了下java反射的实现机制,接下来我主要来演示一下反射的使用

首先定义一个user对象类如下:

/**
 * 定义一个用户对象
 *
 * @author zhangqh
 * @date 2018年4月24日
 */
public class User implements Serializable {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    /**
     * 用户id
     */
    private Integer userId;
    /**
     * 用户名称
     */
    private String userName;
 
    /**
     * 公共元素
     */
    public String age;
 
    private User(Integer userId){}
 
    public User(){}
    public User(Integer userId, String userName) {
        super();
        this.userId = userId;
        this.userName = userName;
    }
    /**
     * @return the userId
     */
    public Integer getUserId() {
        return userId;
    }
    /**
     * @param userId the userId to set
     */
    public void setUserId(Integer userId) {
        this.userId = userId;
    }
    /**
     * @return the userName
     */
    public String getUserName() {
        return userName;
    }
    /**
     * @param userName the userName to set
     */
    public void setUserName(String userName) {
        this.userName = userName;
    }
 
}

5.获取类成员变量信息

方法用途
getField(String name)获取某个公有的属性对象
getFields()获取所有公有对象
getDlecaredField(String name)获取某个属性对象(public和非public)
getDlecaredFields()获取所有属性对象(public和非public)

6.获取构造函数

方法用途
getConstrutor(Class…<?>parameterTypes)获得该类中与参数类型匹配的公有构造方法
getConstrutors()获取该类中所有公有构造方法
getDeclaredConstrutor(class…<?>parameterTypes)获得该类中与参数列表匹配的构造方法
getDeclaredConstrutors获得该类中所有构造方法

7.反射是什么?

反射是什么呢?当我们的程序在运行时,需要动态的加载一些类这些类可能之前用不到所以不用加载到jvm,而是在运行时根据需要才加载。 原来使用new的时候,需要明确的指定类名,这个时候属于硬编码实现,而在使用反射的时候,可以只传入类名参数,就可以生成对象,降低了耦合性,使得程序更具灵活性。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值