8.5day06 框架基础--反射+注解

文章目录

  • 反射
    • 获取类的各种信息
      • 获取类的字节码文件
  • 注解
    • 元注解
  • 复习redis
  • 两道算法题

摆烂了,不想学啦!!!

反射

在这里插入图片描述
反射主要用来做框架;

学习内容

获取类的各种信息

第一步 加载类,获取类的字节码文件
第二步 获取类的构造器 (对象);
第三步 获取类的成员遍历 Field对象
第四步 获取类的成员方法,Method对象

获取类的字节码文件

1 类名.class 获取反射对象
2 调用Class提供的方法forname
3 通过object类提供的方法 getclass,要先有对象才能调用;

获取反射对象的三种方式

public class Test {public static void main(String[] args) throws NoSuchFieldException, ClassNotFoundException {//第一种方式Class c1=Student.class;System.out.println(c1.getName());
//        System.out.println(c1.getSimpleName());//  System.out.println(c1.getField(c1.getName()));//第二种方式Class c2=  Class.forName("反射.Student"); //会有异常,classNotFoundException类找不到异常System.out.println(c2.getName());//第三种Student student =new Student();Class c3= student.getClass();System.out.println(c3.getName());}
}

获取类的构造器,并对构造器进行操作
在这里插入图片描述

public class Test2 {public static void main(String[] args) throws NoSuchMethodException {Class C= Student.class;Constructor[] constructors = C.getConstructors();//构造器封装成数组for (Constructor constructor:constructors){System.out.println(constructor.getName()+ " 参数个数"+constructor.getParameterCount() );}Constructor declaredConstructor = C.getDeclaredConstructor();Constructor constructor=C.getConstructor(int.class,String.class);System.out.println(constructor.getName()+"参数个数"+constructor.getParameterCount());}
}

在这里插入图片描述
获取类的构造器的作用,初始化对象;
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在初始的时候可以指定泛型,后面就可以不用进行强转。
如何构造方法是private修饰的,需要设置setAccessible;

获取类的成员变量
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以直接使用getName()等,这是为后面学习框架使用的。

获取类的成员方法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

package 反射;import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.lang.reflect.Field;public class ObjectFrame {public  static  void saveObject(Object obj) throws Exception {PrintStream ps=new PrintStream(new FileOutputStream("src\\data.txt",true));Class c=   obj.getClass(); //得到传进来对象的字节码文件String cName=c.getSimpleName();ps.println("*-*******"+cName+"---------------------");Field[] fidlds = c.getDeclaredFields(); //得到的是字段for (Field field : fidlds) {field.setAccessible(true);//设置暴力访问String name = field.getName();//得到对应字段的名称String value=field.get(obj)+"";//得到对应字段的值,转为字符串ps.println(name+"="+value);}ps.close();}
}

在这里插入图片描述
通过反射读取信息。

注解

在这里插入图片描述
在这里插入图片描述
自定义注解
在这里插入图片描述
在这里插入图片描述

元注解

修饰注解的注解
在这里插入图片描述
常见的元注解
目标注解,在这里插入图片描述在这里插入图片描述
声明注解的周期

注解的解析
判断类上面、方法上面、成员变量上面是否存在注解,并把注解的内容解析出来

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注解开发的应用场景

配合反射的技术做框架的;
模拟简易版的junit框架
在这里插入图片描述

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;public class Test2 {@MyTestpublic  void test1(){System.out.println("test1");}public  void test2(){System.out.println("test2");}public  void test3(){System.out.println("test3");}@MyTestpublic  void test4(){System.out.println("test4");}public static void main(String[] args) throws InvocationTargetException, IllegalAccessException {Test2 test2=new Test2();//实现启动程序Class c= Test2.class;Method[] declaredMethods = c.getDeclaredMethods();for (Method declaredMethod : declaredMethods) {if (declaredMethod.isAnnotationPresent(MyTest.class)){declaredMethod.invoke(test2);}}}
}
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyTest {}

在这里插入图片描述
注解就是告诉别人需要干什么

复习redis

两道算法题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/23811.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA基础使用

IDEA基础使用 1、IDEA中显示用法和用户截图展示有调用显示无调用显示 对应方法 2、如何找出项目中所有不被调用方法截图展示对应方法 3、常用代码(Code)说明及快捷键:4、未完待续待日后更新。。。总结:欢迎指导,也祝码友们代码越来越棒,技术越…

AMEYA360:瑞萨电子MCU和MPU产品线将支持Microsoft Visual Studio Code

全球半导体解决方案供应商瑞萨电子宣布其客户现可以使用Microsoft Visual Studio Code(VS Code)开发瑞萨全系列微控制器(MCU)和微处理器(MPU)。瑞萨已为其所有嵌入式处理器开发了工具扩展,并将其…

个人隐私保护

文章目录 一、互联网生存指南:通过哪些方法来加强个人信息保护?二、个人信息保护与数字经济发展的关系应该如何平衡?三、互联网公司如何处理数据隐私?四、如何加强个人隐私教育和意识? 一、互联网生存指南:…

月报总结|Moonbeam 7月份大事一览

炎炎夏日,Moonbeam于越南举办了线下交流会,在EthCC 2023和以太坊社区成员共同讨论多链应用,在Polkadot Decoded中分享了Moonbeam的与众不同之处。 Bear Necessities Hackathon也于本月圆满结束,选出了每个赛道最杰出的项目&#…

CMake:检测python解释器和python库

CMake:检测python解释器和python库 导言检测python解释器CMakeLists.txt输出附录 检测python库项目结构CMakeLists.txt相关源码附录 导言 python是一种非常流行的语言。许多项目用python编写的工具,从而将主程序和库打包在一起,或者在配置或构建过程中使…

C 语言的递增运算符 ++ 和递减运算符 --

递增运算符 increment operator 放在while循环的判断条件中时&#xff0c;要使用前缀形式。 代码示例&#xff1a; #include<stdio.h>int main(void) {int shoe 0;while (shoe < 18.5){printf("%d\n", shoe);}return 0; }结果&#xff1a; 1 2 3 4 5 6…

Docker Enable live

ubuntu - Enabling live restore on docker isnt keeping the containers alive - Stack Overflow容器安全之启用实时恢复 - 简书 (jianshu.com)

MCU的类型和应用领域简介

MCU&#xff08;Microcontroller Unit&#xff09;根据存储器类型可分为无片内ROM型和带片内ROM型。无片内ROM型的芯片需要外接EPROM才能应用&#xff0c;而带片内ROM型则有不同的子类型&#xff0c;如片内EPROM型、MASK片内掩模ROM型和片内Flash型。 MCU还可以按照用途分为通…

NVM Command学习

ubuntu系统安装nvme-cli&#xff0c;可以在应用层发起命令。 sudo apt install nvme-cli$ sudo nvme --help nvme-1.9 usage: nvme <command> [<device>] [<args>]The <device> may be either an NVMe character device (ex: /dev/nvme0) or an nvme …

Cesium 实战教程 - 调整 3dtiles 倾斜摄影大小

Cesium 实战教程 - 调整 3dtiles 倾斜摄影大小 核心代码完整代码在线示例 之前由于误解遇到一个特殊的需求&#xff1a;想要把三维球上叠加倾斜摄影进行自由放大缩小&#xff0c;跟随地图的缩放进行缩放。 后来经过搜索、尝试&#xff0c;终于实现了需求。 但是&#xff0c;后…

应急响应-Linux

应急响应-Linux 1.关键目录 /etc/passwd 记录用户信息 /etc/shadow 保存用户密码&#xff08;hash&#xff09; /etc/crontab 定时任务文件 /etc/anacrontab 异步定时任务文件 /etc/rc.d/rc.local 开机启动项 /var/log/btmp …

用Abp实现找回密码和密码强制过期策略

用户找回密码&#xff0c;确切地说是重置密码&#xff0c;为了保证用户账号安全&#xff0c;原始密码将不再以明文的方式找回&#xff0c;而是通过短信或者邮件的方式发送一个随机的重置校验码&#xff08;带校验码的页面连接&#xff09;&#xff0c;用户点击该链接&#xff0…

React Hooks 中的 useEffect(副作用)

useEffect 是什么&#xff1f; useEffect 是一个 React Hook&#xff0c;它允许你将组件与外部系统同步 当我们在 React 中使用 useEffect 这个 Hook 时&#xff0c;实际上是在告诉 React 在特定情况下执行我们定义的副作用函数。这种副作用函数可以处理一些与组件渲染结果无关…

SpringBoot 日志文件

一、日志的作用 日志是程序的重要组成部分&#xff0c;想象一下&#xff0c;如果程序报错了&#xff0c;不让你打开控制台看日志&#xff0c;那么你能找到报错的原因吗 答案是否定的&#xff0c;写程序不是买彩票&#xff0c;不能完全靠猜&#xff0c;因此日志对于我们来说&a…

C语言数组笔试题(详解)

目录 插入知识&#xff1a; 一.指向函数指针数组的指针 二.回调函数 什么是回调函数&#xff1f; 三.数组笔试题 个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名乐于分享在学习道路上收获的大二在校生&#x1f43b;‍❄个人主页&#xff1a;GOTXX &#x1f4…

【Apollo学习笔记】—— 相机仿真

文章目录 前言相关代码整理 测试实践文件目录包管理BUILD文件以及cyberfile.xml文件源程序BUILD运行结果其他参考CameraOutput channels启动camera驱动启动camera video compression驱动 前言 本文是对Cyber RT的学习记录,文章可能存在不严谨、不完善、有缺漏的部分&#xff0…

[迁移学习]领域泛化

一、概念 相较于领域适应&#xff0c;领域泛化(Domain generalization)最显著的区别在于训练过程中不能访问测试集。 领域泛化的损失函数一般可以描述为以下形式&#xff1a; 该式分为三项&#xff1a;第一项表示各训练集权重的线性组合&#xff0c;其中π为使该项最小的系数&a…

react工程化配置

道阻且长&#xff0c;行而不辍&#xff0c;未来可期 1.安装react yarn create react-app demo --template typescript cd demo yarn start2.配置蓝图模版 2.1安装blueprint插件 https://github.com/shredor/blueprint-templates-cli#readme yarn add blueprint-templates-c…

PB:DDE服务器函数

1、GetCommandDDE() 功 能:得到DDE客户应用发送的命令。 语 法:GetCommandDDE ( string ) 参 数:string:string类型的变量,用于保存DDE客户应用发送的命令。 返回值:Integer。函数执行成功时返回1,发生错误时返回-1。如果string参数的值为NULL, GetCommandDDE()…

WAF绕过-漏洞利用篇-sql注入+文件上传-过狗

WAF绕过主要集中在信息收集&#xff0c;漏洞发现&#xff0c;漏洞利用&#xff0c;权限控制四个阶段。 1、什么是WAF&#xff1f; Web Application Firewall&#xff08;web应用防火墙&#xff09;&#xff0c;一种公认的说法是“web应用防火墙通过执行一系列针对HTTP/HTTPS的安…