java基础 -反射

1.概述

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

2.获取Class对象

class可以理解为class对象,不是实例对象。也可以理解为字节码对象,代表class文件。

//1.通过数据类型的静态属性class
Class cls = Person.class;

//2.通过Class类的静态方法forName()
Class cls = Class.forName("Person");

3.构造方法Constructor

构造方法就是为了创建对象实例。有两类获取构造对象的方法

 
//获取公共的   无参构造
Constructor constructor = cls.getConstructor();
//获取公共的   有参构造
Constructor constructor = cls.getConstructor(new Class[]{String.class,String.class});

//获取指定构造的构造对象,也就是公共的、私有的,默认的,   无参构造
Constructor constructor = cls.getDeclaredConstructor();
//返回有参指定构造
Constructor constructor = cls.getDeclaredConstructor(new Class[]{String.class,String.class});

4.创建实例对象

 //根据无参构造创建对象
 Object o = constructor.newInstance();
 //根据有参构造创建对象
 Object o = constructor.newInstance(new Object[]{"11", "lisi"});

5.获取实例对象的函数

 //获取无参无返回值的方法
 Method method = class.getMethod("show");
 //调用show方法:
 method.invoke();

 //获取有参有返回值的方法
 Method mth = cls.getMethod("show", new Class[]{int.class,int.class});

 //调用cal方法:
 Object result = mth.invoke(obj,new Object[]{2,6});
 int sum = (int) result;

6.获取属性

 //1.获取非私有成员变量
 Field field = cls.getField("color");

 //给非私有成员变量赋值:
 field.set(obj, "yellow");
 //获取非私有成员变量的值:
 Object color = field.get(obj);
 System.out.println("狗的颜色是:"+color);




//2.获取私有成员变量
Field field = cls.getDeclaredField("name");

//给私有成员变量赋值:
field.setAccessible(true);
field.set(obj, "大黄");

//获取私有成员变量的值:
field.setAccessible(true);
Object name = field.get(obj);
System.out.println("狗的名字是:" + name);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值