您的位置:首页 > 编程语言 > Java开发

java反射,反射常用方法,获取类模板,通过类模板对象创建实体对象,类中未定义有参或无参构造器的情况下创建对象,不调用方法尝试给一个类的私有属性赋值,通过反射获取一个类的父类并获取它实现的接口

2019-08-29 17:15 1731 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/undersnowyok/article/details/100141916

java反射

java反射

Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期(运行时)借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法

常用方法

获取类模板

四种方法
1.已知一个类,通过一个类的class静态属性获取,Test.class
2.通过一个类的对象获取, test.getClass();
3.通过类的全限定类名获取,Class.forName(“com.atguigu.javase.Test”);
com.atguigu.javase是包名,Test是类名
前三个可以通过Class类的引用对象来接收
4. 通过类加载器加载对象加载类
ClassLoader classloader = this.getClass().getClassLoader();
classloader对象是为了将class装进内存之中,我们可以通过加载类方法loadClass(全限定类名)来得到类模板,类加载器和类模板不是一个东西,但是有关联
但我们通过getClass()方法拿到类模板,得到的是class+空格+全限定类名

通过类模板对象创建实体对象

Class clazz = Class.forName(“全限定类名”);
Xxx xxx = clazz.newInstance();
Xxx为我们想要创建的对象

类中未定义有参或无参构造器的情况下创建对象

若未定义有参构造器,则通过无参构造器来创建对象

Constructor con = clazz.getConstructors();
con.newInstance();

若未定义无参构造器,则通过有参构造器来创建对象

Constructor con = clazz.getConstructors(形参数据类型列表);
con.newInstance(实参列表);

不调用方法尝试给一个类的私有属性赋值

class Teacher{
private int id;
private String name;
}

看这个类中有两个私有属性,如果我们想要直接赋值是不可能的,但是调用类中的getset方法就可以,然而我们没有写,但是我们可以通过反射来做到

Class clazz = Class.forName("com.atguigu.javase.reflect.Teacher");
Object object = clazz.newInstance();
//首先我们拿到类模板
//clazz.getField("id");这个方法只能拿到共有属性的值,垃圾方法,我们换一个
Field id = clazz.getDeclaredFields("id");
Field name = clazz.getDeclaredFields("name");//本类中的属性都可以拿到
//只有在这个类里我们就都可以拿到这两个属性,但是因为是私有属性,我们还需要一个方法
id.setAccessible(true);
name.setAccessible(true);
//突破封装:设置需要操作的属性可以被外部访问
id.set(object,123);
name.set(object,"姓名");
//在设置属性的时候要传入两个值,后一个值使我们要传入的数据,前一个是我们引用的对象
//就好像	object.set(123);	object.set("姓名");
//反射中顺序是有所区别的

通过反射获取一个类的父类,并获取它实现的接口

//假设一个类的类模板已经拿到,是clazz
Class clazz2 = clazz.getSuperclass();
//获取到了父类的类模板
Class[] in = clazz.getInterfaces();
//获取它实现的接口
//getDeclaredConstructors();获取全部的构造器
//getFields();只能获取公共的属性
//getDeclaredFields();获取声明所有的属性
//getMethods();获取全部方法(可用的方法)
//getDeclaredMethods();获取声明的方法(已经写入的方法)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐