调用属性,方法,构造器

属性调用

    @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调用的更多相关文章

  1. Java进阶之reflection(反射机制)——反射概念与基础

    反射机制是Java动态性之一,而说到动态性首先得了解动态语言.那么何为动态语言? 一.动态语言 动态语言,是指程序在运行时可以改变其结构:新的函数可以引进,已有的函数可以被删除等结构上的变化.比如常见 ...

  2. Java 类反射机制分析

    Java 类反射机制分析 一.反射的概念及在Java中的类反射 反射主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.在计算机科学领域,反射是一类应用,它们能够自描述和自控制.这类应用通过某 ...

  3. java的反射机制

    一.java的反射机制浅谈 最近研究java研究得很给力,主要以看博文为学习方式.以下是我对java的反射机制所产生的一些感悟,希望各位童鞋看到失误之处不吝指出.受到各位指教之处,如若让小生好好感动, ...

  4. JAVA的反射机制学习笔记(二)

    上次写JAVA的反射机制学习笔记(一)的时候,还是7月22号,这些天就瞎忙活了.自己的步伐全然被打乱了~不能继续被动下去.得又一次找到自己的节奏. 4.获取类的Constructor 通过反射机制得到 ...

  5. java笔录---反射机制(1)

    引言   为了方便记忆java的反射机制,在这里仔细的总结了一下.主要是怕以后忘记了,这样也方便回忆.因为最近利用空余时间深入的了解spring和Mybatis框架,   像spring中核心模块IO ...

  6. java的反射机制浅谈(转)

    原文链接:java的反射机制浅谈 一.java的反射机制浅谈 1.何谓反射机制 根据网文,java中的反射机制可以如此定义: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性 ...

  7. 【转】java原理—反射机制

    一.什么是反射:反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序语言 ...

  8. java原理—反射机制

    http://www.cnblogs.com/forlina/archive/2011/06/21/2085849.html 一.什么是反射:反射的概念是由Smith在1982年首次提出的,主要是指程 ...

  9. Java的反射机制和动态代理

    介绍Java注解的时候,多次提到了Java的反射API.与javax.lang.model不同的是,通过反射API可以获取程序在运行时刻的内部结构.反射API中提供的动态代理也是非常强大的功能,可以原 ...

  10. 学习:java原理—反射机制

      一.什么是反射:反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.这一概念的提 出很快引发了计算机科学领域关于应用反射性的研究.它首先被程 ...

随机推荐

  1. c# webApi返回Excel数据流 || 使用Excel数据流的方式下载Excel

    背景: 在前端无法生成特殊的excel表格,或操作复杂的时候会通过后台进行生成excel.但是服务器的资源也非常宝贵,所以通过数据流的方式就可以实现:不在服务器存储的情况下,使前端成功下载excel文 ...

  2. 通过JS来触发<a>链接来实现图片下载

    function downloadImg(){ var url = '实际情况的图片URL'; // 获取图片地址 var a = document.createElement('a'); // 创建 ...

  3. 大模型高效微调-LoRA原理详解和训练过程深入分析

    博客首发于我的知乎,详见:https://zhuanlan.zhihu.com/p/702629428 一.LoRA原理 LoRA(Low-Rank Adaptation of LLMs),即LLMs ...

  4. 基于 Swagger 增强 UI FytApi.MUI

    FytApi.MUI 介绍 基于swagger的轻量级,注入化的api-ui组件 支持netcore 3.1/5.0/6.0 特点 零浸入.轻量.简单.好看.好用 可配置权限认证以及Header,支持 ...

  5. 重学前端 - react-第二节: 添加ts + scss

    重学前端 - react: 添加ts + scss 简介: 上一节我们新建了 react 项目.项目中并没有使用 ts + scss. 现在我们为项目添加 ts + scss.是项目后期维护更加方便, ...

  6. 前端Uncaught (in promise) 的解决方法及原因

    问题:在Vue项目中使用axios调用一个第三方的接口时,前端无法获取到接口返回值,检查控制台Network发现接口请求已经正常发出并且有数据返回,但是控制台Console报了这么一个错误 上图可以看 ...

  7. Windows10(or windows11) Hyper-V 创建虚拟交换机后宿主机上传速度变特别慢的问题解决

    问题 我在我的win11上启用了Hyper-v,装了个虚拟机跑了个CentOS7.6,为了让centos和宿主机通信在同个网段搞了个桥接网络,网络环境如下 然后我测试一个文件上传功能的时候发现网络上传 ...

  8. 掌握 Nuxt 3 中的状态管理:实践指南

    title: 掌握 Nuxt 3 中的状态管理:实践指南 date: 2024/6/22 updated: 2024/6/22 author: cmdragon excerpt: 摘要:该文指南详述了 ...

  9. mysql在把子查询结果作为删除表中数据的条件,mysql不允许在子查询的同时删除原表数据

    在上一文中发布了多表删除指定记录,发现达不到我想要的效果,找了很多资料,发现以下方法. 数据库不能边查询边删除, 尝试以下操作 delete from push_msg_overview where ...

  10. 01-前端开发Vscode插件配置

    01 自动保存配置 02 空格渲染方式 配置好以后,可以看到代码的空格有几个,以点的方式呈现,1个点表示1个空格 03 图标插件 VSCode Great Icons 04 缩进 推荐使用2 05 v ...