注解

注解入门

  • 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–>对象关系映射

原文地址:http://www.cnblogs.com/song-hua/p/16817019.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性