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.hqwc.cn/news/53708.html

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

相关文章

2021-06-16 Multisim74LS161S设计13进制计数器!

缘由求!74LS161S设计13进制计数器!-其他-CSDN问答

GaussDB数据库的元数据及其管理简介

目录 一、前言 二、元数据简介 1、元数据定义 2、元数据分类 3、数据库元数据管理 三、GaussDB数据库的元数据管理 1、GaussDB数据库的元数据管理 2、通过“SQL 系统表/系统视图/系统函数”的方式管理(采集)元数据 1)获取表、视图及…

ArduPilot开源代码之Companion Computers简单分析

ArduPilot开源代码之Companion Computers简单分析 1. 源由2. 伴机系统2.1 APSync2.2 DroneKit2.3 FlytOS2.4 Maverick2.5 ROS2.6 Rpanion-server 3. 总结4. 参考资料 1. 源由 从稳定性,社区群体,以及开源方式的角度看,Ardupilot是不错的选择…

Java thymeleaf bug排查记录

刚学Java 做项目时报了一个错误 一时间看的莫名其妙 EL1008E: Property or field createTime cannot be found on object of type java.util.HashMap - maybe not public or not valid? 随即向上排查至第一个报错,发现是thymeleaf渲染时报错。 Exception proces…

【深度学习_TensorFlow】感知机、全连接层、神经网络

写在前面 感知机、全连接层、神经网络是什么意思? 感知机: 是最简单的神经网络结构,可以对线性可分的数据进行分类。 全连接层: 是神经网络中的一种层结构,每个神经元与上一层的所有神经元相连接,实现全连接。 神经…

设计模式之策略模式(Strategy)

一、概述 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的类而变化。 二、适用性 1.许多相关的类仅仅是行为有异。“策略”提供了一种用多个行为中的一个行为来配置一个类的方法。 2.需要使用一个算法的不同变体。…

《MySQL》第十三篇 SELECT * 和 SELECT 字段名的区别

在实际开发中,进行数据查询的SQL无非有两种写法,使用SELECT * from tableName或者SELECT 字段名(多个) from tableName,二者各有利弊 SELECT * 写法 优点: 写法简单,不需要手动输入具体的字段,一定程度上…

并查集练习—省份数量

上一篇中讲了并查集及其原理,在这篇文章中简单应用一下。如果对并查集不是很了解强烈建议先看上一篇。 题目: 有 n 个城市,其中一些彼此相连,另一些没有相连。如果城市 a 与城市 b 直接相连,且城市 b 与城市 c 直接相…

Python 开发工具 Pycharm —— 使用技巧Lv.2

pydoc是python自带的一个文档生成工具,使用pydoc可以很方便的查看类和方法结构 本文主要介绍:1.查看文档的方法、2.html文档说明、3.注释方法、 一、查看文档的方法 **方法1:**启动本地服务,在web上查看文档 命令【python3 -m…

云上 Index:看「简墨」如何为云原生打造全新索引

拓数派首款数据计算引擎 PieCloudDB Database 是一款全新的云原生虚拟数仓。为了提升用户使用体验,提高查询效率,在实现存算分离的同时,PieCloudDB 设计与打造了全新的存储引擎「简墨」等模块,并针对云场景和分析型场景设计了高效…

基于Yolov2深度学习网络的车辆检测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1. 卷积神经网络(CNN) 4.2. YOLOv2 网络 4.3. 实现过程 4.4. 应用领域 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022A 3.部分核心…

图论-简明导读

计算机图论是计算机科学中的一个重要分支,它主要研究图的性质和结构,以及如何在计算机上有效地存储、处理和操作这些图。本文将总结计算机图论的核心知识点。 一、基本概念 计算机图论中的基本概念包括图、节点、边等。图是由节点和边构成的数据结构&am…