反射


反射:
加载类,获得类的字节码有三种方式:
1.Class.forName("包名.类名");
2.new  类名().getClass();
3.类名.class;

Class clazz = Class.forName("com.tanghaibin.reflex.Person");
           
Constructor [] constructor = clazz.getConstructors();//获取Perosn类中的所有构造器,其顺序是按照参数个数来排序的

Person person = (Person) constructor[0].newInstance();//使用无参构造器来创建person对象

Person person2 = (Person)constructor[1].newInstance("simple",22);//使用有参构造器来创建person对象

反射出公共的构造函数的方法:getConstructor;
创建此对象所表示的类的新实例:newInstance

反射出私有的构造函数的方法:getDeclaredConstructor
如果要new出实例,则需要暴力反射:setAccessible(true)

反射出共有构造函数案例:import org.junit.Test;

public class test2 {
      @Test
      public void test(){
      try{
      Class class2=Class.forName("test1.junit");//加载类的字节码
      Constructor ji=class2.getConstructor(String.class);//反射出参数类型为String类型的构造函数
      ji.newInstance("haha");//创建一个实例
      }catch(Exception e){
           
      }
      }
}


反射出私有构造函数案例:
import org.junit.Test;
public class test2 {
      @Test
      public void test(){
      try{
      Class class2=Class.forName("test1.junit");//加载类的字节码
      Constructor ji=class2.getDeclaredConstructor();//反射出私有的无参的构造函数
      ji.setAccessible(true);//暴力反射
      ji.newInstance();//创建实例
      }catch(Exception e){
           
      }
      }
}


反射类的方法:
反射出公有方法:getMethod
运行方法:invoke(类对象,参数)

反射出私有的方法:getDeclaredMehod
要调用私有方法;需要暴力反射:setAccessible(true)

反射获得方法的参数的类型:getParameterTypes

反射获得方法的权限:getModifiers()

反射获得属性:getDeclaredFileds

反射出main方法
getMethod("main",String [].class);
运行main方法有两种:
第一种:invoke(null,(Object)new String[]{字符串});
第二种:invoke(null,new Object[](new String[]{字符串}));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值