java之反射

java之反射

1. Class对象获取方法

   1.1 通过Class.forName(“类全限定名”),类的全限定名:类名+包名
   1.2 通过Class的属性来获取,className.class
   1.3 调用某个对象的getClass()方法
   1.4 第一种比第二种的性能更好,不需要调用方法,且更安全,因为在编译期间检查类是否存在,如果是字符串来获得,只能用第一种。

2. 从Class对象中获得有关信息

   2.1 ConstructorgetConstructor(Class
   2.2 Constructors
   2.3 Method getMethod(String methodName,Class…paramType) 返回该class对应的,带指定形参的方法
   2.4 Method[] getMethods() 返回所有的public方法
   2.5 Filed getFiled(String name) 返回该类所对应的名为name的成员变量
   2.6 Filed[] getFileds() 返回public的所有成员变量
   2.7 反射可以调用私有的构造函数和方法的,只是这里没有列举

3. 使用反射生成对象

     3.1 使用Class的newInstance(),要求是必须有默认构造函数
public Test{
    public static void main(String[]args){
        Class<Test>cls=Test.class;
        cls.newInstance();
    }
}
     3.2先用Class对象获得Constructor对象,再用constructor对象使用newInstance创建对象
 public Test{
    private String name;
    public Test(String name){
        this.name=name;
    }
    public static void main(String[]args){
        Class<Test>cls=Test.class;
        Constructor ctor=cls.getConstructor(String,class);
    }
}

对于上面两种创建方法,一般采用第一种,因为在javaEE里面,都是用配置文件来创建对象,配置文件大多都是类的全限定名。

4. 动态创建数组

使用Array类,通过 Object Array.newInstance(Class<?>componentType,int length)来进行实例化,同时通过set(Object array,int index,int value)来设置值,通过get(Object,int index)来获取值。案例代码如下:

 package javase;
 import java.lang.reflect.Array;
 public class Demo {
 public static void main(String[] args) throws  ClassNotFoundException {
        Object obj=Array.newInstance(Integer.class, 2);
        Array.set(obj, 0,1);
        System.out.println(Array.get(obj, 0));
     }
 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值