首页 > 其他分享 >注解和反射

注解和反射

时间:2022-10-23 14:35:07浏览次数:48  
标签:反射 Java 语言 对象 注解 加载

注解

注解入门

  • Annotation不是程序本身,可以对程序作出解释
  • 可以被其他程序(比如:编译器等)读取

内置注解

  • @Override
  • @Deprecated
  • @SuppressWarnings

元注解

  • 元注解的作用就是负责注解其他注解
  • @Target:表示我们的注解可以放在哪些地方
  • @Retention:表示我们的注解在什么地方还有效,runtime>class>source
  • @Documented:表示是否将我们的注解生成在JAVAdoc中
  • @Inherited:子类可以继承父类的注解

自定义注解

  • 使用@interface自定义注解格式:public @interface 注解名{定义内容}

反射

静态vs动态语言

  • 动态语言是一类在运行时可以改变结构的语言
    • 主要动态语言:Object-C、C#、JavaScript、PHP、Python等
  • 静态语言与动态语言相对应的,运行时结构不可变的语言就是静态语言。如:Java、C、C++
    • Java不是动态语言,但Java可以称之为“准动态语言”。即Java有一定的动态性,我们可以
      利用反射机制获得类似动态语言的特性。Java的动态性让编程的时候更加灵活。

Java Reflection

  • Reflection(反射)是Java被视为动态语言的关键,反射机制允许程序在执行期借助于
    Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法
  • 加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象,这个对象就包含了完整的类的结构信息

Class对象

  • 哪些类型可以有Class对象
    • class:外部类,成员内部类,静态内部类,局部内部类,匿名内部类
    • interface:接口
    • []:数组
    • enum:枚举
    • annotation:注解@interface
    • primitive type:基本数据类型
    • void

Java内存分析

  • 堆:存放new的对象和数组
    可以被所有的线程共享,不会存放别的对象引用
  • 栈:存放基本变量类型(会包含这个基本类型的具体数值)
    引用对象的变量(会存放这个引用在堆里面的具体地址)
  • 方法区:可以被所有的线程共享
    包含了所有的class和static变量

类加载器

  • 类加载的作用:将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区的与形式数据结构
  • 类缓存:标准的JavaSE类加载器可以按照要求查找类,一旦某个类被加载到类加载器中,它将维持加载
    一段时间。不过JVM垃圾回收机制可以回收这些Class对象

获取运行时类的完整结构

  • 通过反射获取运行时类的完整结构
    • Field
    • Method
    • Constructor
    • Superclass
    • Interface
    • Annotation
  • 创建类的对象:调用Class对象的newInstance()方法
    • 1.类必须有一个无参构造器
    • 2.类的构造器的访问权限需要足够
  • invoke:激活的意思

setAccessible

  • Method和Field、Constructor对象都有setAccessible()方法
  • setAccessible作用是启动和禁用访问安全检查的开关

反射操作泛型

  • Java采用泛型擦除的机制来引入泛型,但是一旦编译完成,所有和泛型有关的类型全部擦除
  • ParameterizedType:表示一种参数化类型,比如Collection
  • GenericArrayType:表示一种元素类型是参数化类型或者类型变量的数组类型
  • TypeVariable:是各种类型变量的公共父接口
  • WildcardType:代表一种通配符类型表达式

反射操作注解

  • getAnnotations
  • getAnnotation

练习:ORM

  • 了解什么是ORM?
    • Object relationship Mapping-->对象关系映射

标签:反射,Java,语言,对象,注解,加载
From: https://www.cnblogs.com/song-hua/p/16817019.html

相关文章

  • Spring注解开发入门(五)@Value注解从properties文件读取值,config类加载properties文件
    要想让@Value注解获得properties文件当中的值,第一步需要Spring容器加载properties文件。这就需要在配置类里面使用@PropertySoource注解来知道properties文件的路径了。......
  • Spring注解开发入门(四)@Value注解给简单类型直接赋值
    简单数据类型用@Value注解自动装配赋值,String是简单类型引用数据类型用@Autowired注解自动装配。引用类型指的是Java类对象。通过@Value注解直接赋值:@Value("20110009......
  • Spring注解开发入门(四)自动装配和@Autowired注解
    @Autowired用来配置类与类之间的依赖关系,即,一个类要调用另一个类的对象时就可以通过这个注解来自动装配。1.BookDaoImpl类:packagecom.oxygen.dao.impl;importcom.ox......
  • Spring注解开发入门(三)Bean的生命周期和作用范围
    1.Bean的作用域,其实就是bean采用单例模式还是非单例模式放在网络编程环境是指bean在http请求的作用范围的过程! 在java类上加上@Scope注解,可以设置bean的作用范围p......
  • Spring的@Configiration和@ComponentScan注解代替xml配置文件
    1.使用xml配置文件配置Spring容器:<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:context="http:/......
  • dremio 21 版本之后反射No File System scheme matches 问题解决
    实际属于一个老问题了,整理下,方便使用,主要是我们在使用反射的时候碰到的问题问题如下UnknownFormatConversionException:Conversion='Unknownformat(pdfs)conversio......
  • 【Java SE】枚举类和注解
    1.枚举类的使用当类的对象由有限个,确定的时候,我们称这种类为枚举类。当需要定义一组常量时,建议使用枚举类。而当枚举类中只有一个对象时,可以使用单例模式。1.1enmu关键......
  • java反射
    什么是反射?反射就是Reflection,Java的反射是指程序在运行期可以拿到一个对象的所有信息。正常情况下,如果我们要调用一个对象的方法,或者访问一个对象的字段,通常会传入对象实例......
  • day15 Socket网络编程 & 反射
    day15socket网络编程IP地址+端口号组成socket套接字,是tcp和udp的基础websocket,前端socket原理机制1)通信两端都有socket2)网络通信其实就是socket之间的通信3)数据在......
  • 反射
    1.简介Java反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;并且能改变它的属性。由此反射被称为框架......