• 2022-08-10 第六小组 瞒春 学习笔记



    活动地址:CSDN21天学习挑战赛

    🚩前言

    🌻今天进行注解、反射的学习
    Java基础的课程大部分已经结束,剩下一些小的点进行补充

    ✏️注解

    注解:Annotation JDK1.5
    public @interface MyAnnotation(){
    }
    自创注解
    注解也有注解,元注解:专门给注解加的注解
    在这里插入图片描述

    Retention等都是枚举,后面跟的是常量
    我们发现注解中可以有方法,可以有默认值
    String name() default “Tom”;
    定义方法格式:String name(); 不写默认值需要赋值,有默认值用default指定默认值
    public class Ch01{
    @MyAnnotation(age=20) 可以理解为加了返回值
    public void show(){
    }
    }
    如果只有一个可以不用写名字,如果有多个需要写名字
    在java的整个的注解体系中,有三个非常重要的主干类
    1.Annotation 接口 定义一些常用的方法
    2.ElementType枚举 用来指定注解的类型 (注解要用在哪里)
    3.RetentionPolicy 枚举 用来指定注解的策略,不同类型的策略指定的作用域不同
    (1)SUTCE 注解仅存在与编译器处理期间,编译期处理完之后,这个注解就没有了
    (2)CLASS 注解在.class文件中依然有效
    (3)RUNTIME 编译期是不起作用的,只有在运行期才由JVM读取
    Java自带注解

    ✒️作用在代码上的注解

    1.@Override,检测方法是否是重写方法,如果返现其父类,或者引用的接口中没有该方法会报错
    2.@Deprecated 标记的方法是过时的方法
    3.@SuppressWarnings 让编辑器去忽略警告
    4.@SafeVarargs 忽略任何使用参数为泛型变量的方法或构造器产生的警告
    5.@FunctionalInterface 标识一个接口为函数式接口
    6.@Repeatable 标识某个注解可以在同一个声明上使用多次
    all:忽略所有警告
    boxing:忽略装箱拆箱警告
    rawtypes:使用生成时没有指定数据类型
    unchecked:忽略没有进行类型检测的警告
    unused:忽略没有使用的警告
    在这里插入图片描述

    ✒️元注解

    1.@Retention 标识这个注解的作用域
    2.@Documented 标记这个注解是否包含在用户文档中
    3.@Target 这个注解可以修饰哪些信息
    4.@Inherited 如果一个类用上了这个注解 ,那么其子类也会继承这个注解

    ✏️反射

    Class类
    可以拿到类里面的所有结构,不需要操作这个类就可以访问类的信息
    1.直接使用类名.class
    在这里插入图片描述

    2.使用全类名
    在这里插入图片描述

    3.使用对象
    在这里插入图片描述

    Class<>泛型使用时候加上
    获取类的名字:clazz.getName()
    获取类的加载器:

    获取资源
    URL resource = clazz.getResource(“”);
    获取父类
    clazz.getSuperclass()
    是不是接口数组
    clazz.isArray();
    clazz.isInterface();
    重点
    Dog dog = clazz.newInstance(); jdk9过时
    创建出dog一个对象:使用class类对象实例化一个对象
    clazz.getDeclaredConstructor().newInstance(); 代替 用构造器的写法
    对成员变量的操作:
    在这里插入图片描述

    对成员变量进行操作,只能获取到public修饰的属性
    在这里插入图片描述

    可以获取到private属性
    在这里插入图片描述

    可以拿到所有的属性
    在这里插入图片描述

    获取对象的属性
    在这里插入图片描述

    String str = (String)type.get(dog1); 如果想要字符串就用强转

    给对象的属性赋值
    在这里插入图片描述

    私有化的东西也可以操作

    在这里插入图片描述

    反射调用方法???
    通过反射来调用构造器
    在这里插入图片描述

    通过构造器创建对象
    在这里插入图片描述

    构造器私有化
    在这里插入图片描述

    sout(dog1.getName());

    对注解的操作
    在这里插入图片描述

    ☀️总结

    反射与注解虽然难度不如多线程等版块,但是重要性不容忽视,对于对象的创建我们鼓励利用反射来创建,它允许程序创建和控制任何类的对象(根据安全性限制),无需提前硬编码目标类。这些特性使得反射特别适用于创建以非常普通的方式与对象协作的库。
    业精于勤,荒于嬉; 行成于思,毁于随。

  • 相关阅读:
    2022“杭电杯”中国大学生算法设计超级联赛(5)
    C++编译期反射实践——以AOP实现为例
    BUUCTF内涵的软件 1
    js真假值
    mysql 提示Index column size too large. The maximum column size is 767 bytes.
    android 12出现 Targeting S+ (version 31 and above)问题
    ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
    Maya 2024 for Mac(3D建模软件)
    计算机公共课面试常见问题:线性代数篇
    数据结构-----串(String)详解
  • 原文地址:https://blog.csdn.net/weixin_49405762/article/details/126272259