码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Java注解和反射学习


    目录

    1.什么是注解

    1.Annotation是从JDK5.0开始引入的新技术

    2.Annotation的作用:

    3.Annotation的格式:

    4.Annotation在哪里使用?

    2.内置注解

    1.@Override:定义在java.lang.Override中,此注释只适用于修饰方法,表示一个方法声明打算重写超类中的另一个方法声明

    2.@Deprecated:定义在java.lang.Deprecated中,此注释可以用于修饰方法,属性,类,表示不鼓励程序员使用这样的元素,通常是因为它很危险或者存在更好的选择

    3.@SuppressWarnings:定义在java.lang.SuppressWarnings中,用来抑制编译时的警告信息

    3.元注解

    1.元注解的作用就是负责注解其他注解,java定义了4个标准的meta-annotation类型,他们被用来提供对其他annotation类型作说明

    2.这些类型和它们所支持的类在java.lang.annotation包中可以找到。(@Target,@Retention,@Documented,@Inherited)

    4.自定义注解

    1.使用@Interface自定义注解时,自动继承了java.lang.annotation.Annotation接口

    5.反射(Reflection)

    1.Reflection(反射)是java被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法

    2.加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构这个对象就像一面镜子,透过这个镜子看到类的结构,所以,我们形象的称之为:反射。

    6.Class类

    对象照镜子后可以得到的信息:某个类的属性,方法和构造器,某个类到底实现了哪些接口。对于每个类而言,JRE都为其保留一个 不变的Class类型的对象。一个Class对象包含了特定某个结构(class/interface/enum/annotation/primitive type/void/[])的有关信息

    7.所有类型的Class对象

    那些类型可以有Class对象?


    1.什么是注解

    1.Annotation是从JDK5.0开始引入的新技术

    2.Annotation的作用:

    不是程序本身,可以对程序作出解释(这一点和注释(comment)没什么区别)

    可以被其他程序(比如:编译器等)读取。

    3.Annotation的格式:

    注解是以”@注释名“在代码中存在的,还可以添加一些参数值,例如:@SuppressWarnings(value="unchecked")

    4.Annotation在哪里使用?

    可以附加在package,class,method,field等上面,相当于给他们添加了额外的辅助,我们可以通过反射机制编程实现对这些元数据的访问

    2.内置注解

    1.@Override:定义在java.lang.Override中,此注释只适用于修饰方法,表示一个方法声明打算重写超类中的另一个方法声明

    2.@Deprecated:定义在java.lang.Deprecated中,此注释可以用于修饰方法,属性,类,表示不鼓励程序员使用这样的元素,通常是因为它很危险或者存在更好的选择

    3.@SuppressWarnings:定义在java.lang.SuppressWarnings中,用来抑制编译时的警告信息

    与前两个注释有所不同,你需要添加一个参数才能正确使用,这些参数都是已经定义好了的,我们选择性的使用就好了

    @SuppressWainings("all")

    @SuppressWainings("unchecked")

    @SuppressWainings(value={"unchecked","deprecation"})

    等等。。。。。

    3.元注解

    1.元注解的作用就是负责注解其他注解,java定义了4个标准的meta-annotation类型,他们被用来提供对其他annotation类型作说明

    2.这些类型和它们所支持的类在java.lang.annotation包中可以找到。(@Target,@Retention,@Documented,@Inherited)

    @Target:用于描述注解的适用范围(即:被描述的注解可以用在什么地方)

    @Retention:表示需要在什么级别保存该注释信息,用于描述注解的生命周期(SOURCE

    @Document:说明该注解将被包含在javadoc中

    @Inherited:说明子类可以继承父类中的该注解

    4.自定义注解

    1.使用@Interface自定义注解时,自动继承了java.lang.annotation.Annotation接口

    分析:

    @interface用来声明一个注解,格式:public@interface注解名{定义内容}

    其中的每一个方法实际上是声明了一个配置参数

    方法的名称就是参数的名称

    返回值类型就是参数的类型(返回值只能是基本类型,Class,String,enum)

    可以通过default来声明参数的默认值

    如果只有一个参数成员,一般参数名为value

    注解元素必须要有值,我们定义注解元素时,经常使用空字符串,0作为默认值

    5.反射(Reflection)

    1.Reflection(反射)是java被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法

    Class c = Class,forName("java.lang.String")

    2.加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构这个对象就像一面镜子,透过这个镜子看到类的结构,所以,我们形象的称之为:反射。

    6.Class类

    对象照镜子后可以得到的信息:某个类的属性,方法和构造器,某个类到底实现了哪些接口。对于每个类而言,JRE都为其保留一个 不变的Class类型的对象。一个Class对象包含了特定某个结构(class/interface/enum/annotation/primitive type/void/[])的有关信息

    1.Class本身也是一个类

    2.Class对象只能由系统建立对象

    3.一个加载的类在JVM中只会有一个Class实例

    4.一个Class对象对应的是一个加载到JVM中的一个.class文件

    5.每个类的实例都会记得自己是由哪个Class实例所生成

    6.通过Class可以完整地得到一个类中的所有被加载的结构

    7.Class类是Reflection的根源,针对任何你想动态加载,运行的类,唯有先获得相应的Class对象

    package com.qyx.www.reflection;
    ​
    public class Test03 {
        public static void main(String[] args) throws ClassNotFoundException {
            Person person = new Student();
            System.out.println("这个人是:" +person.name);
    ​
            //方式一:通过对象获得
            Class c1 = person.getClass();
            System.out.println(c1.hashCode());
    ​
            //方式二:forname获得
            Class c2 = Class.forName("com.qyx.www.reflection.Student");
            System.out.println(c2.hashCode());
    ​
            //方式三:通过类名.class获得
            Class c3 = Student.class;
            System.out.println(c3.hashCode());
    ​
            //方式四:基本内置类型的包装类都有一个Type属性
            Class c4 = Integer.TYPE;
            System.out.println(c4);
    ​
            //获得父类类型
            Class c5 = c1.getSuperclass();
            System.out.println(c5);
    ​
        }
    ​
    }
    ​
        class Person{
            public String name;
            public Person() {
            }
            @Override
            public String toString() {
                return "Person{" +
                        "name='" + name + '\'' +
                        '}';
            }
            public Person(String name) {
                this.name = name;
            }
        }
        class Student extends Person{
               public Student(){
                   this.name = "学生";
               }
    ​
        }
    ​
           class Teacher extends Person{
              public Teacher(){
                 this.name = "老师";
        }
    ​
    }

    7.所有类型的Class对象

    那些类型可以有Class对象?

    1.class:外部类,成员(成员内部类,静态内部类),局部内部类,匿名内部类

    2.interface:接口

    3.[]:数组

    4.enum:枚举

    5.annotation:注解@interface

    6.primitive type:基本数据类型

  • 相关阅读:
    全渠道商城授权管控经销商,渠道商管理系统助力医药企业快速扩大渠道规模
    Kafka 开启SASL/SCRAM认证 及 ACL授权(三)验证
    《学术小白学习之路14》主题建模——主题概率分布相似度计算
    计算两个整数的乘积——python
    基于 FPGA 实现 IIC(I2C) 协议控制 EEPROM 读写操作
    【图像重建】基于遗传算法实现二值图像重建附matlab代码
    mybatisplus 用@select注解,对查询结果使用handler处理结果
    【Linux】操作系统中的文件系统管理:磁盘结构、逻辑存储与文件访问机制
    镉系量子点 CdSe/ZnS QDs,硒化镉/硫化锌量子点(油溶性)
    【顺序表的应用-通讯录的实现】
  • 原文地址:https://blog.csdn.net/qq_60154877/article/details/126398018
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号