java反射机制扫盲

Python 驱动 CAD 二次开发:从零搭建自动化绘图环境 本文详细介绍了如何利用Python进行CAD二次开发,实现自动化绘图。通过win32com库建立Python与CAD软件的通信,文章从环境搭建、连接CAD、操作文档到核心绘图与批量处理,提供了完整的实战指南。该方法能显著提升机械设计、建筑绘图等领域的重复性工作效率,将创造力从繁琐劳动中解放出来。 阅读详情

反射机制是什么

反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

**

反射机制能做什么

**
反射机制主要提供了以下功能:

  • 在运行时判断任意一个对象所属的类;
  • 在运行时构造任意一个类的对象;
  • 在运行时判断任意一个类所具有的成员变量和方法;
  • 在运行时调用任意一个对象的方法;
  • 生成动态代理。

反射机制获取类有三种方法,我们来获取Employee类型

//第一种方式:  
Classc1 = Class.forName("Employee");  
//第二种方式:  
//java中每个类型都有class 属性.  
Classc2 = Employee.class;  

//第三种方式:  
//java语言中任何一个java对象都有getClass 方法  
Employeee = new Employee();  
Classc3 = e.getClass(); //c3是运行时类 (e的运行时类是Employee)  

获取方法,和构造方法,不再详细描述,只来看一下关键字:

  • getDeclaredMethods() 获取所有的方法
  • getReturnType() 获得方法的放回类型
  • getParameterTypes() 获得方法的传入参数类型
  • getDeclaredMethod(“方法名”,参数类型.class,……) 获得特定的方法
  • getDeclaredConstructors() 获取所有的构造方法
  • getDeclaredConstructor(参数类型.class,……) 获取特定的构造方法

另外:getDeclaredFields()获得某个类的所有申明的字段,即包括public、private和proteced,但是不包括父类的申明字段。
getFields()获得某个类的所有的公共(public)的字段,包括父类。

下面是举例使用:

package com.app;


public class T1 {

    public static void main(String[] args) {

        try {
            //创建类
            Class<?> class1 = Class.forName("com.app.Person");;

            //创建实例化:相当于 new 了一个对象
            Object object = class1.newInstance() ;

            //向下转型              
            Person person = (Person) object ;

            person.setId( "100");
            person.setName( "jack") ; 

            System.out.println( "id: " + person.getId() + " name: " + person.getName()  );

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }

    }
}

运行结果:

id: 100 name: jack

实例二:

package com.app;

import java.lang.reflect.Field;

public class T1 {

    public static void main(String[] args) {

        try {
            //创建类
            Class<?> class1 = Class.forName("com.app.Person");

            //创建实例
            Object person = class1.newInstance();

            //获得id 属性
            Field idField = class1.getDeclaredField( "id" ) ;

            //打破封装  实际上setAccessible是启用和禁用访问安全检查的开关,并不是为true就能访问为false就不能访问  
            //由于JDK的安全检查耗时较多.所以通过setAccessible(true)的方式关闭安全检查就可以达到提升反射速度的目的  
            idField.setAccessible( true );

            //给id 属性赋值
            idField.set(  person , "100") ;

            //打印 person 的属性值
            System.out.println( idField.get( person ));

        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace() ;
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

    }
}

运行结果

100

另外说一下Class类提供了四个public方法,用于获取某个类的构造方法。

Constructor getConstructor(Class[] params)     根据构造函数的参数,返回一个具体的具有public属性的构造函数
Constructor getConstructors()     返回所有具有public属性的构造函数数组
Constructor getDeclaredConstructor(Class[] params)     根据构造函数的参数,返回一个具体的构造函数(不分public和非public属性)
Constructor getDeclaredConstructors()    返回该类中所有的构造函数数组(不分public和非public属性)

四种获取成员方法的方法

Method getMethod(String name, Class[] params)    根据方法名和参数,返回一个具体的具有public属性的方法
Method[] getMethods()    返回所有具有public属性的方法数组
Method getDeclaredMethod(String name, Class[] params)    根据方法名和参数,返回一个具体的方法(不分public和非public属性)
Method[] getDeclaredMethods()    返回该类中的所有的方法数组(不分public和非public属性)

四种获取成员属性的方法

Field getField(String name)    根据变量名,返回一个具体的具有public属性的成员变量
Field[] getFields()    返回具有public属性的成员变量的数组
Field getDeclaredField(String name)    根据变量名,返回一个成员变量(不分public和非public属性)
Field[] getDelcaredField()    返回所有成员变量组成的数组(不分public和非public属性)
VisionPro九点标定实战:从相机拍照到机器人精准抓取的完整流程 本文详细介绍了VisionPro九点标定技术在工业自动化中的应用,从相机拍照到机器人精准抓取的完整流程。通过硬件配置、标定步骤和实战技巧的解析,帮助工程师实现高精度视觉引导系统,提升生产效率。特别适合需要解决二维图像坐标与物理空间转换问题的自动化项目。 阅读详情

相关推荐

告别VMware Tools!用open-vm-tools在Ubuntu 22.04上搞定共享文件夹(附开机自动挂载)

本文详细介绍了在Ubuntu 22.04上使用open-vm-tools替代VMware Tools实现高效共享文件夹管理的方法。通过开源工具open-vm-tools,用户可避免传统方案的兼容性问题,享受自动适配内核、系统更新同步等优势。文章包含从安装配置到开机自动挂载的全流程指导,特别适合在VMware虚拟机中运行Ubuntu Desktop的开发者提升工作效率。

weixin_32520095的博客 583

谈谈Java中的反射与Class等类

1、反射与Class类 (所有源代码已经上传到码云上:https://gitee.com/c3h2/knowledge-study.git 该章节所属reflect包中,具体代码开编号,每个类都有编号) 1.1 反射简介 在Java之中,反射就是其中最重要的特性之一,也正是因为Java支持反射,才使得Java的设计更加灵活,这么多年也一直经久不衰的原因之一(抗高并发也是一个原因)。如果你不掌握反射,那么在Java里面很难走的通,也写不出高复用的代码,因为几乎所有的框架都是基于反射来实现的。 既然Java反射

C18H12的博客 259

从OAuth到DID:Web4.0身份验证协议的技术演进图谱

在数字身份体系从Web2.0向Web4.0跨越的进程中,身份验证协议正经历着从中心化授权到自主主权的范式转移。本文通过对比OAuth 2.0、OpenID Connect等传统方案与W3C DID、ION等去中心化协议的技术架构,揭示身份验证技术在性能、安全、隐私三大维度的代际差异。基于对GitHub、欧盟数字身份钱包等典型系统的实测数据分析,量化评估中心化授权服务器的单点故障风险与DID链上验证的吞吐量瓶颈。结合零知识证明、分布式密钥管理等前沿技术,为开发者提供面向Web4.0的渐进式身份架构迁移策略。

水务人 833

JAVA中的反射机制

反射,当时经常听他们说,自己也看过一些资料,也可能在设计模式中使用过,但是感觉对它没有一个较深入的了解,这次重新学习了一下,感觉还行吧!            一,先看一下反射的概念:                主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。               反

学会改变自己——才能突破 44万+

【虚拟化生态平台】虚拟化平台esxi挂载USB硬盘

虚拟化平台安装好之后,一般情况下,只有一个硬盘在工作,其他的外接硬盘(我的只有一个ssd硬盘,其他的均是usb外接,SATA接口的硬盘是否这样我暂时不清楚哈)没有在工作,但是一个硬盘明显不够我们使用的,所以我们需要去挂载外接的硬盘来扩容。...

Rubik Blog 4834

华为交换机实战:如何用ACL+流分类精准限制特定IP的网速(附完整命令)

本文详细介绍了华为交换机如何通过ACL+流分类技术实现精准IP限速,包括ACL规则配置、流分类关联、流行为定义及流策略应用等完整步骤。文章提供了实战命令和配置验证方法,帮助网络管理员有效管理带宽资源,解决特定IP占用过多带宽的问题。

weixin_29229055的博客 100

扫盲java基础-反射机制

一、反射怎么来的 二、例子 1、先写一个StudentDemo类 package com.weizhaoyang.Student; public class StudentDemo{ private String username; private Integer age; private String sex; public String getUsername() { return u...

Brave_heart4pzj的博客 4257

【人工智能之深度学习】12. BERT微调实战:医疗文本分类的领域自适应技巧与工业级实现

摘要:医疗文本分类是自然语言处理在医疗健康领域的核心应用,可辅助疾病诊断、病历结构化和医疗质量监控。然而,医疗文本的专业术语密集、实体关系复杂及数据长尾分布等特性,导致通用BERT模型性能受限。本文系统阐述医疗文本分类的领域自适应技术,从理论原理到工业级实现展开全流程讲解。首先分析医疗文本的独特属性及技术挑战;随后详解领域继续预训练、适配器微调、对抗训练等核心技术的数学原理;构建包含数据预处理、模型优化、隐私保护的完整实战架构;通过疾病分类、情感分析、事件检测三大案例验证技术有效性。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1004

Java反射机制深度解析

在软件开发过程中,我们常常会遇到需要动态地获取或修改类的信息,以及创建对象的需求。这种需求在Java编程语言中,可以通过JVM的核心知识点——反射来实现。下面,我们将通过一个具体的场景来引出对反射知识点的介绍。想象一下,在一个大型企业级应用中,系统需要根据用户的不同角色动态地加载不同的业务模块。例如,普通用户可能只需要访问基础的业务功能,而管理员则需要访问更高级的功能。在这种情况下,如果每个角色都对应一个固定的类,那么在系统启动时就需要预先加载所有这些类,这不仅浪费了资源,而且增加了系统的复杂性。

我是Java程序员廖志伟,感谢朋友们的支持!不定期贡献一篇高品质、过万文字、图文并茂且附有视频解说、满载代码示例注释的良心之作,坚决杜绝粗制乱造。 930

ORB-SLAM2算法部署验证、原理代码和各种改进方法汇总

本文主要汇总个人学习使用ORB-SLAM2算法中参考的相关博客和代码汇总,以及在ORB-SLAM2算法基础上各个改进方法的汇总。

重点记录机器人和自动驾驶相关领域的技术,尤其是计算机视觉,视觉SLAM等,不仅有前言文献或必备算法的学习,也会有实际应用的点滴经验 742

性能调优秘籍——让OpenClaw运行速度提升10倍(2026优化版)

OpenClaw性能优化核心摘要 本文详细介绍了提升OpenClaw系统性能的关键技术,包括: 使用性能分析器进行代码级性能诊断 内存优化与高效缓存策略 并发处理优化技术 数据库查询性能提升方法 重点内容包括: 全面的性能分析工具实现(计时、内存监控、错误跟踪) 自动生成性能报告和优化建议 操作耗时与内存占用分析算法 关键性能指标(平均耗时、内存增长)计算 通过系统性的性能分析优化,可使OpenClaw运行速度提升10倍以上。

博客 899

java基础知识点扫盲_面试必备—JAVA最基础的知识点扫盲

原标题:面试必备—JAVA最基础的知识点扫盲 一、关于Java语言的一些基础知识点Java的重要特性:网络技能,多线程,安全性,动态性,结构中立。其中结构中立可解释为,Java编译器生成一个体系结构中立的目标文件格式,这是一种编译过的代码,只要机器中有Java运行环境便可运行。Java编译器能够检测许多在其他语言中仅在运行时刻才能够检测出来的问题。Java解释器可以在任何安装了解释器的机器上执行J...

weixin_32392989的博客 368

UWB芯片DW3000之PDOA测向实现源码

本文详细介绍如何基于UWB芯片DW3000之PDOA测向的源码实现。

DT程序员的博客 2613

java基础知识点扫盲_java基础知识点扫盲(面试必备)

一、关于Java语言的一些基础知识点Java的重要特性:网络技能,多线程,安全性,动态性,结构中立。其中结构中立可解释为,Java编译器生成一个体系结构中立的目标文件格式,这是一种编译过的代码,只要机器中有Java运行环境便可运行。Java编译器能够检测许多在其他语言中仅在运行时刻才能够检测出来的问题。Java解释器可以在任何安装了解释器的机器上执行Java字节码。JDK,编写java程序的软件;...

weixin_30649767的博客 284

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Java快速扫盲指南

学习Java的同学注意了!!! 学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:589809992我们一起学Java! JDK,JRE和 JVM 的区别 JVM:java 虚拟机,负责将编译产生的字节码转...

chuifuhuo6864的博客 122

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

java 反射机制

1. 代码运行示例: import java.lang.reflect.Constructor; import java.lang.reflect.Method; import java.util.ArrayList; public class ReflectionFirst { public static void main(String[] args) throws Exc...

Rocy 147

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Java基础扫盲

Java概述 1. JVM、JRE和JDK的关系 JVM Java Virtual Machine是Java虚拟机,Java程序需要运行在虚拟机上,不同的平台有自己的虚拟机,因此Java语言可以实现跨平台。 JRE Java Runtime Environment包括Java虚拟机和Java程序所需的核心类库等。核心类库主要是java.lang包:包含了运行Java程序必不可少的系统类,如基本数据类型、基本数学函数、字符串处理、线程、异常处理类等,系统缺省加载这个包 如果想要运行一个开发好的Java程序,计

weixin_43877332的博客 316

java 反射 执行静态方法_java基础知识点扫盲

一、关于Java语言的一些基础知识点Java的重要特性:网络技能,多线程,安全性,动态性,结构中立。其中结构中立可解释为,Java编译器生成一个体系结构中立的目标文件格式,这是一种编译过的代码,只要机器中有Java运行环境便可运行。Java编译器能够检测许多在其他语言中仅在运行时刻才能够检测出来的问题。Java解释器可以在任何安装了解释器的机器上执行Java字节码。JDK,编写java程...

weixin_33525785的博客 617

Java注解——>继续扫盲

注解Annotation 注释(comment)!= 注解——>但是很多相似特征 历史: Annotation是从JDK5.0开始引入的新技术 作用: 不是程序本身,但是对程序做出解释(这点倒是和注释相同)、 可以被其他程序(编译器等)读取 注解可以帮助查错,例如重写方法名不对之类的 格式: 注解:@注释名,最常用的@override,也可以添加一些参数值,如@SuppressWainings(value = "unchecked") 使用范围: 可以附加在package、c.

qq_44435206的博客 228

java入门考点_java基础知识点扫盲(面试必备)

一、关于Java语言的一些基础知识点Java的重要特性:网络技能,多线程,安全性,动态性,结构中立。其中结构中立可解释为,Java编译器生成一个体系结构中立的目标文件格式,这是一种编译过的代码,只要机器中有Java运行环境便可运行。Java编译器能够检测许多在其他语言中仅在运行时刻才能够检测出来的问题。Java解释器可以在任何安装了解释器的机器上执行Java字节码。JDK,编写java程序的软件;...

weixin_32299949的博客 103

Java包及访问权限,扫盲贴

当一个大型程序由数个不同的组别或人员开发共同开发时,用到相同的类名称是很有可能的事。如果这种情况发生,还要确保程序可以正确运行,就必须通过package关键字来帮忙了。package是在使用多个类或接口时,为了避免名称重复而采用的一种措施。那么具体应该怎么使用呢?在类或接口的最上面一行加上package的声明就可以了。 package的声明格式:package package名称; ...

aaronyyl1027的博客 138

关于Java中泛型、反射和注解的扫盲篇

泛型 泛型概念   泛型是在JDK1.5之后引入的,旨在让我们写出更加通用化,更加灵活的代码。通用化的手段在于让数据类型变得参数化,定义泛型时,对应的数据类型是不确定的,泛型方法被调用时,会指定具体类型,其核心目标是为了解决容器类型在编译时安全检查的问题。   泛型:一般用在类、方法、接口中,叫做泛型类、泛型接口、泛型方法 泛型的使用 package demo.generic; import lombok.Data; /** * 泛型类的定义 * @param <T>

程序员波特 472
上一篇: Kotlin 从入门到实战(二)
下一篇: 机器学习入门--kNN算法
CallMeSP
博客等级 码龄10年 48粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值