反射

获取反射的三种方式:

  • Class.forName(全类名):将字节码文件加载进内存,返回Class对象,全类名要加上类的包名,例top.linzeliang.example.RelfectTest(多用于配置文件,将类名定义在配置文件中,先读取文件,获取文件名,然后加载类)
  • 类名.class:通过类名的属性class获取(多用于参数传递)
  • 对象.getClass():用于对象获取字节码的方式

Class对象的功能

获取 成员变量/成员变量们

  • Field[] getFields():获取所有public修饰符修饰的变量,包括从父类继承来的字段,即protected、default、private无法被获取
  • Field getField(String name):获取指定变量名称的public修饰符修饰的变量
  • Field[] getDeclaredFields():获取所有的成员变量,不考虑修饰符(只要是成员变量就可以被获取)
  • Filed getDeclaredField(String name):可以获取本类所有的字段,包括private的,但是不能获取继承来的字段。 ( 这里只能获取到private的字段,但并不能访问该private字段的,除非加上setAccessible(true))

获取 成员方法/成员方法们

  • Method[] getMethods()
  • Mathod getMethod(String name, 类<?>... parameterTypes)
  • Method[] getDeclaredMethods()
  • Method getDeclaredMethod(String name, 类<?>... parameterTypes)

获取构造方法们

  • Constructor<?>[] getConstructors()
  • Constructor<T> getConstructor(类<?>... parameterTypes)
  • Constructor<T> getDeclaredConstructor(类<?>... parameterTypes)
  • Constructor<?>[] getDeclaredConstructors()

获取全类名

  • String getName()

Field:成员变量

  • void set(Object obj, Object value):设置值
  • get(Object obj):获取值
  • setAccessible(true):忽略访问权限修饰符的安全检查,即暴力反射

Method:成员方法

  • invoke(Object obj, Object args):执行方法
  • String getName():获取方法名

Constructor:构造方法

  • newInstance(Object... initargs):创建对象
  • 如果使用空参构造器创建对象,则可以直接Class对象.newInstance()

通过框架创建对象

public class Demo {

	public static void main(String[] args) throws Exception {
//加载配置文件,配置文件路径要在src目录下
Properties pro = new Properties();
InputStream is = Demo.class.getClassLoader().getResourceAsStream("pro.properties");
pro.load(is); //获取配置文件中的数据
String className = pro.getProperty("className");
//通过全类名将该类加载进入内存
Class c = Class.forName(className);
//创建对象
Object obj = c.newInstance();
System.out.println(obj);
}
}
public class ReflectTest {
public int a = 1;
protected int b = 2;
int c = 3;
private int d = 4; public void m1() {
System.out.println("miaoa");
}
protected void m2() { }
void m3() { }
private void m4() { }
}

Java反射复习笔记的更多相关文章

  1. Java基础复习笔记系列 九 网络编程

    Java基础复习笔记系列之 网络编程 学习资料参考: 1.http://www.icoolxue.com/ 2. 1.网络编程的基础概念. TCP/IP协议:Socket编程:IP地址. 中国和美国之 ...

  2. Java基础复习笔记系列 八 多线程编程

    Java基础复习笔记系列之 多线程编程 参考地址: http://blog.csdn.net/xuweilinjijis/article/details/8878649 今天的故事,让我们从上面这个图 ...

  3. Java基础复习笔记系列 七 IO操作

    Java基础复习笔记系列之 IO操作 我们说的出入,都是站在程序的角度来说的.FileInputStream是读入数据.?????? 1.流是什么东西? 这章的理解的关键是:形象思维.一个管道插入了一 ...

  4. Java基础复习笔记系列 五 常用类

    Java基础复习笔记系列之 常用类 1.String类介绍. 首先看类所属的包:java.lang.String类. 再看它的构造方法: 2. String s1 = “hello”: String ...

  5. Java基础复习笔记系列 四 数组

    Java基础复习笔记系列之 数组 1.数组初步介绍? Java中的数组是引用类型,不可以直接分配在栈上.不同于C(在Java中,除了基础数据类型外,所有的类型都是引用类型.) Java中的数组在申明时 ...

  6. Java基础复习笔记基本排序算法

    Java基础复习笔记基本排序算法 1. 排序 排序是一个历来都是很多算法家热衷的领域,到现在还有很多数学家兼计算机专家还在研究.而排序是计算机程序开发中常用的一种操作.为何需要排序呢.我们在所有的系统 ...

  7. Java基础复习笔记系列 十三 反射机制

    主题:Java反射机制 学习资料参考网址: 1.http://www.icoolxue.com 1.Java反射机制. 各种框架中都使用到了Java的反射机制. 两个类:java.lang.Class ...

  8. java反射学习笔记

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

  9. Java反射机制--笔记

    1.认识Class类 任何一个类都是Class类的实例对象,这个实例对象有三种表示方式. /*java 反射机制*/ // 获取类的方法 UserDao userDao = new UserDao() ...

随机推荐

  1. 「面试」拿到B站的意向书

    此次B站服务端开发面试之旅可谓惊险,不过通过对大部分面试题套路的掌握,不出意外还是拿下了,下面我们来看看这些骚题是不是常见的不能再常见的了.这些面试题看了就能面上?当然不是,只是通过这些题让自己知道所 ...

  2. OpenCV计算机视觉学习(2)——图像算术运算 & 掩膜mask操作(数值计算,图像融合,边界填充)

    在OpenCV中我们经常会遇到一个名字:Mask(掩膜).很多函数都使用到它,那么这个Mask到底是什么呢,下面我们从图像基本运算开始,一步一步学习掩膜. 1,图像算术运算 图像的算术运算有很多种,比 ...

  3. Communicating to 2 SPI Slaves with USART & SPI ports on Atmega16U2

    原文来自:https://www.avrfreaks.net/comment/2236256 I'm writing code for an embedded chip that consists o ...

  4. matlab中find 查找非零元素的索引和值

    来源:https://ww2.mathworks.cn/help/matlab/ref/find.html?searchHighlight=find&s_tid=doc_srchtitle f ...

  5. 《穷查理年鉴》习惯 & 工作 & 自省 & 自律 (关于自己)

    习惯 001.在那充满古老年鉴的年代里,扔掉你的恶行,不管它们曾经给你带来多大的好处. 002.许多关于预言的争论都可以简化为:当你说是时,就有人说浊;当你认为不是时,一定有人说是. 003.坏习惯和 ...

  6. Flutter 1.22 正式发布

    支持iOS 14和Android 11,新的i18n和l10n支持,可用于生产的Google Maps和WebView插件,新的App Size工具等等! 作者:Chris Sells 原文:http ...

  7. git fatal: Path 'XXX' is in submodule 'XXX'错误

    easyswoole项目的 vendor/easyswoole/socket/这个项目怎么都无法添加到git目录里面. 报错: Administrator@PhpServer MINGW64 /z/w ...

  8. MySQL常用操作列表

    DROP DATABASE IF EXISTS flaskweb; CREATE DATABASE flaskweb; USE flaskweb; GRANT ALL PRIVILEGES ON fl ...

  9. nginx安全:配置网站图片防盗链

    一,为什么要做防盗链? 1,什么是盗链? 比如某人有一个A网站, 他不愿自己存储图片,(因为磁盘和带宽都有成本) 就在自己A网站的页面上直接插入B网站的图片, 从而为自己吸引流量,这就是盗链 2,为什 ...

  10. request-html 使用

    from requests_html import HTMLSessionsession = HTMLSession()resp = session.get('http://www.spbeen.co ...