6.18(反射和注解—>反射机制的作用)

反射

获取Class对象三种方式
第一种方式:类.class
第二种方式:对象.getClass()
第三种方式:Class.forName
在一个JVM中,一种类,只会有一个类对象存在。所以以上三种方式取出来的类对象,都是一样的。
通过反射机制创建对象

package reflection;
import java.lang.reflect.Constructor;
import charactor.Hero;
public class TestReflection {

    public static void main(String[] args) {

        Hero h1 =new Hero();
        h1.name = "teemo";
        System.out.println(h1);

        try {

            String className = "charactor.Hero";

            Class pClass=Class.forName(className);

            Constructor c= pClass.getConstructor();

            Hero h2= (Hero) c.newInstance();
            h2.name="gareen";
            System.out.println(h2);
        } catch (Exception e) {

            e.printStackTrace();
        }
    }
}

通过反射修改属性的值

package reflection;

import java.lang.reflect.Field;

import charactor.Hero;

public class TestReflection {

    public static void main(String[] args) {
            Hero h =new Hero();

            h.name = "garen";
            try {

                Field f1= h.getClass().getDeclaredField("name");

                f1.set(h, "teemo");

                System.out.println(h.name);

            } catch (Exception e) {

                e.printStackTrace();
            }
    }
}

首先为Hero的name属性,增加setter和getter
通过反射机制调用Hero的setName

package reflection;

import java.lang.reflect.Method;

import charactor.Hero;

public class TestReflection {

    public static void main(String[] args) {
        Hero h = new Hero();

        try {

            Method m = h.getClass().getMethod("setName", String.class);

            m.invoke(h, "盖伦");

            System.out.println(h.getName());

        } catch (Exception e) {

            e.printStackTrace();
        }

    }
}

反射机制的用处(自己理解):一般和Spring一起使用,之前调用业务,必须修改代码重新编译,用反射的话只需要修改Spring的配置文件即可。

这么看反射也没有当初觉得的那么难懂

6.18(反射和注解--->反射机制的作用)

注解

内置注解没啥用,一般用自定义注解

元注解有这么几种:
@Target
@Retention
@Inherited
@Documented
@Repeatable (java1.8 新增)

根据注解的作用域@Retention,注解分为
RetentionPolicy.SOURCE: Java源文件上的注解
RetentionPolicy.CLASS: Class类文件上的注解
RetentionPolicy.RUNTIME: 运行时的注解

按照注解的来源,也是分为3类

  1. 内置注解 如@Override ,@Deprecated 等等
  2. 第三方注解,如Hibernate, Struts等等
  3. 自定义注解,如仿hibernate的自定义注解

在工作中,大部分都是使用第三方注解, 当然第三方注解本身就是自定义注解。

明天看看”白盒单元测试”,上课没听,现在又得补,害

Original: https://www.cnblogs.com/GeniusWang/p/15644222.html
Author: Genius_Wang
Title: 6.18(反射和注解—>反射机制的作用)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/583156/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 网卡的RX Ring和TX Ring

    1 简介 环形缓冲(ring buffer)是NIC处理数据包的一种通用数据结构,出现的原因是现代NIC基本使用DMA进行数据传输,作为一种高效简单[1]的数据结构,环形缓冲很 适…

    Linux 2023年6月7日
    0106
  • CentOS——安装Redis 6.0版本

    一、 Centos7 yum install -y http://rpms.famillecollet.com/enterprise/remi-release -7.rpm 如图 …

    Linux 2023年5月28日
    094
  • 4.5 Linux压缩文件或目录中文件为.gz格式(gzip命令)

    gzip 是 Linux 系统中经常用来对文件进行压缩和解压缩的命令,通过此命令压缩得到的新文件,其扩展名通常标记为”.gz”。 再强调一下,gzip 命令…

    Linux 2023年6月7日
    083
  • Jenkins配置国内插件源

    由于Jenkins插件下载慢,配置国内源 进入Jenkins的更新目录: jenkins-home 下的updates 目录 替换目录里面的default.json 文件内容(je…

    Linux 2023年6月14日
    0292
  • 微服务与领域驱动设计,架构实践总结

    怎样的架构才能配得上造到飞起的变化? 一、软件复杂性 1、复杂原因 如果软件系统存在持续的迭代周期,那么其中业务、技术、架构的复杂性都会直线拉升,其相应的开发难度也会提高,可以用一…

    Linux 2023年6月14日
    064
  • 学习一下 SpringCloud (五)– 配置中心 Config、消息总线 Bus、链路追踪 Sleuth、配置中心 Nacos

    (1) 相关博文地址: 学习一下 SpringCloud (一)– 从单体架构到微服务架构、代码拆分(maven 聚合): https://www.cnblogs.com/l-y…

    Linux 2023年6月14日
    0122
  • 相关powerLink教程、配置方法等

    openPowerLink的开发小组早已经解散,所以有些资料都可以在官网上下载到; 这也是最后一次更新了。其中相关powerlink的教程均放在百度网盘里,链接:https://p…

    Linux 2023年6月14日
    0108
  • MySQL主从复制的原理和实现

    垂直扩展: 横向扩展: 复制:使每一个节点都有相同的数据集 MySQL复制的实现:使用二进制日志来实现 提高性能(负载均衡)、 实现读写分离 实现数据备份的功能(实时备份) 高可用…

    Linux 2023年6月7日
    0101
  • 用powershell实现,管理github自动化

    用powershell实现,管理github自动化 搜索关键字如下:PowerShellForGitHub powershell 传教士 原创文章。始于 2021-02-04 允许…

    Linux 2023年6月14日
    085
  • ffmpeg 格式转换

    1.学前知识 1.1视频码率值 码率公式: 码率(kbps)=文件大小(KB)*8/时间(秒) 所以码率和视频文件大小成正比的,不过码率超过一定值后,人眼是看不出效果的. 接下来,…

    Linux 2023年6月7日
    0127
  • 苹果手机使用altstore免越狱安装第三方应用

    转自52pojie 开发人员Riley Testut推&#x5…

    Linux 2023年6月7日
    0270
  • 高速USB转8串口产品设计-RS232串口

    基于480Mbps 高速USB转8路串口芯片CH348,可以为各类主机扩展出8个独立的串口。使用厂商提供的VCP串口驱动程序,可支持Windows、Linux、Android、ma…

    Linux 2023年6月7日
    089
  • shell脚本中 /dev/null 的用途

    /dev/null 是一个特殊的设备文件,它丢弃一切写入其中的数据 可以将它 视为一个黑洞, 它等效于只写文件, 写入其中的所有内容都会消失, 尝试从中读取或输出不会有任何结果,同…

    Linux 2023年6月13日
    0100
  • Linux 常用命令总结(三)

    一、实用命令 1、crontab(定时任务) (1)基本概念crontab 是用来管理定时任务的命令。系统启动后,将会自动调用 crontab,如果存在任务,则根据相关定义去执行。…

    Linux 2023年6月14日
    083
  • [python] boss直聘自动搜索简历聊天HR机器人

    前言 1、首先进行几个关键位置的标定 2、拖拽鼠标复制简历的文字,并进行字符串匹配,对候选人进行人物画像和打分 3、筛选、聊天、下一个全流程状态机 附录 前言 该机器人完全仿照人是…

    Linux 2023年6月8日
    0227
  • 使用Retrofit上传图片

    Retrofit使用协程发送请求参考文章 :https://www.cnblogs.com/sw-code/p/14451921.html 导入依赖 app的build文件中加入:…

    Linux 2023年6月8日
    0113
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球