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)

大家都在看

  • 04_Linux基础-.&..-cat-tac-重定向-EOF-Shell-more-ps-less-head-tail-sed-grep-which-whereis-PATH-bash-usr-locate-find

    04_Linux基础-.&..-cat-tac->&>>-EOF-Shell-more-ps-less-head-tail-sed-grep-wh…

    Linux 2023年6月6日
    0102
  • PYTORCH: 60分钟 | TORCH.AUTOGRAD

    torch.autograd 是PyTorch的自动微分引擎,用以推动神经网络训练。在本节,你将会对autograd如何帮助神经网络训练的概念有所理解。 背景 神经网络(NNs)是…

    Linux 2023年6月16日
    0167
  • Kafka部署安装及简单使用

    一、环境准备 1、jdk 8+ 2、zookeeper 3、kafka 说明:在kafka较新版本中已经集成了zookeeper,所以不用单独安装zookeeper,只需要在kaf…

    Linux 2023年6月13日
    0112
  • Docker容器镜像打成tar包

    简述需求: 在现在容器上保存镜像进行打包,在另一台服务上使用 首先查看下现有要打tar包的容器 接下来用commit参数进行保存镜像, -a 提交人的姓名 -m “提交…

    Linux 2023年6月8日
    087
  • 爱快在PVE下不定时反复重启死机的解决方法

    太长不看版本: 爱快3.6.X在PVE乃至于ESXI下都存在一定的兼容问题 ! 详细情况: 如题,使用爱快版本为3.6.3 x64 Build20220407113364,底层虚拟…

    Linux 2023年6月13日
    0177
  • Java刷题笔记—–>集合类

    一般提到某某集合区别,感觉必有线程安全Arrylist线程不安全,Vector反之 几个方面:线程是否安全,效率问题,对Null Key和Null value的支持,初始容量大小和…

    Linux 2023年6月7日
    0100
  • QML 信号与响应方法的总结

    如果面试过程中,面试官想了解你对 Qt 的理解有多少,少不了会涉及到信号槽这一块,毕竟这是 Qt 最经典的一项技术。 刚开笔,我可能有点狂妄了。 信号槽,分为两部分,信号和对信号响…

    Linux 2023年6月6日
    0106
  • 定时任务调度

    一、crond任务调度 概述: 使用crontab 指令进行定时任务的设置,任务调度是指系统在某个时间端执行的特定任务或程序,例如:病毒扫描,数据库备份等 基本语法: cronta…

    Linux 2023年6月6日
    0131
  • 抓到 Netty 一个 Bug,顺带来透彻地聊一下 Netty 是如何高效接收网络连接的

    本系列Netty源码解析文章基于 4.1.56.Final版本,大家如果看到图片显示不了的话,可以查看公众号原文 对于一个高性能网络通讯框架来说,最最重要也是最核心的工作就是如何高…

    Linux 2023年6月6日
    0120
  • 2020年12月-第02阶段-前端基础-CSS Day05

    CSS Day05 学成在线页面制作 理解 能够说写单页面我们基本的流程能说出常见的css初始化语句能说出我们CSS属性书写顺序 应用 能利用ps切图能引入外部样式表能把psd文件…

    Linux 2023年6月8日
    0116
  • Mysql数据库语言学习的路线

    对于我们数据库的学习,不管是测试人员还是开发人员以及我们的DBA来说重点都是SQL;但是我们的SQL可以分多少类型,学习重点又是在哪里呢,本文仅仅针对测试人员来展开说明: SQL:…

    Linux 2023年6月14日
    088
  • MySQL之多表查询、Navicat及pymysql

    一、多表查询 1.1 数据准备 — 建表 create table dep( id int primary key auto_increment, name varchar(20…

    Linux 2023年6月14日
    0103
  • 同一台电脑生成多份ssh私钥和公钥,映射多个GitHub账号

    当我们使用 Git 进行代码版本控制时,经常出现一台电脑需要连接多个Git 账号的情况,此时需要在一台电脑上生成多份 ssh 私钥和密钥,同时映射多个 Git 账号;这里我们需要同…

    Linux 2023年6月14日
    079
  • Shell alias命令详解:给命令设置别名

    给命令设置别名,你可以把它当作命令的”小名”,但是这样做有什么意义呢? 比如笔者刚接触 Linux 时,使用的编辑器是 Vi,但是现在 Vim 的功能明显比…

    Linux 2023年5月28日
    063
  • muduo源码分析之Buffer

    这一次我们来分析下 muduo中 Buffer的作用,我们知道,当我们客户端向服务器发送数据时候,服务器就会读取我们发送的数据,然后进行一系列处理,然后再发送到其他地方,在这里我们…

    Linux 2023年6月13日
    093
  • [转载]C++中new和malloc的区别

    new与malloc的10点区别 1. 申请的内存所在位置 new操作符从自由存储区(free store)上为对象动态分配内存空间,而malloc函数从堆上动态分配内存。自由存储…

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