反射三种获取对象方式及调用(无参构造使用)使用

本文详细介绍了Java中获取Class对象的三种方式:通过类名、对象实例和forName方法。接着展示了如何通过反射调用无参构造、有参构造以及设置私有属性和方法。此外,还对比了传统与反射创建对象并调用方法的区别。
摘要由CSDN通过智能技术生成

三种方式获取class类的对象

@Test
    public void Test01() throws ClassNotFoundException {
       //方式一:通过类名创建class对象(字节码文件)
       Class c1 = Emps.class;
       //方式二:通过对象名创建
       Class c2 = new Emps().getClass();
       //方式三:通过forName(实体类包名)
       Class c3 = Class.forName("com.frr.pojo.Emps");
   }
 //class对象c,调用实体类的无参构造(通用的方式)
   @Test
   //异常类型为非法的权限异常,实例化异常(不可为接口实现类)
    public void test02() throws IllegalAccessException, InstantiationException {
       //获取class文件
       Class<Emps> c = Emps.class;
       //使用newInstance构造一个对象
       Emps emps = c.newInstance();//本质调用了无参构造
      Emps emps1=new Emps();
   }
   @Test
   //调用实体类的有参构造
   public void test03() throws Exception{
      Class<Emps> c = Emps.class;
      //通过构造器创建对象,调用有参构造
     Constructor<Emps> con= c.getDeclaredConstructor(String.class,String.class,String.class);
      Emps emps = con.newInstance("a001", "姜姜", "男");
      System.out.println(emps);
   }
   @Test
   //Class对象c 给实体类的属性赋值
   //通过反射操作属性
    public void test4() throws NoSuchFieldException, IllegalAccessException, InstantiationException {
       Class<Emps> c = Emps.class;
       Emps emps = c.newInstance();
       //f是salary的托管类
       Field f = c.getDeclaredField("salary");
       //不能直接操作私有属性,我们需要关闭程序的安全检测
       //属性或者方法的setAccessible(true)
       f.setAccessible(true);//关掉(默认为false)
       f.set(emps,10000.0);

       System.out.println(emps);
   }

   //通过反射调用普通方法
    @Test
    public void test5() throws Exception {
       //传统的方式
        Emps e = new Emps();
        e.setSalary(12000.0);
        System.out.println(e);

        //反射的方法
        Class<Emps> c = Emps.class;
        Emps emps = c.newInstance();

        //通过反射获取一个方法
        Method m = c.getDeclaredMethod("setSalary",Double.class);
        //invoke:激活的意思
        //使用:(对象,“方法的值”)
        m.invoke(emps,13000.0);
        System.out.println(emps);
    }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值