一.注解(Annotation)
定义:注解就是给程序添加一些信息,用字符@开头,可以用来修饰后续的其他代码元素,比如类、接口、字段、方法、参数、构造方法等,往往注解还搭配编译器、程序运行时以及其他工具或者插件使用,用于实现代码功能的增强或者修改程序的行为等操作
1.@Overide (重写方法的注解)
2.查看注解(ctrl+点击注解)
Annotation作用:
(1)不是程序本身,但是可以对程序作出解释
(2)可以被其他程序读取
Annotation格式:
@注释名还可以添加一些参数,例如:@SupperWarnning(value=”zhangsan”)
Annotation使用范围:
可以附加在一些package(包),class(类),method(方法),filed(属性)上面,相当于给他们添加额外的辅助信息。
3.内置注解:
@Overide:定义在java.lang.Overide中,此注释只用于修饰方法,表示一个方法声明打算重写超类的另一个方法声明。
@Deprecated:定义在java.lang.Deprecated,此注释用于修饰属性,方法,类(一般不使用)
@SuppressWarnings(镇压警告),定义在java.lang.SupperWarnings中,用来抑制编译时的警告信息。
需要添加参数(@SuppressWarnings(“all”),@SuppressWarnings(“unchecked”)(镇压未检查的),SuppressWarnings(value={“unchecked”,”deprecation”}))
4.元注解:
1.@Target(用来描述注解的使用范围)@Target(value = ElementType.METHOD)(MeTHOD表示只能在方法中使用,加上TYPE后可以再类上使用,不报红)
@Target(value = {ElementType.METHOD,ElementType.TYPE})
2.@Retention(表示需要在什么级别保存该注释信息,用来描述注解的生命周期):(runtime(运行时)>class(编译时)>sources)
3.@document(说明该注解被包含在javadoc中)
java反射机制提供的功能:
4.@Inherited(说明子类可以继承父类中的该注解)
自定义注解:
二.反射
1.Reflection(反射)是java被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部信息及方法。
Class c=Class.ForName(“com.mysql.jdbc”)
加载完类后,在堆内存的方法区就产生了一个Class类型的对象,这个对象就包含了完整的类的信息。
正常方式:引入需要的包类名称---->通过new实例化---->取得实例化对象
反射方式:实例化对象---->getClss()方法---->得到完整的”包类”名称
2.
在运行时(1.判断任意一个对象所属的类,构造任意一个类的对象,判断任意一个对象所具有的成员及方法,获取泛型信息,调用任意一个对象的成员变量及方法,处理注解,生成动态代理。)
两次输出结果一致,说明c1,c2属于同一个Class类
4.在Object中定义了一个getClass方法,这个方法的返回值是一个Class类,此类是java反射的源头。
5.获取类的几种方式:
1.若已知具体的类,通过类的class属性获取。
Class c1=Person.class
2.若已知某个类的实例,调用该类的getClass方法获取class对象:
Class c2=person.getClass()
3.若已知一个类的全类名,可通过该类的静态方法forName获得:
Class3=Class.forName(“Reflection.Person”)
6.java内存分析
7.获取类的运行时结构
8.动态创建对象执行方法
9.反射操作注解



