首页 > 编程语言 >java 注解和反射

java 注解和反射

时间:2024-05-30 16:00:37浏览次数:19  
标签:反射 java System Class 注解 c1 class out

8.注解和反射
8.1 什么是注解annotation jkd5.0提供的
8.2 内置注解:
@override 覆盖方法
@Deprecated不推荐使用,
@suppressWarnings抑制警告信息:
8.3 元注解:解释其他注解的注解meta-annotation
@Target 描述注解范围
@Retention 注解生命周期:source<class<runtime
@Documented:注解被包含在javadoc中
@Inherited 说明子类可以继承父类中的注解

 /**
 *     @Target 描述注解范围
 *     @Retention 注解生命周期:source<class<runtime
 *    @Documented:注解被包含在javadoc中
 *    @Inherited 说明子类可以继承父类中的注解
 * */
@Retention(value= RetentionPolicy.RUNTIME)
@Target(value = ElementType.METHOD)
@Documented
@Inherited
@interface MyAnnotation{
    //注解的参数:参数类型+参数名()
    String name() default "";
    int age();
    String[] schools() default {"beida","qinghua"};
}

@MyAnnotation(age=10,name = "zhangsan",schools = {"wuda"})
public void test(){

}

8.4 自定义注解:使用@interface声明自定义注解
@interface MyAnnotation{
//注解的参数:参数类型+参数名()
String name() default "";
int age();
String[] schools() default {"beida","qinghua"};
}

8.5 反射:Reflection 程序在运行期通过reflection api获取任何类的内部信息
反射机制:动态语言:在运行时可以改变其结构的语言,静态语言,
获取class实例:一个类一个class对象
类加载与classLoader
创建运行时类的对象
获取运行时类的完整结构
调用类的指定结构对象
8.6 获得反射对象:一个类一个class对象
Person ps=new Person();

    Class c1= ps.getClass();
    Class c2=Person.class;

    System.out.println(c1.hashCode());
    System.out.println(c2.hashCode());

    Class c3= Object.class;
    Class c4= Comparable.class;
    Class c5= String[].class;
    Class c6= int[].class;
    Class c7= ElementType.class;
    Class c8= Integer.class;
    Class c9= void.class;
    Class c10= Class.class;

    System.out.println(c3);
    System.out.println(c4);
    System.out.println(c5);
    System.out.println(c6);
    System.out.println(c7);
    System.out.println(c8);
    System.out.println(c9);
    System.out.println(c10);

8.7 得到class类的几种方式
java.lang.class
java.lang.reflect.Method
java.lang.reflect.Field
java.lang.reflect.Constructor
8.8.类的加载:类的加载--》连接--》初始化
8.9 类的加载内存分析
8.10 分析类初始化
8.11获取类的运行时结构:获取方法,属性,构造器
c1.getName();
c1.getSimpleName();
c1.getFields(); //get 本类及父类的全部public
c1.getDeclaredFields() //get 本类全部的属性
c1.getDeclaredMethods();
c1.getDeclaredConstructors()
8.12 动态创建对象执行方法
Constructor con=c1.getDeclaredConstructor();
User user= (User)con.newInstance();
Field name=c1.getDeclaredField("name");
name.setAccessible(true) 启用/禁用安全检查开关
8.13 性能对比分析
反射会 降低性能
long starttime=System.currentTimeMillis();

long endtime=System.currentTimeMillis();

endtime - starttime
9毫秒,6秒,2秒
8.14 获取泛型
public void test01(Map<String,User> map, List list){
System.out.println("test01");
}
8.15.获取自定义注解的值
Class c1=Class.forName("com.kuang.reflection.Student2");
TableField labe=c1.getAnnotation(TableField.class);
String value=labe.value();
System.out.printIn(value);

//获取类指定的注解值
Field f=c1.getDeclaredField("name");
Fieldkuang an=f.getAnnoteation(Fieldkuang.class);
System.out.printIn(an.columnName());
System.out.printIn(an.type());
System.out.printIn(an.length());

标签:反射,java,System,Class,注解,c1,class,out
From: https://www.cnblogs.com/chenshaojun2008/p/18222560

相关文章

  • Java 异常处理 throws
    Java异常处理throwsJava中异常对象的生成有两种方式:由虚拟机自动生成:程序运行过程中,虚拟机检测到程序发生了问题,那么针对当前代码,就会在后台自动创建一个对应异常类的实例对象并抛出。由开发人员手动创建:new异常类型([实参列表]);,如果创建好的异常对象不抛出对程序......
  • Java 中 controller & service & dao 之间的关系
    开门见山:Controller层调用Service层,Service层调用DAO层,DAO层负责操作Model层,从而完成整个系统的业务与处理、数据访问等功能。Model数据库实体层Model层就是数据库实体层,也被称为entity层,Bean,pojo或者po。一般数据库一张表对应一个实体类,类属性和表字段一一对应......
  • Java学习笔记(三)
    Java学习笔记(三)对象和类对象:对象是类的一个实例(对象不是找个女朋友),有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。类:类是一个模板,它描述一类对象的行为和状态。下图中汽车为类(class),而具体的每辆车为该汽车类的对象(object),对象包含了......
  • Java 对象关系映射(ORM)框架:介绍Java的经典ORM框架,如Hibernate,MyBatis,及其用法
    什么是ORM对象关系映射(ObjectRelationalMapping,简称ORM)是一种程序设计技术,用于实现面向对象编程语言中的对象和关系数据库中的数据之间的映射。在其他words,它就是创建一个可在编程语言里使用的、能感知数据库模式结构的虚拟对象数据库。 ORM的主要作用如下: ......
  • Java Microservices 和 Spring Cloud:介绍微服务架构,并使用Spring Cloud来说明其在Java
    介绍微服务架构是一种软件开发技术,它将一个大型的单体应用系统拆分为多个小的、独立的服务,每个服务都可以独立部署和运行,各个小服务之间通过网络连接进行通信(通常是用HTTP/REST或消息队列)。每一个微服务都围绕着一个特定的业务功能进行构建,它们独立运行,在自己的进程内进行数......
  • java版微信公众号开发(八)获取jsapi_ticket,生产JS-SDK签名
    jsapi_ticket是公众号用于调用微信JS接口的临时票据。只用正确的签名才能使用JS调用微信接口,小编在这里整理一个一套完整的获取方法。废话不多说,直接上干货。//importjava.security.MessageDigest;/***获取位置信息签名*@AuthorFM_南风*@Date2024......
  • 数据结构之栈(Java,C语言的实现)以及相关习题巩固
    目录栈概念以及代码实现例题232.用栈实现队列1614.括号的最大嵌套深度234.回文链表1614.括号的最大嵌套深度LCR123.图书整理I206.反转链表402.移掉K位数字844.比较含退格的字符串LCR036.逆波兰表达式求值[面试题03.01.三合一](栈概念以及代码实现栈是仅限于在......
  • 数据结构 顺序表(C语言 与 Java实现)以及部分练习题
    目录数据结构数组(顺序表)特点使用Java实现更高级的数组C语言实现总结优点缺点例题26.删除有序数组中的重复项1.两数之和27.移除元素153.寻找旋转排序数组中的最小值485.最大连续1的个数414.第三大的数2656.K个元素的最大和LCP06.拿硬币2057.值相等的最小索引26.删......
  • 基于Java+Vue的园区智能化管理系统:综合管控,推进数字化转型(代码分享)
    前言:智慧园区管理平台是一个集成了多种功能的综合性系统,旨在通过信息化、智能化手段提升园区的管理效率和服务质量。以下是针对系统的各个功能模块的简要描述:一、楼栋管理会务管理:管理园区内的会议预约、会议室使用等。园区信息:展示园区的基本信息,如位置、面积、规划等。楼......
  • Java中Comparable接口和Comparator接口的区别(如果想知道Java中Comparable接口和Compar
        前言:在Java中,Comparable接口和Comparator接口都用于对象之间的比较和排序,但它们在使用和设计上存在一些关键的区别。✨✨✨这里是秋刀鱼不做梦的BLOG✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客        本篇文章主要讲解的是J......