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

基础型网站套餐/高级seo优化招聘

基础型网站套餐,高级seo优化招聘,网络棋牌游戏,网站建设后台管理流程1. Java的反射机制是什么? 反射(reflection) 当我们谈及反射,可以将其比作正在照镜子的行为。就像你可以在禁止中看到自己的反射一样,程序在运行时可以检查自身的机构和行为。这意味这程序可以动态地了解自己地组成部分,比如类、…

1. Java的反射机制是什么?

  • 反射(reflection)
    当我们谈及反射,可以将其比作正在照镜子的行为。就像你可以在禁止中看到自己的反射一样,程序在运行时可以检查自身的机构和行为。这意味这程序可以动态地了解自己地组成部分,比如类、方法和字段,并且可以在运行时修改这些组成部分。这种能力使得程序可以更加灵活和动态地适应不同的需求和情况。
    从概念上理解,反射是一种程序在运行时可以检查和修改自身结构的能力。
  • Java反射机制的主要特点和用法
    1. 获取Class对象:通过类的全限定名、对象的 getClass() 方法或 Class 类的静态方法获取类的 Class 对象。
    2. 实例化对象:可以使用 Class 对象的 newInstance() 方法来实例化一个类的对象。在 Java 9 中,newInstance() 方法已经被标记为废弃(deprecated),推荐使用其他方式来实例化对象。
    3. 获取字段信息:可以使用 Class 对象的 getFields()、getDeclaredFields() 方法获取类的公共和所有字段信息,并使用 Field 对象来访问和修改字段的值。
    4. 获取方法信息:可以使用 Class 对象的 getMethods()、getDeclaredMethods() 方法获取类的公共和所有方法信息,并使用 Method 对象来调用方法。
    5. 调用方法:可以使用 Method 对象的 invoke() 方法来调用一个方法。
    6. 访问私有成员:通过 setAccessible(true) 方法可以访问类的私有成员。
    7. 泛型操作:可以通过 Class 对象获取类的泛型信息。
    8. 动态代理:反射机制可以用于实现动态代理,可以在运行时动态地创建代理类并处理方法调用。
    9. 性能问题:反射操作会带来一定的性能开销,应该谨慎使用,尽量避免在性能敏感的代码中过度使用反射。

2. 反射的核心:Class类

看看JAVA源码中Class类中的注解

Instances of the class Class represent classes and interfaces in a running Java application. An enum type and a record type are kinds of class; an annotation type is a kind of interface. Every array also belongs to a class that is reflected as a Class object that is shared by all arrays with the same element type and number of dimensions.
类 Class 的实例表示运行中的 Java 应用程序中的类和接口。枚举类型和记录类型是类的一种;注解类型是接口的一种。每个数组也属于一个类,该类被反映为一个 Class 对象,该对象由具有相同元素类型和维数的所有数组共享。
The primitive Java types (boolean, byte, char, short, int, long, float, and double), and the keyword void are also represented as Class objects.
原始 Java 类型(boolean、byte、char、short、int、long、float 和 double)以及关键字 void 也表示为 Class 对象。
Class has no public constructor. Instead a Class object is constructed automatically by the Java Virtual Machine when a class loader invokes one of the defineClass methods and passes the bytes of a class file.
Class 没有公共构造函数。相反,当类加载器调用 defineClass 方法之一并传递类文件的字节时,Java 虚拟机会自动构造一个 Class 对象。
The methods of class Class expose many characteristics of a class or interface. Most characteristics are derived from the class file that the class loader passed to the Java Virtual Machine. A few characteristics are determined by the class loading environment at run time, such as the module returned by getModule().
Class 类的方法公开了类或接口的许多特征。大多数特征都源自类加载器传递给 Java 虚拟机的类文件。一些特征由运行时的类加载环境决定,例如由 getModule() 返回的模块。
Some methods of class Class expose whether the declaration of a class or interface in Java source code was enclosed within another declaration. Other methods describe how a class or interface is situated in a nest. A nest is a set of classes and interfaces, in the same run-time package, that allow mutual access to their private members. The classes and interfaces are known as nestmates. One nestmate acts as the nest host, and enumerates the other nestmates which belong to the nest; each of them in turn records it as the nest host. The classes and interfaces which belong to a nest, including its host, are determined when class files are generated, for example, a Java compiler will typically record a top-level class as the host of a nest where the other members are the classes and interfaces whose declarations are enclosed within the top-level class declaration.
Class 类的一些方法公开了在 Java 源代码中类或接口的声明是否被包含在另一个声明中。其他方法描述了类或接口如何位于一个嵌套中。嵌套是一个类和接口的集合,在相同的运行时包中,允许彼此访问其私有成员。这些类和接口被称为嵌套成员。一个嵌套成员充当嵌套主机,并枚举属于嵌套的其他嵌套成员;每个嵌套成员依次将其记录为嵌套主机。属于嵌套的类和接口,包括其主机,在生成类文件时确定,例如,Java 编译器通常会将顶级类记录为嵌套的主机,其中其他成员是声明被包含在顶级类声明内部的类和接口。

总结一下上面内容:

  1. Class类的作用:表示运行中的Java引用程序的类和接口,通过Class对象可以获取和操作类的信息。

  2. Class对象的获取:可以通过类的全限定名(类似字符串形式)获取对应的Class对象,也可以通过类的实例对象‘getClass’方法获取。

  3. Class对象的构造:Class类没有公共构造函数,而是由虚拟机在需要时自动构造。

  4. Class对象的特征:Class对象的方法可以获取类或接口的特征,这些特征大部分来自于类加载器加载类文件时传递给虚拟机的信息。换句话说,类加载器在加载类文件时会提供一些关于类的信息,这些信息包括类的结构、方法、字段等,而这些信息可以通过class对象的方法获取。

  5. Class对象和嵌套:Class对象的一些方法可以用来描述类或接口在嵌套中的情况,嵌套是一组允许互相访问私有成员的类和接口的集合。

    在Java中,嵌套是指一组类和接口,它们在同一个运行时包(runtime package)中,并且允许彼此访问私有成员(private members)。这些类和接口被称为嵌套成员(nest members),其中一个嵌套成员充当嵌套主机(nest host),并且枚举了属于该嵌套的其他嵌套成员。通过Class对象的方法,我们可以了解类或接口在嵌套中的位置和关系,以及它们之间如何互相访问私有成员。

    举个例子:
    当一个类A中包含了另一个类B,而类B又包含了类C,这种情况就构成了嵌套结构。在这个例子中,类A就是嵌套结构的主要部分,而类B和类C是嵌套在类A中的成员。

    public class A {private class B {private class C {public void methodC() {System.out.println("This is methodC");}}}
    }
    

    在这个例子中,类A包含了类B,类B包含了类C。现在我们可以使用反射来探索这个嵌套结构:

    	public class Main {public static void main(String[] args) throws Exception {Class<?> classA = A.class;Class<?> classB = A.B.class;Class<?> classC = A.B.C.class;System.out.println("Class A: " + classA.getName());System.out.println("Class B: " + classB.getName());System.out.println("Class C: " + classC.getName());// 获取类B中的所有成员类(嵌套成员)Class<?>[] nestMembersOfB = classB.getNestMembers();System.out.println("Nest members of B:");for (Class<?> member : nestMembersOfB) {System.out.println("- " + member.getName());}// 获取类C的嵌套主机(即类B)Class<?> nestHostOfC = classC.getNestHost();System.out.println("Nest host of C: " + nestHostOfC.getName());}
    }
    

3. 整理一下问题

  • 我们可以通过Class类做什么?
    Class类主要作用是允许程序在运行时获取类信息,并通过反射机制实例化对象、访问和修改类的字段、调用类的方法等。

  • 我们要怎么获取Class类的对象?
    使用.class语法;
    调用对象的getClass()方法;
    使用Class.forName()方法。

  • 怎么修改一个字段值?

    import java.lang.reflect.Field;public class Main {public static void main(String[] args) throws Exception {MyClass myObject = new MyClass("Hello, world!");System.out.println("Before modification: " + myObject.getMyField());Field field = MyClass.class.getDeclaredField("myField");field.setAccessible(true); // 设置字段为可访问,因为 myField 是私有字段field.set(myObject, "Modified value");System.out.println("After modification: " + myObject.getMyField());}
    } 
    

    这段代码通过getDeclaredField()获取了私有字段 myField 的 Field 对象,并通过 setAccessible(true) 方法设置了字段的可访问性,因为 myField 是私有字段。最后,我们使用 field.set(myObject, “Modified value”) 将 myField 的值修改为 “Modified value”。

  • Class类的常用方法?

    • getName():获取类的名称。
    • getModifiers():获取类的修饰符。
    • getSuperclass():获取类的父类。
    • getInterfaces():获取类实现的接口数组。
    • getField(String name):获取指定名称的公共字段。
    • getMethod(String name, Class<?>… - parameterTypes):获取指定名称和参数类型的公共方法。
    • newInstance():通过无参构造方法实例化一个对象(已过时)。
  • 怎么通过反射调用方法?
    使用 Method 对象的 invoke() 方法来调用一个方法。

  • 反射机制用在动态代理?
    动态代理是一种利用反射机制在运行时创建代理类的技术。在 Java 中,可以使用 java.lang.reflect.Proxy 类来创建动态代理。动态代理通常用于在不修改源代码的情况下对方法调用进行额外的处理,比如添加日志、性能监控、事务管理等。
    下面是一个简单的示例,展示了如何使用动态代理:

    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;// 定义一个接口
    interface MyInterface {void myMethod();
    }// 实现接口的类
    class MyClass implements MyInterface {public void myMethod() {System.out.println("Real object method");}
    }// 实现 InvocationHandler 接口,用于处理方法调用
    class MyInvocationHandler implements InvocationHandler {private Object target;public MyInvocationHandler(Object target) {this.target = target;}public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println("Before method call");Object result = method.invoke(target, args);System.out.println("After method call");return result;}
    }public class Main {public static void main(String[] args) {MyClass realObject = new MyClass();MyInterface proxyObject = (MyInterface) Proxy.newProxyInstance(realObject.getClass().getClassLoader(),realObject.getClass().getInterfaces(),new MyInvocationHandler(realObject));proxyObject.myMethod();}
    }

    在这个示例中,我们定义了一个接口 MyInterface 和一个实现类 MyClass。然后,我们使用 Proxy.newProxyInstance() 方法创建了一个动态代理对象 proxyObject,并通过 MyInvocationHandler 来处理方法调用。在 MyInvocationHandler 中,我们在调用实际方法前后添加了额外的逻辑。最后,我们通过动态代理对象调用方法,实际上会调用到 MyInvocationHandler 中的 invoke 方法,从而实现了对方法调用的动态处理。

  • 注意事项?

    • 反射操作影响性能,谨慎使用
    • newInstance() 方法在 Java 9 中被标记为废弃(deprecated),建议使用其他方式来实例化对象,比如通过获取构造方法并调用构造方法来实现。

相关文章:

JAVA基础—关于Java的反射机制

1. Java的反射机制是什么&#xff1f; 反射(reflection) 当我们谈及反射&#xff0c;可以将其比作正在照镜子的行为。就像你可以在禁止中看到自己的反射一样&#xff0c;程序在运行时可以检查自身的机构和行为。这意味这程序可以动态地了解自己地组成部分&#xff0c;比如类、…...

Hive中的explode函数、posexplode函数与later view函数

1.概述 在离线数仓处理通过HQL业务数据时&#xff0c;经常会遇到行转列或者列转行之类的操作&#xff0c;就像concat_ws之类的函数被广泛使用&#xff0c;今天这个也是经常要使用的拓展方法。 2.explode函数 2.1 函数语法 -- explode(a) - separates the elements of array …...

北京市委统战部领导一行莅临百望云视察调研

“当今时代&#xff0c;数字技术、数字经济是世界科技革命和产业变革的先机&#xff0c;是新一轮国际竞争重点领域”。 为了解数字标杆企业的发展现状&#xff0c;促进新质生产力与实体产业的协同与赋能&#xff0c;近日&#xff0c;北京市委统战部非公经济处处长王雷、副处长徐…...

使用Python进行数据库连接与操作SQLite和MySQL【第144篇—SQLite和MySQL】

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 使用Python进行数据库连接与操作&#xff1a;SQLite和MySQL 在现代应用程序开发中&#xf…...

How to manage Python environment based on virtualenv in Ubuntu 22.04

How to manage Python environment based on virtualenv in Ubuntu 安装使用创建环境激活环境安装软件包退出环境移除环境 安装 pip3 install virtualenv使用 创建环境 lwkqwfys:~$ mkdir ~/project/harbin lwkqwfys:~$ cd ~/project/harbin lwkqwfys:~/project/harbin$ vir…...

一款基于 SpringCloud 开发的AI聊天机器人系统,已对接GPT-4.0,非常强大

简介 一个基于SpringCloud的Chatgpt机器人&#xff0c;已对接GPT-3.5、GPT-4.0、百度文心一言、stable diffusion AI绘图、Midjourney绘图。用户可以在界面上与聊天机器人进行对话&#xff0c;聊天机器人会根据用户的输入自动生成回复。同时也支持画图&#xff0c;用户输入文本…...

C语言自定义库

编写 xx.c 和xx.h文件\将源代码编译为目标文件 gcc -c add.c sub.c 执行完毕后会生产add.o和sub.o文件静态库创建使用ar命令&#xff1b; ar -r libmymath.a add.o sub.o将库和main.c文件一起编译 gcc -o main main.c -lmymath -L./ 注意 上述书写格式不要错乱 -L 是指定文件路…...

目标检测常见数据集格式(YOLO、VOC、COCO)

目录 1.YOLO格式数据 1.1数据格式 1.2YOLO格式数据示例 1.3YOLO格式可视化 2.COCO数据格式 2.1数据格式 2.2COCO格式数据示例 2.3COCO格式可视化 3.VOC数据格式 3.1数据格式 3.2VOC格式数据示例 3.3COCO格式可视化 &#x1f353;&#x1f353;1.YOLO格式数据 &…...

搭建 es 集群

一、VMware准备机器 首先准备三台机器 这里我直接使用 VMware 构建三个虚拟机 都是基于 CentOS7 然后创建新用户 部署 es 需要单独创建一个用户&#xff0c;我这里在构建虚拟机的时候直接创建好了 然后将安装包上传 可以使用 rz 命令上传&#xff0c;也可以使用工具上传 工…...

Android弹出通知

发现把Android通知渠道的重要性设置为最高时&#xff0c;当发送通知时&#xff0c;通知能直接弹出来显示&#xff0c;以前一直搞不明白为什么别的app的通知可以弹出来&#xff0c;我的不行&#xff0c;搞了半天原来是这个属性在作怪&#xff0c;示例如下&#xff1a; class Ma…...

如何用 UDP 实现可靠传输?并以LabVIEW为例进行说明

UDP&#xff08;用户数据报协议&#xff09;本身是一个无连接的、不可靠的传输协议&#xff0c;它不提供数据包的到达确认、排序保证或重传机制。因此&#xff0c;如果要在UDP上实现可靠传输&#xff0c;就需要在应用层引入额外的机制。以下是一些常见的方法&#xff1a; 确认和…...

【任职资格】某大型商业金融银行任职资格体系搭建项目纪实

【客户背景】某大型商业金融银行位于南方某省&#xff0c;成立于上个世纪九十年代&#xff0c;是一家具有独立法人资格的股份制商业银行&#xff0c;经过多年发展&#xff0c;下辖20多家分行&#xff0c;近200多个营业网点&#xff0c;并于21世纪初成功上市&#xff0c;规模不断…...

如何利用IP地址分析风险和保障网络安全

随着网络攻击的不断增加和演变&#xff0c;保障网络安全已经成为了企业和组织不可忽视的重要任务。在这样的背景下&#xff0c;利用IP地址分析风险和建立IP风险画像标签成为了一种有效的手段。本文将深入探讨IP风险画像标签的作用以及如何利用它来保障网络安全。 IP风险画像查…...

轧钢自动化中的智能仪器:监控、控制和优化新视角

摘要&#xff1a;轧钢自动化是现在及未来的发展趋势&#xff0c;而自动化的轧钢发展&#xff0c;更是离不开形形色色的智能仪器&#xff0c;本文来看看那些应用于轧钢生产中的测量仪。 关键词&#xff1a;智能仪器,在线测量仪,测径仪,测宽仪,测厚仪,测长仪,工业数据分析采集软件…...

第十四届蓝桥杯省赛C++B组题解

考点 暴力枚举&#xff0c;搜索&#xff0c;数学&#xff0c;二分&#xff0c;前缀和&#xff0c;简单DP&#xff0c;优先队列&#xff0c;链表&#xff0c;LCA&#xff0c;树上差分 A 日期统计 暴力枚举&#xff1a; #include<bits/stdc.h> using namespace std; int …...

语音控制模块_雷龙发展

一 硬件原理 1&#xff0c;串口 uart串口控制模式&#xff0c;即异步传送收发器&#xff0c;通过其完成语音控制。 发送uart将来自cpu等控制设备的并行数据转换为串行形式&#xff0c;并将其串行发送到接收uart&#xff0c;接收uart然后将串行数据转换为接收数据接收设备的并行…...

idea 开发serlvet班级通讯录管理系统idea开发mysql数据库web结构计算机java编程layUI框架开发

一、源码特点 idea开发 java servlet 班级通讯录管理系统是一套完善的web设计系统mysql数据库 系统采用serlvetdaobean mvc 模式开发&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 servlet 班…...

Python高级语法

Python高级语 1 列表推导式1.1 什么是列表推导式1.2 列表推导式的使用 2 字典推导式2.1 什么是字典推导式2.2 字典推导式的使用 3 元组推导式4 集合推导式5 三元表达式5.1 什么是三元表达式5.2 三元表达式的使用 1 列表推导式 1.1 什么是列表推导式 列表推导式的英文&#xf…...

HTML5语义化元素

在HTML5之前&#xff0c;网站的分布层级有哪些呢&#xff1f; nav&#xff0c;header&#xff0c;main&#xff0c;footer 这样做有一个弊端 我们往往过多的使用div&#xff0c;通过ID或class来区分元素 对于浏览器来说这些元素不够语义化 对于我来说搜索引擎来说&#xff0c;不…...

Android 性能优化——APP启动优化

一、APP启动流程 首先在《Android系统和APP启动流程》中我们介绍了 APP 的启动流程&#xff0c;但都是 FW 层的流程&#xff0c;这里我们主要分析一下在 APP 中的启动流程。要了解 APP 层的启动流程&#xff0c;首先要了解 APP 启动的分类。 1、启动分类 冷启动 应用从头开始…...

计算机网络:TCP篇

计网tcp部分面试总结 tcp报文格式&#xff1a; 序列号&#xff1a;通过SYN传给接收端&#xff0c;当SYN为1&#xff0c;表示请求建立连接&#xff0c;且设置序列号初值&#xff0c;后面没法送一次数据&#xff0c;就累加数据大小&#xff0c;保证包有序。 确认应答号&#x…...

【NLP11-迁移学习】

1、了解迁移学习中的有关概念 1.1、预训练模型&#xff08;pretrained model) 一般情况下预训练模型都是大型模型&#xff0c;具备复杂的网络结构&#xff0c;众多的参数量&#xff0c;以及在足够大的数据集下进行训练而产生的模型。在NLP领域&#xff0c;预训练模型往往是语…...

Android11 FallbackHome启动和关闭流程分析

Android 7.0引入了新特性&#xff1a;Direct Boot Mode&#xff0c;设备启动后进入的一个新模式&#xff0c;直到用户解锁&#xff08;unlock&#xff09;设备此阶段结束。在这个模式下&#xff0c;系统调用 resolveHomeActivity 找到的是FallbackHome &#xff0c;而不是我们的…...

elasticsearch-java api 8 升级

es client api 升级 背景 公司项目从sring-boot2 升级到了spring-boot3 &#xff0c;es的服务端也跟着升级到了es8 &#xff0c;而es的客户端7和服务端8 是不兼容的&#xff0c; 客户端es 7使用的是&#xff1a; elasticsearch-rest-high-level-client es 8 升级到&#xf…...

HCIA_IP路由基础问题?

目录 1. 什么是路由&#xff1f;2. 什么是路由器&#xff1f;3. 什么是路由信息&#xff1f;4. 路由器信息和路由表的区别&#xff1f;5. 路由表的生成方式&#xff1f;6.直连路由生效条件是什么&#xff1f;7.Inloopback0是什么接口&#xff1f;8.最优路由选择的原则&#xff…...

(黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

&#xff08;黑马出品_高级篇_01&#xff09;SpringCloudRabbitMQDockerRedis搜索分布式 微服务技术——保护 今日目标1.初识Sentinel1.1.雪崩问题及解决方案1.2.服务保护技术对比1.3.Sentinel介绍和安装1.3.1.初识Sentinel1.3.2.安装Sentinel 1.…...

高架学习笔记之信息系统分类概览

目录 零、前言 一、业务处理系统(TPS) 概念 功能 特点 二、管理信息系统(MIS) 概念 功能 组成 三、决策支持系统(DSS) 概念 功能 特点 组成 1. 数据仓库 2. 数据挖掘工具 3. 决策模型 4. 可视化界面 四、专家系统(ES) 概念 特点 组成 求解过程 专家系统…...

2023新版mapinfo美化电子地图 新版2013Arcgis shp电子地图 下载

2023新版MapInfo和电子地图美化&#xff0c;以及2013版ArcGIS的SHP电子地图设计&#xff0c;是地理信息系统&#xff08;GIS&#xff09;领域中的两个重要话题。下面将分别对这两个主题进行描述。 样图&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1WB4AGsycyBGagVq5…...

BUUCTF-Ezsql1

1.打开靶机 打开第一个链接 2.万能密码 使用万能密码&#xff1a;a or 1 # 密码为随意 第二个用kali打开 3.ssh连接靶机 ssh ctf284490d0-7600-4c65-9160-5ced02f45633.node5.buuoj.cn -p 28191 由题可知密码为123456 4.找到并修改index.php文件 找到index.php文件 #内容如…...

LiveGBS流媒体平台GB/T28181功能-大屏播放上大屏支持轮巡播放分屏轮巡值守播放监控视频轮播大屏轮询播放轮播

LiveGBS支持-大屏播放上大屏支持轮巡播放分屏轮巡值守播放监控视频轮播大屏轮询播放轮播 1、轮播功能2、分屏展示3、选择轮播通道4、配置轮播间隔(秒)5、点击开始轮播6、轮播停止及全屏7、搭建GB28181视频直播平台 1、轮播功能 视频监控项目使用过程中&#xff0c;有时需要大屏…...