狂神注解和反射学习笔记

注解和反射

注解

什么是注解

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

Annotation的作用
  • 不是程序本身,可以对程序作出解释(这一点和注释没有什么区别)
  • 可以被其他程序读取
Annotation的格式

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

注解在哪里使用

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

自定义注解

  • @interface用来声明一个注解,格式public@interface注解名{定义内容}
  • 其中每一个方法实际上是声明了一个配置参数
  • 方法的名称就是参数的名称
  • 返回值的类型就是参数的类型(返回值只能是基本类型,Class,String,enum)
  • 可以通过default来声明参数的默认值
  • 如果只有一个参数成员,一般参数名为value
  • 注解元素必须要有值,我们定义注解元素是,经常使用空字符串,0作为默认值

反射

什么是反射

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

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

反射的优点和缺点

优点:

​ 可以实现动态的穿件对象和编译,体现出很大的灵活性

缺点:

​ 对性能有影响。使用反射基本上是一种解释操作,我们可以告诉JVM,我们希望做什么并且他满足我们的要求。这类操作总是慢与直接执行相同的操作。

反射相关的主要API

  • java.lang.Class:代表一个类
  • java.lang.reflect.Method:代表类的方法
  • java.lang.reflect.Field:代表类的成员变量
  • java.lang.reflect.Constructor:代表类的构造器

那些类型可以有Class对象

  • class:外部类,成员(成员内部类,静态内部类),局部内部类,匿名内部类。
  • interface:接口
  • []:数组
  • enum:枚举
  • annotation:注解@interface
  • primitive type:基本数据类型
  • void

什么时候会发生类的初始化

  • 类的主动引用(一定会发生类的初始化)
    • 当虚拟机启动,先初始化main方法所在的类
    • new 一个类的对象
    • 调用类的静态成员变量(出了Final)和静态方法
    • 使用java.lang.reflect包的方法对类进行反射调用
    • 当初始化一个类,如果其父类没有被初始化,则先回初始化他的父类
  • 类的被动引用
    • 当访问一个静态域时,只有真正声明这个域的类才会被初始化。如:当通过子类引用父类的静态变量,不会导致子类的初始化
    • 通过数组定义类引用,不会触发此类的初始化
    • 引用常量不会触发此类的初始化(常量在链接阶段就存入调用类的常量池中了)

获取运行时类的完整结构

​ Field, Method, Constructor, Superclass, Interface, Annotation

包括:

  • 实现类的全部接口
  • 所继承的父类
  • 全部的构造器
  • 全部的方法
  • 全部的Field
  • 注解
  • 。。。

汇编

概述

学习路线:

语言

进制

进制如何运算

二进制

数据宽度

有符号数和无符号数

原码反码补码

位运算

位运算计算

汇编

寄存器

内存

汇编指令

内存复制

堆栈的指令

汇编如何写函数

堆栈传参

堆栈平衡

外挂

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值