【Java基础总结】反射
1. 什么是反射
Class、Method、Field、Constructor,它们是反射对象。它们是类、方法、成员变量、构造器,在内存中的形式。
也就是万物皆对象!类是类型、方法是类型、成员变量是类型、构造器也是类型。
可以把Class当作类的元神;Method是方法的元神;Field是成员的元神;Constructor是构造器的元神。
得到了元神就可以来操作宿主。
2. 获取Class类的对象
Class表示一个类型,即描述类的类型。
* 类名.class:Class c1 = Object.class;
* 对象.getClass():Class c2 = obj.getClass();
* Class.forName("类全名"):Class c3 = Class.forName("java.lang.String");
Class的用途:
* getName():获取类名
* Class getSupperClass():获取父类类型,即获取父类的元神
* Class[] getInterces():获取所有实现的接口的类型,即获取所有实现接口的元神。
* T newInstance():创建该类的实例(通过默认构造器创建,如果该类型没有默认构造器,那么抛出异常)。
3. 通过Class获取Constructor类对象
* Constructor[] getConstructors():获取本类中所有public构造器
* Constructor getConstructor(Class... parameterTypes):获取指定参数类型的公有构造器对象
* Constructor[] getDeclaredConstructors():获取本类中所有构造器,包含所有访问级别
* Constructor getDeclaredConstructor(Class... parameterTypes):获取指定参数类型的构造器,包含所有访问级别
Construtor的用途:
* T newInstance(Object... params):调用构造器
4. 通过Class获取Method类对象
* Method[] getMethods():获取本类和父类中所有public方法
* Method getMethod(String name, Class... parameterTypes):获取指定名称及参数类型的公有方法,包括父类中的公有方法
* Method[] getDeclaredMethods():获取本类所有方法,包含所有访问级别;
* Mehtod getDeclaredMethod(String name, Class... parameterTypes):获取指定名称及参数类型的,包括所有访问级别,但不包含父类中的方法。
Method的用途:
* Object invoke(Object obj, Object... params):调用方法,其中obj是当前对象,parmas是参数。如果当前方法是static方法,那么在调用invoke方法时,第一个参数为null。
5. 通过Class获取Field类对象
* Field[] getFields():获取本类和父类中所有public成员变量
* Field getField(String name):获取本类或父类中的指定名称的public成员变量
* Field[] getDeclaredFields():获取本类中所有访问级别的成员变量,不包括父类中的。
* Field getDeclaredField(String name):获取本类中指定名称的成员变量,可以是所有访问级别,不包括父类中的。
Field的用途:
* void set(Object obj, Object value):给出指定对象的成员变量赋值,obj为当前对象,value为值
* Object get(Object obj):获取指定对象的成员变量值,obj为当前对象。
反射的特例:内省
内省用来操作javabean的属性,JavaBean是一种特殊的类,主要用来传递数据。属性是由getter和setter方法来决定的,即使没有字段,只要有getter和setter方法就是属性。
【Java基础总结】反射的更多相关文章
- 黑马程序员:Java基础总结----反射
黑马程序员:Java基础总结 反射 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 反射 反射的基石:Class类 Class类代表Java类,它的各个实例对象又分别 ...
- Java基础之一反射
反射是框架设计的灵魂 (使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码)) 一.反射的概述 JAVA反射机制是在运行状态中,对于任意一个类,都能够 ...
- Java基础之—反射
反射是框架设计的灵魂 (使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码)) 一.反射的概述 JAVA反射机制是在运行状态中,对于任意一个类,都能够 ...
- JAVA基础知识|反射
一.理解反射 1.1.基础概念 反射:在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为ja ...
- java基础之反射机制
一.概念 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为jav ...
- java基础(十一 )-----反射——Java高级开发必须懂的
本文我们通过一个实际的例子来演示反射在编程中的应用,可能之前大家对反射的学习,仅仅是停留在概念层面,不知道反射究竟应用在哪,所以是一头雾水.相信通过这篇教程,会让你对反射有一个更深层次的认知. 概念 ...
- java基础之反射---重要
java反射: 反射是框架设计的灵魂 (使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码)): 1:获取Class字节码文件对象的三种方式: /** ...
- 【Java基础】反射和注解
前言 在Java中,反射机制和注解机制一直是一个很重要的概念,那么他们其中的原理是怎么样呢,我们不仅仅需要会使用,更要知其然而之所以然. 目录 反射机制 反射如何使用 注解定义 注解机制原理 注解如何 ...
- java基础篇---反射机制
一.JAVA是动态语言吗? 一般而言,说到动态言,都是指在程序运行时允许改变程序结构或者变量类型,从这个观点看,JAVA和C++一样,都不是动态语言. 但JAVA它却有着一个非常突出的动态相关机制:反 ...
- Java 基础总结--反射的基本操作
一.反射的概念 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为 ...
随机推荐
- asp.net MVC 模板定制
模板存放位置:C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\ItemTemplates\CSharp\Web\MVC ...
- python中break和continue的区别
python中break和continue的区别 break和continue 1.break 意思为结束循环 例: i = 0 while i<10: i+=1 if ...
- 2019-2-28-C#-16-进制字符串转-int-
title author date CreateTime categories C# 16 进制字符串转 int lindexi 2019-02-28 11:51:36 +0800 2018-04-2 ...
- 【u224】传送机
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 刷完牙洗完脸,黄黄同学就要上课去了.可是黄黄同学每次去上课时总喜欢把校园里面的每条路都走一遍,当然,黄 ...
- Argus--[优先队列]
Description A data stream is a real-time, continuous, ordered sequence of items. Some examples inclu ...
- P1024 硬币问题
题目描述 假设现在有面值为1, 5, 10, 50, 100, 500的硬币各无限枚, 如果用这些硬币来支付A元, 最少需要多少枚硬币? 输入格式 一个整数A(0<=A<=1e9), 表示 ...
- 51nod 1281山峰和旗子
1281 山峰和旗子 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 用一个长度为N的整数数组A,描述山峰和山谷的高度.山峰需要满足 ...
- Linux内核 结构 struct urb
struct urb 结构中和 USB 设备驱动有关的成员是: struct usb_device *dev 指向这个 urb 要发送到的 struct usb_device 的指针. 这个变量必须被 ...
- 关于electron中入口文件main.js一些重要参数(持续更新maybe)
const {app, BrowserWindow} = require('electron') const path = require('path') let mainWindow functio ...
- C++ 图片格式转化和压缩
在做人脸识别底库图片导入的时候,需要支持主流的图片的格式,如jpeg.bmp.png等格式.所以需要对图片进行格式转化.图片过大的话,还有进行缩放等.本文介绍的是利用cximage开源库,来进行对图片 ...