ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

反射笔记

2020-09-24 20:31:22  阅读:225  来源: 互联网

标签:反射 obj 笔记 Class 获取 clazz 方法 class


反射

reflection library

reflective:能分析类的能力的程序

参考:https://www.zhihu.com/question/377483107/answer/1079967402

https://www.w3cschool.cn/java/java-reflex.html

学习方法:学习一项新的技术之前,请先搞清楚为什么要学这个新的东西?

重点掌握

获取Class的几种方式

通过Class创建对象,获取构造器、成员变量、方法

通过反射API修改成员变量的值,调用方法	      

Class类的主要API

成员变量--Field

方法--Method

构造器--Constructor
一)获得Class类的方式(手工地加载某个类)

1.Object类的getClass()方法

Random r = new Random();
Class<?> rClass = r.getClass();
System.out.println(rClass);//class java.util.Random
System.out.println(rClass.getName());//java.util.Random

2.Class类中的静态方法 public static Class ForName(String className)

Class clazz = Class.forName("com.pengluo.User");//参数:完整路径的包名和类名

父类对象clazz.getSuperclass()

实现的接口clazz.getInterfaces()

3.任意类型.class

Class c1 = int.class;
Class c2 = Double[].class;
Class c3 = ArrayList.class;
二)实例一个Class类的对象
//方法一:默认构造方法
User u1 = (User) clazz.newInstance();
//set方法赋值
u1.setName("pengluo");
u1.setSex("male");


//方法二:获取全部的构造函数,选择一个构造函数创建对象
Constructor<?> cons[] = clazz.getConstructors();

user = (user) cons[0].newInstance("Rollen");

三)获取Class类的成员变量(属性)

1: 获取Class对象

2:通过Class对象获取Constructor对象

3:Object obj = Constructor.newInstance()创建对象

4:Field field = Class.getField("指定变量名")获取单个成员变量对象

5:field.get(obj) 获取obj对象的field字段的值

6:field.set(obj,"") 为obj对象的field字段赋值

Field[] Fieds = clazz.getFields();//获得类以及从超类(父类)中继承到的公共域
Field[] Fieds = clazz.getDeclaredFields();//获得类中声明的全部域,包括私有的
//遍历输出
for (int i = 0; i <Fieds.length ; i++) {
            String name = Fieds[i].getName();
            String Type = Fieds[i].getType().getName();
            System.out.println(name+":"+Type);
}

Field name = clazz.getDeclaredField("name");//获取Class类的特定的成员变量(属性)
四)获取Class类的方法
Method method[] = clazz.getMethods();//获得类以及从超类(父类)中继承到的公有方法
Method method[] = clazz.getDeclaredMethods();//获得类中声明的全部方法,包括私有的
Method method = clazz.getMethod();//获取Class类的某个指定的方法
//如果调用的是私有方法那么需要暴力访问        
method.setAccessiable(true);
ArrayList<Integer> list = new ArrayList<Integer>();
Method method10 = list.getClass().getMethod("add",Object.class);
method10.invoke(list,"Java反射机制实例。");

标签:反射,obj,笔记,Class,获取,clazz,方法,class
来源: https://www.cnblogs.com/PengLuo22/p/13726419.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有