当前位置: 首页 > news >正文

反射(一)

动态 VS 静态语言

动态语言:运行时,可以改变其结构。

Object-C、C#、JS、PHP、Python
JS 就是动态语言。

function f() {var x = "var a=3; var b=5; alert(a+b)";eval(x);
}

静态语言:运行时,结构不可变。

Java、C、C++
Java 不是动态语言,但可称为“准动态语言”——反射。

Reflection(反射)

  • 是Java被视为动态语言的关键。
  • 反射机制允许程序在执行期间,借助 Reflection API 取得任何类的内部消息,并能直接操作任意对象的内部属性及方法。

对象就像一面镜子,透过镜子看到类的结构——反射。

正常方式:引入需要的“包类”名称 → new实例化 → 取得实例化对象
反射方式:实例化对象 → getClass()方法 → 得到完整的“包类”名称

为什么可以这样?

一个类被加载后,类的整个结构信息都会被封装在一个Class类型的对象中(一个类在内存中只有一个Class对象)。

实例

public class Test {public static void main(String[] args) throws ClassNotFoundException {Class c1 = Class.forName("com.pojo.User");}
}//实体类:pojo/entity
class User {...}

Class类

  • Class 本身是一个类
  • Class 对象只能由系统建立
  • 一个加载的类在 JVM 中只会有一个Class对象
  • 一个Class对象对应的是一个加载到JVM中的一个.class文件
  • 每个类的实例都会记得自己是由哪个Class实例所生成的
  • 通过 Class 可以完整地得到一个类中的所有被加载的结构
  • Class类是Reflection的根源,针对任何你想动态加载、运行的类,唯有先获得相应的Class 对象
//Person person = new Person();
Class c1 = person.getClass();
Class c2 = Class.forName("Person");
Class c3 = Person.class;Class c4 = Integer.TYPE;//获得父类类型
Class c5 = c1.getSuperclass();
System.out.println(c5);

哪些类型有Class对象

  • class(外部类、成员(成员内部类、静态内部类)、局部内部类、匿名内部类)
  • interface(接口)
  • [](数组)
  • enum(枚举)
  • annotation(注解)
  • 基本数据类型
  • void
Class objectClass = Object.class; //类
Class comparableClass = Comparable.class; //接口
Class aClass = String[].class; //一维数组
Class aClass1 = int[][].class; //二维数组
Class overrideClass = Override.class; //注解
Class elementTypeClass = ElementType.class; //枚举
Class integerClass = Integer.class; //基本数据类型
Class voidClass = void.class; //void
Class classClass = Class.class; //Class
c1.getName(); //获得包名+类名
c1.getSimpleName(); //获得类名
//获得类的属性
Field[] fields = c1.getFields(); //只能找到public属性
Field[] declaredFields = c1.getDeclaredFields(); //找到全部的属性Field field = c1.getField("id");
Field name = c1.getDeclaredField("name");//获得类的方法
Method[] methods = c1.getMethods(); //获得本类及其父类的全部public
Method[] declaredMethods = c1.getDeclaredMethods(); //获得本类的所有方法//因为有重载,所以需要指定参数类型
Method getId = c1.getMethod("getId", null);
Method setId = c1.getMethod("setId", String.class);//获得指定的构造器
c1.getConstructors();

相关文章:

反射(一)

动态 VS 静态语言 动态语言:运行时,可以改变其结构。 Object-C、C#、JS、PHP、Python JS 就是动态语言。 function f() {var x "var a3; var b5; alert(ab)";eval(x); }静态语言:运行时,结构不可变。 Java、C、C J…...

29.利用fminbnd 求解 最大容积问题(matlab程序)

1.简述 用于求某个给定函数的最小值点。 使用方法是: xfminbnd(func,x1,x2) func是函数句柄,然后x1和x2就是函数的区间,得到的结果就是使func取最小值的x值 当然也可以使用[x,fv]fminbnd(func,x1,x2)的方式,这个时候fv就是函数…...

express学习笔记7 - docker跟mysql篇

安装Docker和Navicat Docker 进官⽹https://docs.docker.com/get-docker/ 选择机型安装即可。 Navicat(也可以在网上找个破解版本) 进官⽹https://www.navicat.com/en/products/navicat-premium 安装完之后连接新建⼀个数据库连接 然后再⾥⾯新建⼀个数…...

Leetcode(一):数组、链表部分经典题目详解(JavaScript版)

数组、链表部分算法题 一、数组1. 二分查找2. 移除数组元素3. 有序数组的平方4. 长度最小的子数组5. 螺旋矩阵 二、链表1. 删除链表元素2. 设计链表3.反转链表4.两两交换链表中的节点5.删除链表倒数第n个节点6.环形链表 提前声明:本博客内容均为笔者为了方便个人理解…...

内网穿透的底层原理是什么

目录 内网穿透的功能 内网穿透的底层原理 内网穿透的功能 前段时间研究了一下内网穿透,果真是一个神奇的技术,就拿企业级内网穿透-神卓互联来说,在需要在本地安装一个神卓互联客户端,简单设置一下服务应用的端口号,就…...

Bash配置文件

当Bash以登录Shell启动的时候,会首先读取并执行文件“/etc/profile”中的命令。 接着,Bash会依次查找文件“~/.bash_profile”,“~/.bash_login”,“~/.profile”,读取并执行找到的第一个文件中的命令。也就是说&…...

写Acknowledgement的时候,latex日志出现警告

用latex写论文的时候,\section{Conclusion}下面添加 \backmatter \bmhead{Acknowledgments}时报错:错误log: \bmhead Package hyperref Warning: Difference (4) between bookmark levels is greater than one, level....错误原因&#xff…...

GCC生成map文件

要生成GCC的map文件&#xff0c;可以使用以下指令&#xff1a; gcc <source_files> -Wl,-Map<output_file>.map 其中&#xff0c; <source_files>是要编译的源文件列表&#xff0c;<output_file>是生成的map文件的名称-Wl选项告诉GCC将后面的参数传…...

IOS看书最终选择|源阅读转换|开源阅读|IOS自签

环境&#xff1a;IOS想使用 换源阅读 问题&#xff1a;换新手机&#xff0c;源阅读下架后&#xff0c;没有好的APP阅读小说 解决办法&#xff1a;自签APP 转换源仓库书源 最终预览 &#xff1a;https://rc.real9.cn/ 背景&#xff1a;自从我换了新iPhone手机&#xff0c;就无法…...

easyui实用点

easyui实用点 1.下拉框&#xff08;input框只能选不能手动输入编辑&#xff09; data-options"editable:false"//不可编辑2.日期框&#xff0c;下拉框&#xff0c;文本框等class class"easyui-datebox"//不带时分秒 class"easyui-datetimebox"…...

算法训练营第五十六天||● 583. 两个字符串的删除操作 ● 72. 编辑距离 ● 编辑距离总结篇

● 583. 两个字符串的删除操作 这道题涉及到两个字符串删除操作&#xff0c;注意递推公式&#xff0c;理解不到位&#xff0c;需要再次做 确定dp数组&#xff08;dp table&#xff09;以及下标的含义 dp[i][j]&#xff1a;以i-1为结尾的字符串word1&#xff0c;和以j-1位结尾…...

C语言每日一题:10.不使用+-*/实现加法+找到所有数组中消失的数。

题目一&#xff1a; 题目链接&#xff1a; 思路一&#xff1a; 1.两个数二进制之间进行异或如果不产生进位操作那么两个数的和就是就是两个数进行异或的结果。 举例&#xff1a;5&#xff08;0101&#xff09;2&#xff08;0010&#xff09;进行异或等于&#xff1a;7&#xf…...

LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443

1、问题&#xff1a; https://github.com/CocoaPods/Specs.git/&#xff1a;LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443的解决办法 出现这个问题的原因基本都是代理的问题&#xff1a; 只需要加上代理就可以了&#xff1a; #http代理 git conf…...

JS数组的详解与使用

什么是数组&#xff1f; 数组是一种有序的集合&#xff0c;有长度和索引&#xff0c;以及身上有许多的API方法 面试题&#xff1a;数组和伪数组的区别&#xff1a;数组和伪数组都有长度和索引&#xff0c;区别是数组身上有许多的API方法 而伪数组身上不存在这些API方法创建数组…...

c++ / python / java / PHP / SQL / Ruby / Objective-C / JavaScript 发展史

c发展史 C是由丹尼斯里奇和肯汤普森在1970年代早期开发的C语言的扩展。C最初被称为“C with Classes”&#xff0c;是在1980年代初期由比雅尼斯特劳斯特鲁普开发的。 1983年&#xff0c;斯特劳斯特鲁普将C with Classes重新命名为C。在1985年&#xff0c;C编译器的第一个版本被…...

Linux第一个小程序-进度条(缓冲区概念)

1.\r和\n C语言中有很多字符 a.可显字符 b.控制字符 对于回车其实有两个动作&#xff0c;首先换行&#xff0c;在将光标指向最左侧 \r &#xff1a;回车 \n&#xff1a;换行 下面举个例子&#xff1a; 把\n去掉会怎样 什么都没输出。为什么&#xff1f; 2.缓冲区概念 观察下两个…...

CentOS7环境安装tomcat

环境准备 由于是在练习&#xff0c;为了方便&#xff0c;我们可以 1.关闭防火墙 systemctl disable firewalld.service systemctl stop firewalld.service 2.关闭selinux 在/etc/selinux/config中&#xff0c;设置&#xff1a; SELINUXdisabled 3.准备jdk---》jdk-8u333-li…...

C# 中使用ValueTask优化异步方法

概要 我们在开发过程中&#xff0c;经常使用async的异步方法&#xff0c;但是有些时候&#xff0c;异步的方法中&#xff0c;可能包含一些同步的处理。本文主要介绍通过ValueTask这个struct&#xff0c;优化异步处理的方法性能。 代码及实现 有些时候我们会缓存一些数据在内…...

KVM创建新的虚拟机(图形化)

1.启动kvm管理器 [rootlocalhost ~]# virt-manager2.点击创建虚拟机 3.选择所需os安装镜像 4.选择合适的内存大小和CPU 5.创建所需磁盘 6.命名创建的虚拟机...

正则表达式在格式校验中的应用以及包装类的重要性

文章目录 正则表达式&#xff1a;做格式校验包装类&#xff1a;在基本数据类型与引用数据类型间的桥梁总结 在现代IT技术岗位的面试中&#xff0c;掌握正则表达式的应用以及理解包装类的重要性是非常有益的。这篇博客将围绕这两个主题展开&#xff0c;帮助读者更好地面对面试挑…...

无代码自动化:OpenClaw+Qwen3.5-9B可视化流程搭建

无代码自动化&#xff1a;OpenClawQwen3.5-9B可视化流程搭建 1. 为什么选择OpenClawQwen3.5-9B组合 去年夏天&#xff0c;我发现自己每周要花3小时重复做三件事&#xff1a;整理会议录音、提取待办事项、设置日历提醒。当我尝试用传统自动化工具时&#xff0c;要么需要写代码…...

Qwen3.5-2B边缘部署教程:ARM架构服务器上运行多模态模型详细步骤

Qwen3.5-2B边缘部署教程&#xff1a;ARM架构服务器上运行多模态模型详细步骤 1. 引言 Qwen3.5-2B是阿里云推出的轻量化多模态基础模型&#xff0c;属于Qwen3.5系列的小参数版本&#xff08;20亿参数&#xff09;。这款模型主打低功耗、低门槛部署&#xff0c;特别适配端侧和边…...

AI学习路线及建议

1.python快速入门&#xff08;边用边学&#xff0c;建议3天&#xff09; 2.人工智能必备数学的基础&#xff08;边用边学&#xff0c;建议3天&#xff09; 3.机器学习&#xff08;找工作面试考点&#xff0c;临面试前晚一点刷&#xff09; 数据分析&#xff1a;短期找工作 ML/D…...

Cursor Pro完整解锁方案:一站式解决AI编程助手使用限制的终极指南

Cursor Pro完整解锁方案&#xff1a;一站式解决AI编程助手使用限制的终极指南 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reach…...

基于比迪丽模型的Transformer架构优化:提升图像生成质量

基于比迪丽模型的Transformer架构优化&#xff1a;提升图像生成质量 在图像生成领域&#xff0c;比迪丽模型凭借其出色的生成效果和稳定性赢得了广泛关注。但很多用户可能不知道&#xff0c;通过合理的Transformer架构优化&#xff0c;这个模型的图像生成质量还能再上一个台阶…...

SpringBoot集成TTL实现Feign与线程池的TraceId无缝传递(实战优化版)

1. 问题背景与核心挑战 在分布式系统中&#xff0c;日志链路追踪是排查问题的关键手段。想象一下这样的场景&#xff1a;用户请求从网关进入&#xff0c;经过多个微服务处理&#xff0c;每个服务又可能调用其他服务或使用线程池异步处理。当出现问题时&#xff0c;如何快速定位…...

经典35kW V型磁钢永磁同步电机设计:基于Maxwell的成熟方案解析

基于Maxwell设计的 经典35kW&#xff0c;外径290 轴向长度88 3000RPM&#xff0c;111.5Nm, 6极36槽永磁同步电机&#xff08;PMSM&#xff09;设计案例(V型磁钢)&#xff0c;该案例已制作样机&#xff0c;方案成熟&#xff0c;运行稳定&#xff0c;可直接用于生产&#xff0c…...

cool-admin(midway版)前端表单验证:AsyncValidator与异步校验完整指南

cool-admin(midway版)前端表单验证&#xff1a;AsyncValidator与异步校验完整指南 【免费下载链接】cool-admin-midway &#x1f525; cool-admin(midway版)一个很酷的后台权限管理框架&#xff0c;模块化、插件化、CRUD极速开发&#xff0c;永久开源免费&#xff0c;基于midwa…...

Hackintool:面向黑苹果爱好者的硬件配置诊断与优化工具

Hackintool&#xff1a;面向黑苹果爱好者的硬件配置诊断与优化工具 【免费下载链接】Hackintool The Swiss army knife of vanilla Hackintoshing 项目地址: https://gitcode.com/gh_mirrors/ha/Hackintool 黑苹果配置过程中&#xff0c;硬件兼容性问题常常成为用户最头…...

4步精通开源SMU调试工具:AMD Ryzen处理器深度配置与性能调优全攻略

4步精通开源SMU调试工具&#xff1a;AMD Ryzen处理器深度配置与性能调优全攻略 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址…...