Class对象封装了一个java类定义的成员变量、成员方法、构造方法、包名、类名等。

2.反射怎么用

1).获得java类的各个组成部分,首先需要获得代表java类的Class对象

获得Class对象有以下三种方式:

Class.forname(className)            用于做类加载

obj.getClass()                              用于获得对象的类型

类名.class                                    用于获得指定的类型,传参用

2).反射类的构造方法,获得实例

Class clazz = 类名.class;

Constuctor con = clazz.getConstructor(new Class[]{paramClazz1,paramClazz2,.....});

con.newInstance(params....);

3).反射类的成员方法

Method m = clazz.getMethod(methodName,new Class[]{paramClazz1,paramClazz2,.....});

m.invoke();

4).反射类的属性

Field field = clazz.getField(fieldName);

field.setAccessible(true);//设置为可访问

filed.setObject(value);

//设置值

Object value = field.get(clazz);

//获得值

Object staticValue = filed.get(Class);     //获得静态值

二:内省

1.什么是内省

通过反射的方式操作JavaBean的属性,jdk提供了PropertyDescription类来操作访问JavaBean的属性,Beantils工具基于此来实现。

2.内省怎么用

1).操作一个属性

Object obj = new Object();

PropertyDescriptor pd = new PropertyDescriptor(propertyName,Class);

//声明属性描述对象,一次只可描述一个属性

Method m = pd.getWriterMethod();//获取setter方法

m.invoke(obj,value);

Method m = pd.getReaderMethod();//获取getter方法

Object value = m.invoke(obj);

2).操作多个属性

BeanInfo bi = Instospector.getBeanInfo(beanClass);//获取Bean描述对象

PropertyDescriptor[] pds = bi.getPropertyDescriptors();//获取属性描述对象数组

拿到属性描述对象数组之后再循环数组,剩余的操作就跟"操作一个属性"相同了。

三:两者区别

反射可以操作各种不同的java类,那么内省只是通过反射来操作JavaBean的。

四:应用

框架就是将开发中大量重复的代码其中起来写个通用的程序,框架是给将来的程序使用的,需要现在的类调用将来的,所以框架要运行是依赖于将来的类实现的。

我们只需要针对接口进行调用,将来的类实现接口,那么方法就固定了。但是将来写的类的类名我们无从得知,这时就需要调用者通过配置文件告诉框架具体的类名。

将java的反射以及内省机制应用到程序设计中可以大大提高程序的智能化和可扩展性。有很多项目都是使用这两种技术实现其核心功能的。例如BeanUtils,Struts等。

java 内省机制_Java反射与内省机制总结相关推荐

  1. java 内省机制_Java反射及 IoC原理、内省机制

    JAVA反射及IoC原理.JAVA内省 1. 反射反射是框架设计的灵魂,使用前提:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码文件). 1.1 反射概述主要指程序可 ...

  2. java 内省_Java反射与内省

    反射 用一句比较白的话来概括,反射就是让你可以通过名称来得到对象(类,属性,方法)的技术. 例如我们可以通过类名来生成一个类的实例:知道了方法名,就可以调用这个方法:知道了属性名就可以访问这个属性的值 ...

  3. Java的反射作用_java反射机制的作用与优点

    java的反射机制就是增加程序的灵活性,避免将程序写死到代码里, 例如: 实例化一个 person()对象, 不使用反射, new person(); 如果想变成 实例化 其他类, 那么必须修改源代码 ...

  4. java 执行机制_Java类的执行机制

    在完成将class文件信息加载到JVM并产生Class对象后,就可执行Class对象的静态方法或实例化对象进行调用了.在源码编译阶段将源码编译为JVM字节码,JVM字节码是一种中间代码的方式,要由JV ...

  5. java see 方法_Java 反射常用方法

    类名用途 Class类 代表类的实体,在运行的Java应用程序中表示类和接口 Field类 代表类的成员变量(成员变量也称为类的属性) Method类 代表类的方法 Constructor类 代表类的 ...

  6. 哪些类用来实现java反射机制_JAVA反射机制

    运行时类型识别(Run-time Type Identification, RTTI)主要有两种方式,一种是我们在编译时和运行时已经知道了所有的类型,另外一种是功能强大的"反射"机 ...

  7. java 反射机制_Java反射机制原理探究

    反射是Java中的一个重要的特性,使用反射可以在运行时动态生成对象.获取对象属性以及调用对象方法.与编译期的静态行为相对,所有的静态型操作都在编译期完成,而反射的所有行为基本都是在运行时进行的,这是一 ...

  8. java反射机制_java反射机制的讲解

    一 , 什么是java反射机制? JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象 ...

  9. java 求正割_Java 反射机制详解

    动态语言 动态语言,是指程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除等在结构上的变化.比如众所周知的ECMAScript(JavaScript)便是一个动态语言.除此之外如Ru ...

最新文章

  1. numpy 100题
  2. python字典的特点是什么_Python中dict的特点
  3. C语言位运算,醍醐灌顶式教学
  4. Table definition on master and slave does not match
  5. 神经网络中的最小二乘_深度神经网络:噪声中解读出科学
  6. mongodb 如何删除 字段值为 json对象中的某个字段值
  7. [Leetcode][第100题][JAVA][相同的树][二叉树][深度遍历][递归]
  8. 股票卖出以后可以立即把钱转出吗?
  9. android zlib 和zip,gzip zip 和zlib
  10. SuiteCRM添加自定义字段
  11. Linux 用户管理
  12. Redis的读写分离
  13. 力扣:714.买卖股票的最佳时机含手续费
  14. eNSP配置路由器IP地址
  15. IK分词器结合ES使用
  16. 树莓派3B安装64位操作系统(树莓派无需连接显示器键盘鼠标)
  17. Chrome打开网页不慢,但是卡顿,滚动滚轮卡顿,打开b站等特定网址卡顿问题解决
  18. windows开启远程连接
  19. MySQL远程连接报错:ERROR 2002 (HY000): Can‘t connect to server on ‘192.168.172.130‘ (115)
  20. 学习LDPC码的一些入门笔记

热门文章

  1. Linux安装BerkleyDB
  2. pythonapp自动化_Android App持续集成性能测试:使用Python实现UI自动化
  3. Linux Shell基础 - Shell 脚本的执行方式
  4. mysql同一台服务器上不同数据库中个别表内容同步
  5. jquery 性能优化与实践
  6. Mac下安装MySQL
  7. 第二次作业——小学生四则运算
  8. 目标描述(基于边界的描述)
  9. 如何使用Windows OVERLAPPED优化你的应用
  10. 用react和electron实现文件树组件(上)