首页 > 编程语言 > 详细

Java基础----注解与反射

时间:2021-04-14 16:04:05      阅读:39      评论:0      收藏:0      [点我收藏+]

注解-Annotation:

  • 作用:不是程序本身,可以对程序做出解释,可以被其他程序读取
  • 例如@Override,声明了之后必须重写父类方法。
  • 三个内置注解:
    Override、Deprecated、SuppressWarings
  • 四个元注解:负责注解其他注解
    Target(表示注解可以用在哪些地方,如类、方法)、Retention(用于描述注解的生命周期)、Document、Inherited
  • 自定义注解:@interface
  • 注解的读取:通过反射机制编程实现,getAnnotation

反射--Reflection:

  • 是Java被视为动态语言的关键,反射机制允许程序在执行期间借助于ReflectionAPI取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。举例:

    • Class c = Class.dorName("java.lang.String")
    • 正常方式:引入需要的“包类“名称---->通过new实例化---->取得实例化对象
    • 反射方式:实例化对象--->getClass()方法--->得到完整的"包类"名称
  • 可以获取运行时类的完整结构:

    • Field、Method、Constructor、Superclass、Interface、Annotation
  • 获得之后可以做什么:

    • 动态创建对象:调用newInstance()方法,类必须有无参构造器;或者通过构造器创建对象:
      • Class c1 = Class.forName("User"); User user = (User)c1.newInstance();//本质上调用类的无参构造器
    • 调用指定的方法或属性;【补充:setAccessible()方法作用是启动和关闭访问安全检查的开关,为true时关闭。】
  • 反射操作注解:

    • 补充:ORM----对象关系映射,java中的类对应数据库中的表,
  • 扩展知识:主要API:java.lang.Class

    • 注意:一个类在内存中只有一个Class对象,一个类被加载后,类的整个结构都会被封装在Class对象中。只要元素类型与维度一样就是同一个Class。
    • Class的获取方式:
      • 通过对象获得:getClass()
      • cllass.forname获得
      • 类名.class获得
      • 基本内置类型的包装类的Type属性:Integer.Type
    • 类的加载过程:
      • 加载:将class文件字节码内容加载到内存(堆)中,生成一个代表这个类的java.lang.Class对象;
      • 链接:将java类的二进制代码合并到JVM的运行状态:验证安全、为static变量分配内存设置初始值、常量池内的符号引用替换为引用地址;
      • 初始化:Clinit方法,自动收集类中所有类变量和静态代码块中的语句合并。

补充知识:Java内存:

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

Java基础----注解与反射

原文:https://www.cnblogs.com/soleil0510/p/14656657.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!