反射笔记

Go 学习笔记 · 进阶篇 · 第三天:反射机制 反射就是程序在运行时检查其类型和值的能力。Go 提供了reflect包,可以用来动态查看、修改、调用类型。:类型信息:值信息反射让你在运行时查看并修改类型和值结构体字段和标签都能动态访问虽强大,但一定要慎用,能不用就别用!今日咒语:“写 Go 不用反射能活,用了反射可能活得更野,但也可能挂得更快。 阅读详情

一、Class类

(1)类是对象,类是java.lang.Class的实例对象
(2)数据类型不是对象,静态的东西也不是对象
(3)Class类的对象表示:如 Class A{}

//A类的实例对象如何表示
    A a = new A(); //a就表示A类的实例对象
//任何一个类都是Class类的实例对象,有三种表示形式
//第一种→实际在告诉我们任何一个类都有一个隐含的静态成员变量class
    Class a_one = A.class;
//第二种→已经知道该类的对象,通过getClass方法
    Class a_two = a.getClass();
//a_one 和 a_two 都表示了A类的类类型
//第三种
    Class a_tri = null;
    a_tri = Class.forName("com.demo.A");//会抛出ClassNotFound异常
//可以通过类的类类型创建该类的对象实例
    A a = (A)a_one.newInstance();//需要有无参构造方法(会抛出ClassNotFound异常)

二、动态加载类

Class.forName(“包名+类的名称”);
(1)不仅表示了类的类类型,还代表了动态加载类
(2)编译时刻加载类是静态加载类,运行时刻加载类是动态加载类
//new 创建的对象是静态加载类,在编译时刻就需要加载所有可能用到的类
//Class.forName()是动态加载类,在运行时刻加载,并可通过类类型的newInstance方法创建该类的对象

三、获取方法信息

(1)数据类型也有类类型

    Class i_c = int.class;//int的类类型
    Class s_c = String.class;//String的类类型

    System.out.pringln(i_c.getName());//输出结果→int
    System.out.pringln(s_c.getName());//输出结果→java.lang.String
    System.out.pringln(s_c.getSimpleName())//输出结果→String(不包含包名的类名称)

(2)获取类的信息

public static void getClassMsg(Object obj){
    //先获取类的类类型
    Class c = obj.getClass();//传递的是哪个子类,c就是哪个子类的类类型
    //获取类的名称
    c.getName();
    /**
    *Method类,方法对象
    *一个成员方法就是一个Method对象
    *getMethods()获取的是所有public的函数,包括父类
    *getDeclaredMethods()获取的是所有该类自己声明的方法,不需要访问权限
    */
    Method[] ms = c.getMethods();
    for(Method m : ms){
        //得到方法的返回值类型
        Class returnType = m.getReturnType();
        //得到方法名
        m.getName();
        //参数类型
        Class[] params = m.getParamterTypes();
    }
}

四、获取成员变量的构造函数

/*
*成员变量也是对象
*java.lang.reflect.Field
*Field类封装了关于成员变量的操作
*getFields()获取所有的public的成员变量信息
*getDeclaredFields()获取该类自己声明的成员变量信息
*/
Field[] fs = c.getDeclaredFields();
for(Field f : fs){
    //得到成员变量的类型的类类型
    Class fieldType = f.getType();
    //类型名称
    fieldType.getName();
    //变量名称
    f.getName();
}

//构造函数也是对象,java.lang.Constructor中封装了构造函数的信息
Constructor[] cs = c.getDeclaredConstructor();
for(Constructor c : cs){
    //得到参数列表类类型
    c.getParameterType();
}

五、方法的反射操作

(1)定义一个A类,并声明方法print()

Class A{
    public void print(int a,int b){}
    public void print(){}
}

(2)反射操作代码举例

//先获取类的类类型
A a = new A();
Class c = a.getClass();
//获取print(int,int)方法
//Method m = c.getMethod("print",new Class[]{int.class,int.class});
Method m = c.getMethod("print",int.class,int.class);
//方法反射操作,有返回值就返回具体值,没有就返回null
//Object o = m.invoke(a,new Object[]{10,20});
Object o = m.invoke(a,10,20);
//获取print()方法
//Method m2 = c.getMethod("print",new Class[]{});
Method m2 = c.getMethod("print");
//m2.invoke(a,new Object[]{});
m2.invoke(a);

六、拓展

Java中的泛型,是防止错误输入的,只有编译阶段有效,绕过编译就无效了

//可以通过方法的反射来操作,绕过编译
ArrayList<String> list = new ArrayList<String>();
Class c = list.getClass();
Method m = c.getMethod("add",Object.class);
m.invoke(list,100);
通俗傻瓜式理清光栅化渲染和光线追踪渲染的原理 用通俗语言傻瓜式的讲清楚光栅渲染和光线追踪渲染的原理,方便没有相关理论基础的朋友理解入门。 阅读详情

相关推荐

机器视觉--线扫相机触发:从原理到选型,构建高效成像方案

本文深入解析线扫相机触发技术,从硬件编码器触发到软件触发方案,提供详细的性能对比和选型指南。通过实际案例展示如何构建高效成像方案,特别适合机器视觉领域需要精准控制的应用场景,如工业检测和自动化生产线。

weixin_42531886的博客 418

Java反射(详细学习笔记)

Reflection(反射)是java被视为java动态语言的关键,反射机制允许程序在执行期间借助于Reflection API获取任何类的内部信息,并能直接操作任意对象的内部属性及方法。加载完类之后,在堆内存的方法区中就会产生一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。引入包类=>new实例化=>获取实例对象实例化对象=>=>获取完整包类名称。

钟健的博客 7926

MOS管开关设计知识-(五种MOS管开关电路图方式)

在使用MOS管设计开关电源或者马达驱动电路的时候,大部分人都会考虑MOS的导通电阻,最大电压等,最大电流等,也有很多人仅仅考虑这些因素。这样的电路也许是可以工作的,但并不是优秀的,作为正式的产品设计也是不允许的。 下面是我对MOSFET及MOSFET驱动电路基础的一点总结,其中参考了一些资料,非全部原创。包括MOS管的介绍,特性,驱动以及应用电路。 1、MOS管种类和结构 MOSFET管是FET的...

树卡花 7万+

反射学习笔记

反射学习。

qq_52565945的博客 233

Cadence——原理图相关教程

包含创建文件,原理图,元器件,规则检查,PDF与BOM清单输出,各类PCB网表

haonanyayaya的博客 1万+

UG NX 12.0零基础实战:从草图绘制到三维建模全流程解析

本文详细解析UG NX 12.0从草图绘制到三维建模的全流程,适合零基础用户快速掌握这款工业设计软件。内容涵盖界面设置、基础操作、草图技巧、拉伸旋转建模、布尔运算等核心功能,并通过机械零件实战案例演示完整设计流程,帮助读者系统学习UG NX 12.0的工业设计应用。

weixin_29261711的博客 1177

第二十三章 Java反射学习笔记

2.1 反射相关的主要类4.1 Class类常用方法5. 获取类结构信息。

你好, 我在学java的博客 2651

QT使用openssl实现RSA加解密

使用openssl生成公私钥,随后用QT对相应的信息进行RSA加解密

weixin_42098322的博客 3867

反射(狂神说笔记)

反射概述 java是静态类型语言类型,因为有了反射机制,所以变成了一门准动态语言,同时反射还是框架设计的灵魂(前提:必须得到class字节码)。 动态语言:表示一种在运行时可以改变结构的语言,列如新的函数对象,甚至代码可以被引进,已有的代码可以被删除,或是增加,简单一点就是:可以在运行时期可以通过某些条件改变自己结构,如:Object-C,C#,JavaScript,PHP,python. 静态语言:相对于动态语言表示在运行时期不可以改变自身结构,如:java,C,C++. 补充:...

abc98526的博客 919

太美了!现代女主jk海军风穿搭四视图

哪个女孩子初高中的时候不买几套JK衣服啊,穿上完全是青春女孩。那还愣着干啥,不得也给你的漫剧女主也穿上!直接就是分享三套JK穿搭,红棕双麻花辫配经典水手服,是那种乖乖巧巧的元气学妹;粉色羊毛卷双马尾,搭配蝴蝶结和小挎包甜度直接拉满;还有灰棕色侧麻花辫,浅蓝上衣配黑色百褶裙,温柔里又带点小酷。下面把这三套角色的完整提示词分享出来,喜欢哪套就拿去参考,改改发型和配色,还能继续解锁新角色!

欢迎来到鸾姝淡月博客,专为程序员和编程爱好者打造的技术博客。我们分享编程语言趋势、开发工具、编程哲学、职业发展等,助你掌握新技术,优化技能,激发编程热情。 55

Qt界面美化-飞扬青云自绘控件插件的使用-避免采坑

1、先上一个集成到QtCreater中的效果图: 2、飞扬青云自绘控件插件下载地址:https://gitcode.net/mirrors/feiyangqingyun/qucsdk?utm_source=csdn_github_accelerator 3、集成插件到QtCreater中的方法: (1)、查看自己使用的QtCreater的版本信息,我的:Qt 5.15.2 MSVC2019 64位 (2)插件下载下来后工程预览: 我选择msvc版本的SDK,打开找到匹配的SDK:...

小米的修行之路 2793

狂神说注解和反射笔记整理

doris

doris的博客 4889

【推荐100个unity插件】制作美丽 Unity 景观,增强Terrain材质表现的插件——GTS

GTS地形着色器是一款专为Unity设计的强大工具,可解决地形纹理绘制和光照处理的难题。它提供一键式配置,支持实时调整地形效果,包含细节注入、高度混合、雪注入等核心功能,并兼容网格地形和低多边形模型。插件完美集成Gaia天气系统,支持HDRP细分效果。安装后通过GTS管理器创建配置文件并应用到地形,即可快速生成高质量地形渲染。其模块化设计包含全局设置、网格转换和细节调整等面板,使开发者能灵活控制地形表现,显著提升视觉效果与性能表现。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1566

java反射笔记整理

java反射笔记整理 一、反射基础 1.Class对象的三种获取方式 @Test public void threeMethodForClassObj() throws ClassNotFoundException { //1.每个类都有一个隐藏的静态变量class C...

yuleishangran的博客 311

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

java学习笔记15——反射机制

2、声明榨汁机(Juicer),包含运行方法:public void run(Fruit f),方法体中,调用f的榨汁方法squeeze()4.(了解)反射的应用4:通过反射获取注解的信息(见com.atguigu04.other.annotation包的测试)> 因为反射体现了动态性(可以在运行时动态的获取对象所属的类,动态的调用相关的方法),所以我们在设计框架的时候,> 从我们作为程序员开发者的角度来讲,我们开发中主要是完成业务代码,对于相关的对象、方法的调用都是确定的。

qq_58956810的博客 754

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Net反射(Reflection)学习笔记

Net反射(Reflection)学习笔记

老桥的技术家园 467

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【Java学习笔记】基础加强之反射

本文是在学习了刘意老师的Java基础视频之后,写出的学习笔记。 1.类的加载 当程序要使用某个类时,如果该类还没有被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化。 2.类加载器 负责将.class文件加载到内存中,并为之生成对应的Class对象。 3.反射 通过class文件对象,使用该文件中的成员变量、构造方法、成员方法。 4.反射的原理 首先需要把j...

我们仨 209

反射--案例:笔记本电脑的配置设备

(1)笔记本电脑 public class Computer { // 电脑开启 public void run() { System.out.println("电脑开启"); } // 使用外围设备 public void usbUsb(USB usb) { if (usb != null) { usb.open(); usb.close(); } } ...

小乔与你同在 279

Java笔记(反射、动态代理、注解)

Java笔记(反射、动态代理、注解)

LLM | Agent | RAG | Java 2727

JAVA基础学习笔记-day17-反射

Reflection(反射)是被视为动态语言的关键,反射机制允许程序在运行期间借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。这个对象就像一面镜子,透过这个镜子看到类的结构,所以,我们形象的称之为:反射。

天才在左,疯子在右,而我只想做个不折不扣的乐天派 1170

Java反射笔记

Java反射笔记 反射前置知识 1:Class类 同Object,String等类一样,Class也是一个类 构造函数只可由JVM调用,不可由开发者调用。 任何一个类均是Class类的实例对象。 任何继承Object的对象均有 getClass()方法,返回该对象,Class类的对像有class静态成员。 package reflect; public class Main { pu...

tiddar的博客 3598

java反射(从认识到应用)-黑马笔记

说白了,反射就是:加载类,并允许以编程方式解剖类中的各种成分(成员变量、方法、构造器等)。***getConstructor(参数类型)获取单个构造器,需要写参数类型来定位构造器。(3)最重要是:适合做Java的框架,基本上主流框架都会基于反射设计出一些通用的功能。*此文章是观看黑马雷哥关于Java反射的视频做的笔记,如有错请多指教。获取类构造器的作用:依然是初始化对象返回。(1)基本作用:得到一个类的全部成分并操作。加载类、获取类的字节码:class对象。2.获取类中的构造器。4.获取类的成员方法。

weixin_65897295的博客 322

java反射机制个人学习==速成笔记

在java运行状态中,对于任意一个类,都可以知道这个类的所有属性方法,对于任意一个对象,都能运用它的方法和属性,允许程序运行时获取类的信息,创建对象,调用方法和属性。

2401_84040384的博客 748

注解与反射_学习笔记

注解与反射 前言 在B站跟着狂神学习注解与反射的一些笔记,后期若有补充会更新该博文,加油! 什么是注解? 注解 Annotation是JDK5开始引入的技术 Annotation作用: 不适程序本身,可以对程序作出解释 可以被其他程序读取,例如编译器 Annotation的格式: 注解是以“@注解名”在代码中存在,还可以添加参数值,例如@SuppressWarning(value=“unchecked” ). Annotation在哪儿使用? 可以在package、class、method、fie

qq_41494557的博客 361

Java笔记(23)反射

Java笔记(23)反射 1.类加载器 当我们写出一个java类的时候,这个扩展名为".java"的文件经过编译器编译成一个扩展名为".class"的文件,class文件中存储的是经过编译后的可由java虚拟机执行的虚拟机指令。当我们需要使用某个类时,虚拟机会经历下面几个步骤: 加载这个类的class文件,并在内存中创建这个class文件的Class对象 验证这个文件中的信息和数据是否符合虚拟机...

weixin_42621024的博客 404

Java笔记——反射

Java 的反射机制(Reflection)允许程序在运行时动态地获取类的信息、操作对象属性及调用方法,无需在编译时确定具体类型。类加载的过程中,JavaJava笔记——反射程序运行时,类会被加载到JVM中,每个类都有一个对应的 Class 对象。这个Class 对象包含了该类的完整结构信息,通过这个 Class 对象便可以得到该类的完整结构信息。

m0_74665582的博客 1194
上一篇: 异常笔记
下一篇: 注解笔记
晓彬哟
博客等级 码龄11年 7粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值