java中的反射技术
反射
反射的引入
- 编译时知道类或者对象的具体信息,此时直接对类和对象操作即可,无需反射(reflection)
- 如果编译不知道类或对象的具体信息,此时如何做? 使用反射来实现。比如类的名称放在XML文件中,属性和属性值放在XML文件中,需要在运行时读取XML文件。动态获取类的信息。
反射的应用场合
在编译时根本无法知道该对象或类可能属于哪些类,程序只依靠运行时信息来发现该对象和类的真实信息
类如:log4j、Servlet、ssm
反射的作用
- 动态创建对象
- 动态调用方法
- 动态操作属性
- 动态操作泛型和注解
反射机制的实现
- Class类:代表一个类
- Constructor类:代表路的构造方法
- Field类:代表类的成员属性
- Method类:代表类的成员方法(实例方法和类方法)
Class类的使用
获得Class类的对象
//获取class类对象的三种方式//方式一:通过 类名.class获取Class<String> clazz = String.class;Class<Student> clazz2 = Student.class;System.out.println(clazz);System.out.println(clazz2);//方式二:通过Class的静态方法forName获取Class<String> clazz3 = (Class<String>) Class.forName("java.lang.String");Class<Student> clazz4 = (Class<Student>) Class.forName("com.day04.Student");System.out.println(clazz3);System.out.println(clazz4);//方式三: 通过某个类的对象获得该类的Class类的对象String str = "111111";Class<String> clazz5 = (Class<String>) str.getClass();Student stu = new Student();Class<Student> clazz6 = (Class<Student>) stu.getClass();System.out.println(clazz5);System.out.println(clazz6);
获得clazz对象表示的class文件中的构造方法
try {//创建Student类的Class对象Class<Student> clazz = Student.class; //获得无参构造方法Constructor<Student> constructor = clazz.getDeclaredConstructor(null);//通过无参构造方法获得Student对象Student student = constructor.newInstance(null);System.out.println(student);//获得带参的构造方法Constructor<Student> constructor2 = clazz.getDeclaredConstructor(Integer.class,String.class,char.class,Integer.class,String.class);//通过带参构造方法获得Student对象Student student2 = constructor2.newInstance(123,"张三",'男',23,"北京");System.out.println(student2);}catch(Exception e) {e.printStackTrace();}
获得clazz对象中clazz文件中的实例方法
try {//获得Student类的Class对象Class<Student> clazz = Student.class;//创建对象//获得无参构造方法 来获得对象Student student = clazz.getDeclaredConstructor(null).newInstance(null);//获得指定方法名的方法Method setName = clazz.getDeclaredMethod("setName", String.class);//调用Student类中的setName方法setName.invoke(student, "007");//获得指定方法名的方法Method getName = clazz.getDeclaredMethod("getName", null);//调用方法,获取到值Object object = getName.invoke(student, null);System.out.println(object);}catch(Exception e) {e.printStackTrace();}
获得clazz对象中clazz文件中的属性
try {//创建Student类的Class对象Class<Student> clazz = Student.class;//通过获得无参构造方法创建对象Student student = clazz.getDeclaredConstructor(null).newInstance(null);//获得指定名字属性Field name = clazz.getDeclaredField("name");//获得属性名String name2 = name.getName();System.out.println(name2);//获得属性类型Class<?> type = name.getType();System.out.println(type);//获得属性访问权限int modifiers = name.getModifiers();System.out.println(modifiers);//修改属性访问权限,默认为falsename.setAccessible(true);//给属性赋值name.set(student, "林中鸟");//获得属性值Object object = name.get(student);System.out.println(object);}catch(Exception e) {e.printStackTrace();}
三个类中的方法比较
加Declared | 不加Declared | |
---|---|---|
Constructor | 所有的构造方法 | 公共的构造方法 |
Method | 所有本类的方法 | 所有的公共方法,包括继承的 |
Field | 所有本类的属性 | 所有的公共成员属性,包括继承的 |
ResultSetMateData类
对象封装了查询结果集的虚拟表的结构,可以知道表中列数,表中的数据,表中的列对应的数据库中的类型,表中对应的java中的类型
//1. 通过结果集获取虚拟表对象ResultSetMetaData rsmd = rs.getMetaData();//2.获得虚拟表的列数int count = rsmd.getColumnCount();System.out.println("虚拟表中的列的个数为:" + count);for(int x = 1; x <= count;x ++) {//3.获得某一列的值Object value = rs.getObject(x);//4.获得虚拟表中列的名字String columnName = rsmd.getColumnName(x);System.out.println("虚拟表中列的名字:" + columnName);//5.获得虚拟表中列的对应数据库中的数据类型int type = rsmd.getColumnType(x);String columnTypeName = rsmd.getColumnTypeName(x);System.out.println(x + "\t" + columnTypeName);//6.获得虚拟表中列的类型对应的java类型String columnClassName = rsmd.getColumnClassName(x);System.out.println("对应的java类型:" + columnClassName);}
java中的反射技术相关推荐
- 深入理解Java中的反射技术
Java中的反射机制是指在运行状态中,对于任意一个类都能够知道这个类所有的属性和方法:并且对于任意一个对象,都能够调用它的任意一个方法:这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射 ...
- java中的反射机制是什么
给大家介绍一下java中的反射机制,java中反射机制更体现出了java的灵活性.多态.和类之间的耦合性. 1:反射是一种间接操作目标对象的机制,只要给定类的名字,就可以通过反设机制获取所有的类信息. ...
- 浅说Java中的反射机制(一)
在学习传智播客李勇老师的JDBC系列时,会出现反射的概念,由于又是第一次见,不免感到陌生.所以再次在博客园找到一篇文章,先记录如下: 引用自java中的反射机制,作者bingoideas.(()为我手 ...
- Java 中使用反射来创建对象、调用方法
Java 中使用反射来创建对象.调用方法 反射创建对象 反射调用方法 反射调用私有方法 反射调用可变参私有方法 反射调用的方法自身可以抛出异常的情形 假设已有下面的类: import java.l ...
- java代码安全检测机制_全面解析:java中的反射机制,内含代码验证解析
什么是反射? 在运行状态中,对于任意一个类,都能够获取到这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性(包括私有的方法和属性),这种动态获取的信息以及动态调用对象的方法的功 ...
- formdata 接受参数中带有class 对象_浅析JAVA中的反射机制及对Servlet的优化
今天来聊聊java中的反射机制,工作以后发现很多东西动不动就要使用反射或者动态代理,如果不能很好的理解反射,那么对于动态代理等一些重要的设计模式就会有种不够通透的感觉. 所谓的反射,就是在运行状态中, ...
- java中ajax是什么意思,java中使用Ajax技术
ajax技术是使页面能局部刷新的一种技术,全称应该是asynchronous JavaScript and xml从几个单词就知道它的请求响应的处理是异步的,而且使用的是JavaScript和xml技 ...
- Java中的反射和枚举
假设现在上面的数据是以二次探测的方式来进行存放的,现在让你求: 现在找1:直接就能找到----->次数是1 现在找4:直接就可以找到---->次数是1 现在找14:先得到4的下标,发现不是 ...
- Java中的反射机制详讲
Java中的反射机制详讲 1.反射机制_介绍_Class对象获取 2.反射机制_动态操作_构造器_方法_属性 3.动态编译_DanamicCompile_反射调用main方法问题 好文推荐:排序.查找 ...
- Java中的反射如何理解——精简
目录 引言 反射概念 反射获取类对象 反射获取构造器对象 获取构造器对象并使用 反射获取成员变量对象 反射获取方法对象 反射获取成员方法并使用 引言 经过前面的学习,相信大家已经能够对网络编程有了一定 ...
最新文章
- 从数据库中存取二进制数据并显示
- 重庆工商大学c语言实验一答案,重庆工商大学嵌入式实验考试题目答案 - 副本.doc...
- java 滚动加载,滚动加载,可视区域判断
- Shell 脚本编程之基础
- oracle客户端和ssh区别,oracle 使用SSH 转发功能
- 试述hadoop生态系统以及每个部分的具体功能_Hadoop在大数据分析中的意义和作用...
- mvc html.dropdownlist,ASP.NET MVC4中使用Html.DropDownListFor的方法示例
- 第四章 ASP.NET MVC HTML.ActionLink输出超链接的具体用法
- 分区表的误区:性能提升
- 少儿C++编程如何入门
- ResourceBundle 中文乱码
- python导出pdf_python生成pdf
- 简单多人聊天室——java网络编程
- Emacs 配置 latex
- FPGA Verilog语言常用语法
- 利用Html与css从零开始制作基础静态网页(web课设)
- Golang:加密解密算法
- linux中常见中英文单词对照表
- CADENCE 拼板经验
- hardware 中的几个地址问题
热门文章
- 《高效能人士的七个习惯》阅读笔记
- 3DMark03 测试显卡
- 基于PHP+Html+MySQL的网上手机商城系统
- 实验一-波士顿房价预测
- mysql怎么做纵表,本文实例讲述了MySQL横纵表相互转化操作实现方法。分享给大家供大家参考,具体如下:先创建一个成绩表(纵表)create table user_scor...
- docker ctrl p 失灵
- Pytorch中的forward的理解
- 【编译原理】语义分析S属性定义的自下而上计算
- HTML CSS JS 网页设计作业「我的家乡」汉口5页 带留言表单
- c语言第十章函数课后作业,c语言函数练习题附答案.doc