注解&反射学习笔记

2023-11-16

1、注解的作用域及使用方式

//表示我们的注解可以使用在那些地方
@Target(value={ElementType.METHOD,ElementType.TYPE})
//表示注解在什么地方有效。  RESOUT 源码 < CLASS 类 < RUNTIME运行时
@Retention(value=RetentionPolicy.RUNTIME)
@Documented //表示是否将我们的注解生成在JAVAdoc中
@Inherited //子类可以继承父类的注解
public @interface MyAnnotation{
    String name() default "yog"; //如果不设置默认值,使用时必须添加参数.
    String[] school() default {"清华","厦大"};
}
​
eg: 
//@MyAnnotation(name="yog") 当自定义的注解没有设置默认值时的使用方式。
@MyAnnotation
public class test{
    @MyAnnotation   
    public void testMenthod(){}
}

反射学习笔记

学前掌握

1、动态语言:是一类运行时可以改变结构的语言,如函数、对象(js、Object-C、C##)

function f(){
    var x = "var a=2; b=3; alert(a+b);"
    evel(x) // 以代码形式执行x
}

2、静态语言:与动态语言相反。 java、 C

3、反射相关的API

* java.lang.Class 代表一个类(对象)
* java.lang.reflect.Menthod 代表类的方法
* java.lang.reflect.Field 代表类的成员变量
* java.lang.reflect.Constructor 代表类的构造器

1、概念

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

Class c = Class.forName("java.lang.String")

2、加载完类之后,在对内存的方法区中就产生了一个Class类型的对象(一个类只有一个对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。这个对象就像一个镜子,透过镜子可以看到这个类的结构,所以称为反射:

  • 正常方式: 引入需要的包类名称 --> 通过new实例化 --> 取得实例化对象

  • 反射方式:实例化对象 --> getClass()方法 -->取得完整的包类名称

2、实际操作

public class Test{
    //通过反射获取类的Class对象
    Class user1 = Class.forName("com.yog.User");
    Class user2 = Class.forName("com.yog.User");
    user1.setName("yog");
    user1.getName();
    user2.setName("yog");
    user2.getName();
  /**
   * 知识点:
   * 1、因为一个类在内存中只有一个Class对象 
   * 2、一个类被加载后,类的整个结构都会被封装在Class对象中。
   */
  // user1 == user2 结果为:true  
}
class User{
    public String name;
    public int age;
    ...get
    ...set
    ...toString()
}
​
​

3、类初始化

  • 主动调用 new XXclass();会触发父类的初始化。

  • 通过反射被动加载,也会触发父类的初始化。

  • 静态方法调用,不会触发父类的初始化。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

注解&反射学习笔记 的相关文章

  • Java Arraylist of object 按日期从数组列表中删除元素

    这是我的数组列表 ArrayList
  • JPA 实体中的方法是否允许抛出异常?

    我尝试创建的 Entity 有问题 当尝试使用 OpenJPA 实现在 Eclipse 中测试类时出现问题 我有not尝试过其他人 所以不确定它是否适用于他们 我的测试用例非常简单 因为它创建一个 EntityManagerFactory
  • Windows 上的虚假唤醒。是否可以?

    我最近学习了 虚假唤醒 有人说这个问题只可能发生在某些类型的 Linux PC 上 我用的是窗户 我为虚假唤醒编写了测试 我得到的结果是这是可能的 但我想向您展示这个测试 也许我在某个地方犯了错误 我的初始变体 import java ut
  • Android 上的 setTimeOut() 相当于什么?

    我需要等效的代码setTimeOut call function milliseconds 对于安卓 setTimeOut call function milliseconds 您可能想查看定时任务 http developer andro
  • 如何检测线程是否被IO阻塞?

    在Java中 线程可以有不同的状态 新的 可运行的 阻塞的 等待的 TIMED WAITING 的 终止的 然而 当线程被IO阻塞时 其状态为 RUNNABLE 如何判断是否被IO阻塞 NEW 线程已创建但尚未处理 可运行 线程正在占用CP
  • JSP重定向和传值

    我有一个 JSP 其中我重定向到另一个 jsp 例如 我在该jsp中没有任何其他数据 我想将值从该jsp index jsp 传递到重定向jsp login jsp 我将如何做到这一点 这里的 logonInput 是在struts con
  • 在 Jenkins 内运行构建时,我收到“java/lang/OutOfMemoryError”

    2020 02 25 10 11 24 986 0000 id 79 信息hudson model AsyncPeriodicWork lambda doRun 0 开始maven repo cleanup 2020 02 25 10 11
  • 用户“root”@“localhost”的访问被拒绝

    我正在尝试从数据库中获取记录 但我面临这个访问被拒绝的问题 我尝试了 Stack Overflow 上提到的其他解决方案 例如向用户授予权限 但没有任何效果 访问数据库的代码 public void service HttpServletR
  • Android - Java - 发送 facebook 聊天消息的意图(facebook 禁用 xmpp)

    Facebook 已弃用 xmpp API 有没有办法打开意图 或将数据传递到fb 以在Android设备上发送聊天消息 设备上安装的 Facebook 和 Messenger 应用 谢谢 您需要将 uri 传递给意图 这里10000572
  • 带有 spring-kafka 的 Kafka 死信队列 (DLQ)

    最好的实施方式是什么死信队列 DLQ Spring Boot 2 0 应用程序中的概念 使用 spring kafka 2 1 x 来处理无法处理的所有消息 KafkaListener某些bean发送到某些预定义的Kafka DLQ主题的方
  • 让 Java 与 Windows 10 Ubuntu 一起使用

    我安装了 Windows 10 周年更新 以便可以在 Windows 上的 Ubuntu 上尝试 Bash 看如何安装 http www howtogeek com 249966 how to install and use the lin
  • 从外部 clojar 导入/使用资源

    我想做的是将一个大文件 MIDI 声音字体 打包到一个独立的 Maven repo clojar 中 然后能够以编程方式将其拉下来并从单独的项目中使用它 事实证明 这个看似简单的任务比我想象的要复杂 理想的情况是 如果有一种方法可以直接访问
  • 如何在最短的时间内克隆java中的输入流

    有人可以告诉我如何克隆输入流 并花费尽可能少的创建时间吗 我需要多次克隆输入流以使用多种方法来处理 IS 我尝试了三种方法 但由于这样或那样的原因 事情不起作用 方法 1 感谢 stackoverflow 社区 我发现以下链接很有帮助 并将
  • 如何在 Eclipse 中使用 Hibernate Tools 生成 DAO?

    我在用着 Eclipse Java EE IDE Web 开发人员 版本 Indigo 发布 使用 hibernate 工具 我对 Eclipse 中的 hibernate 很陌生 所以我学习如何配置 hibernate 并使用注释生成 P
  • 在java中设置Process对象的安全性

    有人可以告诉我如何限制通过进程对象访问系统属性吗 如果我通过进程对象运行以下代码 我可以抛出安全异常吗 System getProperty user home 请告诉我如何为流程对象配置证券 在ProcessBuilder类文档中 环境方
  • 对于每个抛出异常的语句,try/catch 是否被视为反模式?

    我目前正在审查同事的 Java 代码 我看到很多情况下 每个可能抛出异常的语句都被封装在自己的 try catch 中 其中 catch 块都执行相同的操作 哪个操作与我的问题无关 对我来说 这似乎是一种代码味道 我记得读到过它是一种常见的
  • 当相应的 JTextfield 为空时,如何填充 JTable 中的所有项目

    我正在 Java 项目中设计一个高级搜索选项sqlite在 NetBeans 中 有5种不同JTextfields和 5 列 我想填充JTable具有相应的匹配标准 如果一个JTextfield为空 那么它应该选择该列的所有项目 我使用的查
  • 如何实现再次播放功能?

    我希望在游戏结束时得到提示 如果我还想再玩一次的话 并使用 Y N 输入 退出游戏或重复游戏 我该如何以最有效的方式解决这个问题 编辑 描述资源路径位置类型 类型 Main Main java ScaredyCat src se grupp
  • 仅在java中使用数组计算50的阶乘

    我是java的初学者 我有一个作业要编写一个完整的程序 使用数组计算 50 的阶乘 我无法使用像 biginteger 这样的任何方法 我只能使用数组 因为我的教授希望我们理解背后的逻辑 我猜 然而 他并没有真正教我们数组的细节 所以我在这
  • 如何在 SpringDoc OpenAPI 3 中引用文件?

    我有 Spring Boot 项目 我想在其中记录我的 API 这里是正在处理的 Web 服务的示例 ApiResponses value ApiResponse responseCode 200 content Content media

随机推荐

  • LU分解法

    LU分解的原理是将一个矩阵分解为一个下三角矩阵L和一个上三角矩阵U的乘积 下面是LU分解的原理 定一个n n的矩阵A 我们希望将它分解为下三角矩阵L和上三角矩阵U的乘积 即A LU 我们可以在矩阵A上进行列主元高斯消元 消元的过程中会用到矩
  • File "errorchecker.pyx", line 17, in OpenGL_accelerate.errorchecker._ErrorChecker.__init__ (src\erro

    先安装 pip install PyOpenGL 3 0 2 再安装 pip install PyOpenGL PyOpenGL accelerate 结果 这次只安装PyOpenGL accelerate 调用代码会报错 File err
  • uView的组件u-picker 选择器

    网址 https www uviewui com components picker html 需要的是数组中的数组 处理核心是将接口获取回来的数组 赋给一个空数组 然后把这空数组再push到一个空数组里面 this arr1 res da
  • docker的配置,基础用法

    什么是docker docker中的容器 lxc gt libcontainer gt runC OCI OCF OCI Open Container initiative 开放容器倡议 由Linux基金会主导于2015年6月创立 旨在围绕
  • 【Swift】LeedCode整数反转

    Swift LeedCode 拿硬币 由于各大平台的算法题的解法很少有Swift的版本 小编这边将会出个专辑为手撕LeetCode算法题 新手撕算法 请包涵 给你一个 32 位的有符号整数 x 返回将 x 中的数字部分反转后的结果 如果反转
  • 小程序分享及返回上级页面

    分享监听 用户点击右上角分享 onShareAppMessage function res console log res if res from menu return title 邀请赢好礼 path pages member memb
  • 【hadoop报错】(ssh)Connection timed out

    背景 在虚拟机上启动hadoop 报错 Starting namenodes on node1 huike cn Last login Thu Oct 14 22 36 08 EDT 2021 on pts 0 node1 huike cn
  • 为什么单线程的Redis那么快?

    1 Redis单线程的本质 其实 Redis并不是单线程 我们之所以会一直称Redis是单线程 这是因为Redis在处理客户端的读写请求时 只有一个主线程 而在处理以下这些操作时 Redis会fork出其他的子线程来处理 主从数据同步 切片
  • 多元统计分析与R语言练习

    多元考试练习 文章目录 多元考试练习 一 多元线性回归模型 1 建立回归模型 2 逐步筛选 3 最优标准方程 影响最大 4 全局择优法 使用4 2 1版本的R 5 分析 6 由标准化偏回归系数可见 方差分析结果 二 判别分析 1 线性判别
  • python学习心得总结

    21年7月8上午是我第一次接触python这个语言 对于python这个语言之前了解的也并不是很多 也可以说几乎为零 因为我们之前的学习也不考python 所以也没想过去主动学习它 然而当我听老师讲解的时候 首先我发现python这个语言相
  • 使用VS2005下自带的MSSQL 2005 EXPRESS

    VS2005安装后自带一个试用版的SQL2005 EXPRESS版 方便了开发时使用数据库 不用再安装一个sql 2005 怪占用资源的 如何使用 安装后 在开始菜单里出现个sql的菜单组 但是找不到sql server的控制台 习惯用sq
  • 《机器学习实战》——决策树

    本章介绍的决策树算法为ID3算法 Iterative Dichotomiser 3 迭代二叉树3代 主要流程为 根据信息增益找到划分数据的最佳特征 判断划分后每个数据子集是否为同一分类 若是 返回分类结果 若不是 再次划分数据子集 递归 同
  • iOS. Xcode11 dylib封装成framework 图文教程

    Frameworks 制作 Xcode 版本 1 framework是什么 framework是一个层级的目录结构 将一系列可共享的资源 比如动态共享库 nib文件 图形文件 本地化相关文件 头文件 以及相关引用文档 包装成一个包 pack
  • 输入PM2.5的值,判断空气质量

    一个简单的if语句 a int input 请输入PM2 5的值 if 0 lt a lt 35 print 优 elif 35 lt a lt 75 print 良 elif 75 lt a lt 115 print 轻度污染 elif
  • Linux下的文件名空格处理

    转载原文 https blog csdn net michaelzhou224 article details 12708333 解决空格问题的几种方案 1 使用 来替代一个含有空格的文件以及目录 jorncess red black 可以
  • Android开发-Android项目结构

    文章目录 前言 一 Gradle 1 1什么是Gradle 1 2Gradle是一个构建工具 那么为什么要用构建工具 二 项目结构 三 app目录结构 四 res目录结构 总结 前言 Android工程的项目结构比较复杂 在进行Androi
  • AWD简单介绍和搭建AWD平台

    AWD简单介绍和搭建AWD平台 何为AWD 比赛中每个队伍维护多台服务器 服务器中存在多个漏洞 利用漏洞攻击其他队伍可以进行得分 修复漏洞可以避免被其他队伍攻击失分 1 一般分配Web服务器 服务器 多数为Linux 某处存在flag 一般
  • KNN数据分类算法的matlab仿真

    目录 1 算法概述 2 仿真效果 3 MATLAB仿真源码 1 算法概述 KNN的本质是通过距离判断待测样本和已知样本是否相似 待测样本找到与已知样本中与其距离最近的K个样本 对这k个样本 它们大多数属于哪一类别 就把待测样本归为哪一类别
  • [工程编写]cmakelist多版本python环境编写

    问题 最近在写一个工程的时候需要用到python3 但是由于引入了ROS相关的环境 导致希望使用python3的那部分代码一直默认使用ROS中的python2 这样环境就不对了 解决的方法 很顺理成章的想法是为需要python3的那部分代码
  • 注解&反射学习笔记

    1 注解的作用域及使用方式 表示我们的注解可以使用在那些地方 Target value ElementType METHOD ElementType TYPE 表示注解在什么地方有效 RESOUT 源码 lt CLASS 类 lt RUNT