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)

大家都在看

  • 《深度工作:如何有效使用每一点脑力》读后感

    空闲时间阅读了一下《深度工作:如何有效使用每一点脑力》,作为一个沉迷网络的人,已经很难有聚精会神的时候,所以阅读此书,记录一下读后感,争取应用到生活当中。全书分为两个方面进行说明:…

    Linux 2023年6月7日
    082
  • AI场景存储优化:云知声超算平台基于 JuiceFS 的存储实践

    云知声是一家专注于语音及语言处理的技术公司。 Atlas 超级计算平台是云知声的计算底层基础架构,为云知声在 AI 各个领域(如语音、自然语言处理、视觉等)的模型迭代提供训练加速等…

    Linux 2023年6月14日
    083
  • SpringBoot-druid

    SpringBoot-druid 9.1 druid简介 Java程序很大一部分要操作数据库,为了提高性能操作数据库,又不得不使用数据库连接池。 Druid 是阿里巴巴开源平台上一…

    Linux 2023年6月14日
    094
  • Ajax 技术(四)

    目的: 熟练掌握AJAX基础和XMLHttpRequest对象及其方法。 重点掌握AJAX发送请求的具体过程,及过程中的不同状态。 要求: 实现用户注册表单中,使用AJAX技术根据…

    Linux 2023年6月13日
    0102
  • Centos系统部署nginx1.18.0

    镜像下载、域名解析、时间同步请点击阿里云开源镜像站 一、 安装依赖包 yum –y install gcc gcc-c++ openssl openssl-d…

    Linux 2023年5月27日
    082
  • Linux 查看端口被占用

    端口被占用网上很多,这种频繁操作的命令容易忘记,写这边文章的目的主要是加深操作命令的印象, Liux 查看端口占用情况可以使用 lsof 和 netstat 命令。 lsof ls…

    Linux 2023年6月6日
    080
  • 如何入行软件开发——常见问题及岗位分工

    —— 你以为我每天上班就是为了几个臭钱么!? —— 是的,你说对了…… IT是一个有些让业外同行羡慕嫉妒恨的行业,统计数据来说平均薪资应当是仅次于金融行业的…

    Linux 2023年6月13日
    086
  • 机器学习入门–图学习基础01

    图表示学习入门知识 数学基础看文章理解图的拉普拉斯变换,解答了上一周文章公式中的L拉普拉斯矩阵是怎么来的 本文仅限我个人记录学习历程所用,目前是大一在读,刚刚接触AI领域。如有不足…

    Linux 2023年6月6日
    076
  • Debian 9.4 安装教程

    我们这里选择install安装,不装桌面,因为是做服务器,装桌面没意义。 我们这里选择装英文版,你也可以装中文版本。 手动配置网络-manually 设置IP 设置 子网掩码 设置…

    Linux 2023年6月13日
    086
  • python接收微信消息报’HTMLParser’ object has no attribute ‘unescape’错误

    我的博客 一直有个想法,想要弄个微信机器人,然而出师不利,刚开始就碰壁了 先上代码,这个是用来接收消息的,是个测试脚本 #!/usr/bin/python coding: utf-…

    Linux 2023年6月6日
    0102
  • redis研究记录

    redis研究记录 1 概述目前多数的NoSql数据库本质上都是键值对形式,Redis也不例外。作为缓存数据库的一种,和Memcached相比,有以下几种主要的优点:(1)速度上,…

    Linux 2023年5月28日
    066
  • Tensorflow-逻辑斯蒂回归

    1.交叉熵 逻辑斯蒂回归这个模型采用的是交叉熵,通俗点理解交叉熵 推荐一篇文章讲的很清楚: 因此,交叉熵越低,这个策略就越好,最低的交叉熵也就是使用了真实分布所计算出来的信息熵,因…

    Linux 2023年6月6日
    076
  • Linux基线加固

    bash;gutter:true; 1、修改vsftp回显信息 (1)检查办法 修改vsftp回显信息: 需在安装VSFTP的情况下检查,未安装可忽略或禁用该项。 查看ftpd_b…

    Linux 2023年6月13日
    079
  • JVM 运行时数据区 堆和方法区

    2、运行时数据区 哔哩哔哩 尚硅谷视频 宋红康老师 2.5、堆 堆的核心概述 一个JVM实例只存在一个堆内存,堆也是Java管理内存的核心区域 Java 堆区在JVM启动的时候即被…

    Linux 2023年6月7日
    0106
  • Java 8 中的 Stream 遍历树形结构

    树形结构数据处理 public class TreeDemo { public static void main(String[] args) { testtree(); } pu…

    Linux 2023年6月7日
    0104
  • Docker镜像管理基础

    Docker镜像管理基础 1、镜像的概念 镜像可以理解为应用程序的集装箱,而docker用来装卸集装箱。 docker镜像含有启动容器所需要的文件系统及其内容,因此,其用于创建并启…

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