【Java】Reflection 反射机制 03调用
调用属性,方法,构造器
属性调用
@Test
public void fieldCall() throws NoSuchFieldException, IllegalAccessException, InstantiationException {
// 类类型对象
Class<Animal> animalClass = Animal.class; // 获取指定字段 java.lang.NoSuchFieldException: name 访问失败 字段是private 不推荐使用
//Field name = animalClass.getField("name"); Field name = animalClass.getDeclaredField("name"); // name.set(animal,"阿伟"); 设置异常,需要解放权限访问
// java.lang.IllegalAccessException: Class cn.dai.Reflection.demo.ReflectionTest2 can not access a member of class cn.dai.Reflection.demo.Animal with modifiers "private"
name.setAccessible(false); // 生成空参对象
Animal animal = animalClass.newInstance(); // 字段实例 调用方法 注入对象和字段注入
name.set(animal,"阿伟"); // 获取对象的此字段
Object o = name.get(animal);
System.out.println(o);
}
方法
@Test
public void methodCall() throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
// 类类型对象
Class<Animal> animalClass = Animal.class; // 指定本类的某一方法,第一参数:方法的名字,可变参数,参数列表顺序的参数类型
Method show = animalClass.getDeclaredMethod("show", String.class); // 生成实例
Animal animal = animalClass.newInstance(); // 以防万一 解开访问权限
show.setAccessible(true); // 调用方法
Object waKanDa = show.invoke(animal, "瓦坎达"); System.out.println(waKanDa);
}
静态方法调用
@Test
public void staticMethodCall() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
// static void haha(){ System.out.println("adasdasdsad"); } Class<Animal> animalClass = Animal.class; Method haha = animalClass.getDeclaredMethod("haha");
haha.setAccessible(true); // 静态的直接调用运行时类的实例,这里是一个空参方法,只要实例一个参数即可
Object invoke = haha.invoke(animalClass);
}
构造器
@Test
public void constructorCall() throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
Class<Animal> animalClass = Animal.class; // 根据重载的特性,只要参数不一样,或者个数不一样,都可以找到
Constructor<Animal> declaredConstructor = animalClass.getDeclaredConstructor(String.class); declaredConstructor.setAccessible(true); // 创建!
Animal animal = declaredConstructor.newInstance("杰哥");
System.out.println(animal);
}
【Java】Reflection 反射机制 03调用的更多相关文章
- Java进阶之reflection(反射机制)——反射概念与基础
反射机制是Java动态性之一,而说到动态性首先得了解动态语言.那么何为动态语言? 一.动态语言 动态语言,是指程序在运行时可以改变其结构:新的函数可以引进,已有的函数可以被删除等结构上的变化.比如常见 ...
- Java 类反射机制分析
Java 类反射机制分析 一.反射的概念及在Java中的类反射 反射主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.在计算机科学领域,反射是一类应用,它们能够自描述和自控制.这类应用通过某 ...
- java的反射机制
一.java的反射机制浅谈 最近研究java研究得很给力,主要以看博文为学习方式.以下是我对java的反射机制所产生的一些感悟,希望各位童鞋看到失误之处不吝指出.受到各位指教之处,如若让小生好好感动, ...
- JAVA的反射机制学习笔记(二)
上次写JAVA的反射机制学习笔记(一)的时候,还是7月22号,这些天就瞎忙活了.自己的步伐全然被打乱了~不能继续被动下去.得又一次找到自己的节奏. 4.获取类的Constructor 通过反射机制得到 ...
- java笔录---反射机制(1)
引言 为了方便记忆java的反射机制,在这里仔细的总结了一下.主要是怕以后忘记了,这样也方便回忆.因为最近利用空余时间深入的了解spring和Mybatis框架, 像spring中核心模块IO ...
- java的反射机制浅谈(转)
原文链接:java的反射机制浅谈 一.java的反射机制浅谈 1.何谓反射机制 根据网文,java中的反射机制可以如此定义: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性 ...
- 【转】java原理—反射机制
一.什么是反射:反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序语言 ...
- java原理—反射机制
http://www.cnblogs.com/forlina/archive/2011/06/21/2085849.html 一.什么是反射:反射的概念是由Smith在1982年首次提出的,主要是指程 ...
- Java的反射机制和动态代理
介绍Java注解的时候,多次提到了Java的反射API.与javax.lang.model不同的是,通过反射API可以获取程序在运行时刻的内部结构.反射API中提供的动态代理也是非常强大的功能,可以原 ...
- 学习:java原理—反射机制
一.什么是反射:反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.这一概念的提 出很快引发了计算机科学领域关于应用反射性的研究.它首先被程 ...
随机推荐
- WXS 模块
https://developers.weixin.qq.com/miniprogram/dev/framework/view/wxs/01wxs-module.html 2.1.概述 WXS(Wei ...
- LeetCode 39. Combination Sum 组合总和 (C++/Java)
题目: Given a set of candidate numbers (candidates) (without duplicates) and a target number (target), ...
- 剑指Offer-65.矩阵中的路径(C++/Java)
题目: 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子.如果一条路径经过了矩阵中的 ...
- json null (空值)不序列化
json null (空值)不序列化 JsonSerializerSettings jsetting = new JsonSerializerSettings(); jsetting.DefaultV ...
- win10无线网卡不会自动连接
usb接口的网卡.win10无线网卡不会自动连接. 解决方法: 第一步:在控制面板\网络和 Internet\网络连接中,禁用再启用一次无线网络. 第二步:在 控制面板\硬件和声音\电源选项\选择电源 ...
- Spring Data JPA 学习笔记1 - JPA与Spring Data
标记[跳过]的未来完善 1 理解JPA 1.1 什么是持久化? 当一个软件关闭的时候,软件内储存的状态数据还能在下次开启时被恢复,这就是持久化.对象持久化是指每个独立的对象的生命周期都能不依赖应用程序 ...
- 如何将本地的项目,上传到github
操作步骤: 1.github,创建一个仓库,复制仓库的地址 2.在要上传文件的目录,点击选择git bash here 3.输入[git clone],粘贴刚复制的仓库地址,clone成功后,会将仓库 ...
- pytest-parallel 多线程执行用例,访问pymysql数据库,遇到的问题
遇到的问题 1.pymysql.err.ProgrammingError: execute() first 2.File "D:\xxx\python3.8\lib\site-package ...
- Java面试知识点(三)Java中的单继承和多继承
多继承的优缺点 优点:对象可以调用多个父类中的方法 缺点:如果派生类所继承的多个父类有相同的父类(也就是一个菱形继承结构),而派生类对象需要调用这个祖先类的方法,就会容易出现二义性. 1.java 与 ...
- 攻防世界——CRYPTO新手练习区解题总结<1>(1-4题)
第一题base64: 下载附件,得到一个txt文件,打开 得到一串乱码,由题目可知,是base64,解码得到flag 第二题Caesar: 下载附件得到乱码 oknqdbqmoq{kag_tmhq_x ...