java 反射获取修饰符_java之反射和BeanUtils类
反射和BeanUtils类
1. 类的初始化:类什么什么情况下会加载到内存中
只要类加载到内存中,那么类加载器就会为这个类创建一个class文件对象
2. javaBean:数据库中的表和java中的类对应关系
javaBean中包含的内容:
1> 私有的成员变量
2> 公共的get/set方法
3> 空参数构造方法(默认)
4> toString方法
5> 实现序列化接口
3. 获取Class文件的三种方式:
1> 使用Object类中的方法
Class> getClass() 返回此 Object 的运行时类。
2> 可以使用类的class属性
任意一种数据类型(基本类型4类8种,引用类型(类,接口,数组))
java都会为这种数据类型赋予一个class属性
3> 可以使用Class类的静态方法获取
static Class> forName(String className) 返回与带有给定字符串名的类或接口相关联的 Class 对象。
方法的参数:
String className:全类名(包名+类名)
4. 使用反射技术获取类中的构造方法,并实例化这个构造方法(创建对象)
实现步骤:
1> 获取Person类的class文件对象
2> 使用class文件对象中的方法getConstructor获取构造方法Constructor
3> 使用Constructor类中的newInstrance方法实例化Person对象
使用前提:
1> 类中必须有空参数构造方法
2> 空参数构造方法的修饰符不能是private,建议使用public
构造方法
public Person()
public Person(String name, int age, String sex)
private Person(String name, int age)
1> Constructor>[] getConstructors() 获取的是所有公共构造方法
Constructor>[] getDeclaredConstructors() 获取类声明(定义)的所有构造方法
Constructor getConstructor(Class>... parameterTypes) 获取指定公共构造方法。
Constructor getDeclaredConstructor(Class>... parameterTypes) 获取指定构造方法。包含私有的
参数:
... 可变参数,可以写,可以不写,可以写多个(0,1,多个)
Class>... parameterTypes:构造方法参数的Class文件对象
2> T newInstance(Object... initargs)
使用此 Constructor 对象表示的构造方法来创建该构造方法的声明类的新实例,并用指定的初始化参数初始化该实例。
参数:
Object... initargs:调用构造方法,实际传递的参数
返回值:
T:返回的是Object对象,这个Object对象就是Person对象(多态)
3> Method[] getMethods() 获取的类和父类中所有的公共成员方法
Method[] getDeclaredMethods() 公共、保护、默认(包)访问和私有方法,但不包括继承的方法。
4> Method getMethod(String name, Class>... parameterTypes) 获取指定公共成员方法。
Method getDeclaredMethod(String name, Class>... parameterTypes) 获取指定已声明方法。包含私有的
方法的参数:
String name:方法的名称
Class>... parameterTypes:方法参数的class文件对象,String.class,int.class
5> 使用Method类中的方法invoke执行获取到的方法
java.lang.reflect.Method
Object invoke(Object obj, Object... args)
对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。
参数:
Object obj:对象,方法的执行必须有对象支持,要你执行的方法属于哪个对象,就传递哪个对象
传递Person,可以使用反射快速创建对象方式获取
Object... args:调用方法传递的实际使用的参数(值)
返回值:
Object:如果方法有返回值,则返回对应的值,值由各种数据类型,所以使用Object类型接收
如果方法的返回值类型是void,没有返回值,则Object的值是null
6> private void method()
私有方法不能直接使用,需要取消java的访问权限检查
java.lang.reflect.Method extends java.lang.reflect.AccessibleObject
privateMethod.setAccessible(true);//暴力反射
私有构造方法不能创建对象使用,有权限检查,会抛出IllegalAccessException:非法的权限访问异常
可以使用Constructor的父类AccessibleObject中方法设置方法的访问权限
java.lang.reflect.AccessibleObject
void setAccessible(boolean flag) 将此对象的 accessible 标志设置为指示的布尔值。
值为 true 则指示反射的对象在使用时应该取消 Java 语言访问检查。
值为 false 则指示反射的对象应该实施 Java 语言访问检查。
暴力反射不推荐,破坏了类的封装性
* 反射综合案例:
通过反射技术,获取JavaBean的对象,给JavaBean的成员变量注入(赋)值
* 实现步骤:
1> 创建一个properties配置文件存储成员变量的名字和值
2> 使用Properties集合+IO流,读取配置文件,把健和值保存到Properties集合中
3> 使用反射技术获取javabean的class文件对象
4> 使用反射技术快速创建javabean对象
5> 遍历存储键值对的Properties集合,获取每一对键值
6> 使用获取到的健,拼接setXXX方法
7> 使用反射技术根据拼接的setXXX方法,获取方法的Method对象
8> 使用反射技术调用Method对象中的方法invoke给成员赋值(value)
5. 使用Apache提供的工具类BeanUtils,给成员变量赋值,获取成员变量的值
注意:
BeanUtils可以操作的数据类型有:基本数据类型(4类8种),基本类型的包装类,String类型;以上三种类型的数组形式
BeanUtils赋值的时候,可以把字符串类型的基本类型的值,转换为基本类型给成员变量赋值 相当于 Integer.parseInt("100");
综合案例:
读取XML中的配置文件信息,使用反射技术创建JavaBean对象,使用BeanUtils将XML中的数据保存到JavaBean类的属性中
实现步骤:
1> 定义两个javabean类,Person,Student
2> 定义一个xml文件,存储javabean的全类名和属性名属性值(属性--变量)
3> 使用dom4j解析xml文档,获取javabean的全类名和属性名属性值
4> 使用反射技术,通过获取的全类名,创建javabean对象
5> 使用BeanUtils工具类中的的方法setProperty给成员变赋值
java 反射获取修饰符_java之反射和BeanUtils类相关推荐
- java中访问修饰符_Java中的非访问修饰符是什么?
java中访问修饰符 Java非访问修饰符 (Java non access modifiers) We have 7 non-access modifiers in Java. The name o ...
- java中访问修饰符_Java中的访问修饰符介绍
java中访问修饰符 什么是访问修饰符? (What are Access Modifiers?) Have you ever wanted to define how people would ac ...
- java 属性访问修饰符_Java中的访问修饰符(二十七)
访问(控制)修饰符:可以修饰属性和方法的访问范围 (在实际生活中,如果要获取某件物品,与其直接穿过堡垒的墙壁,从而导致墙壁毁灭和破坏,不如通过门口的警卫请求进入堡垒的许可.一般而言,这对对象同样适用: ...
- java中类定义修饰符_Java 中类和方法修饰符
Java 中类和方法修饰符 类的修饰 访问修饰符 修饰符 class 类名 extends 父类名称 implements 接口名称(notes: 访问修饰符符与修饰符的位置可以互换) 访问修饰符 名 ...
- java四种修饰符_java中的四种修饰符
在编程过程中,经常会遇到四种修饰符来控制访问权限.之前对这个知识点没有研究过,一直是一知半解,每次遇到问题都模棱两可,不能给出一个确切的答案.近几天系统的看了看,也有了自己的一点心得体会. 正文: 先 ...
- java中类的修饰符_Java中的类修饰符
之前每次写小测试程序的时候,总是把一个类放在一个Java文件中,按理说这样比较规范,可主要原因是我是在不知道怎么在一个文件里放多个类,可见java基础有多差了...只要把类的属性改成默认的就可以了,也 ...
- java中的权限修饰符_Java的权限修饰符的区别和用法总结
类中的数据成员和成员函数据具有的访问权限包括:public.private.protect.friendly(包访问权限). 1.public:public表明该数据成员.成员函数是对所有用户开放的, ...
- java default修饰符_Java修饰符看这一篇就够了
java中的修饰符分为类修饰符,字段修饰符,方法修饰符.根据功能的不同,主要分为以下几种: *权限访问修饰符(可以用来修饰类.方法和字段) public:对任何人都是可用的. protect:继承的类 ...
- 什么是java修饰符_java修饰符是什么?
java修饰符用来定义类.方法或者变量,通常放在语句的最前端.(推荐:java视频教程) Java语言提供了很多修饰符,主要分为以下两类: 访问修饰符 非访问修饰符 Java语言定义了public.p ...
最新文章
- CDN和Web Cache领域相关的经典书籍推荐
- css字体更小 css比12px更小的方法
- C/C++笔记(04):GB2312字符串和UTF-8之间的转换
- LeetCode 100相同的树101对称二叉树
- PMCAFF专访:搜狗effevo,这一次我们想连接“人”
- 如何限制某些用户发送Internet邮件
- ERROR: ORA-01033: ORACLE initialization or shutdown in progress Oracle无法启动的解决
- ML.NET生成器带来了许多错误修复和增强功能以及新功能
- 35岁成MIT终身教授!北大数学“黄金一代”再获大奖
- 关于SQL Server 2005 的自动远程数据库备份
- 剑指offer 面试题49. 丑数
- 自学python要多久-自学Python要学会需要多久?老男孩Python培训班
- 深入了解一下PYTHON中关于SOCKETSERVER的模块-A
- NHibernate ModelBinder for mvc3
- php字游戏源码,php文字游戏寻仙纪.zip
- 100个Python实战项目(二)使用 Tkinter 的 日历 GUI 应用程序
- VScode连接Anaconda
- 如何在电脑上录制qq语音
- 联想怎么启动windows无线服务器,Windows7系统下开启无线的多种方法
- Matplotlib——条形图_3、分组条形图_4、堆叠条形图
热门文章
- 解决“Automation 服务器不能创建对象”的问题!
- C++的掐拷贝、深拷贝【面向对象程序设计细节】
- 【1】刷了1000道二级C语言的题,这些题竟然还是易错题!!(附C语言完整知识点)
- nginx反向代理模块配置详解_Nginx服务器的反向代理proxy_pass配置方法讲解
- 分区未分配linux,在Linux下对未分配剩余空间分区
- 微课--Python正则表达式语法与应用(83分钟)
- Python+tkinter实现验证码输入和切换
- Python+django建站入门篇:Hello world
- C语言数组及相关函数
- oracle用户身份认证,oracle用户身份认证方式