注解
1.Annotation是JDK5.0开始引入的新技术。
2.Annotation的作用:
不是程序本事,可以对程序做出解释。(注释是写给机器的语言)
可以被其他程序读取。
3.Annotation的格式:
注解是以“@注释名”在代码中存在的,还在的,还可以添加一些参数值,例
如:@SuppressWarnings(value="unchecked").
4.Annotation在哪里使用?
可以附加在Package(包),class(类),method(方法),field(属性)等上面,相当于给他们添加额外的辅助信息,我们可以通过反射机制编程实现对这些元数据的访问
内置注解
@Overrid:定义在java.lang.Overrid中,此注释只适用于修饰方法,表示一个方法声明打算重写超类中的另一个方法声明。
@Deprecated:定义在java.lang.Deprecated中,此注释可以用于修饰方法,属性,类,表示不鼓励程序员使用这样的元素,通常是因为它很危险或者存在更好的选择。
@SuppressWarnings:定义在java.lang.SuppressWarnings中,用抑制编译时的警告信息。
与前两个注释有所不同,你需要添加一个参数才能正确使用,这些参数都是已经定义好了的。
元注解
元注解的作用就是负责注解其他注解,Java定义4个标准的meta-annotation类型,他们被用来提供对其他annotation类型作用说明。
这些类型和它们所支持的类在java.lang.annotation包中可以找到。
@Target:用于描述注解的使用范围
@Retention:表示需要在什么级别保存该注释信息,用于描述注解的生命周期
@Document:说明该注解将被包含在javadoc中
@Inherited:说明子类可以继承父类中的该注解
静态语言
与动态语言相对应的,运行时结构不可以变的语言就是静态语言。
动态语言
是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。通俗的说就是在运行时代码可以根据某些条件可以改变自身结构。
反射
反射是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象.
反射就是把java类中的各种成分映射成一个个的Java对象
java.lang.Class:代表一个类
java.lang.reflect.Method:代表类的方法
java.lang.reflect.Field:代表类的成员变量
java.lang.reflect.Constructor:代表类的构造器
反射的优点:
反射提高了程序的灵活性和扩展性,降低耦合性,提高自适应能力。它允许程序创建和控制任何类的对象,无需提前硬编码目标类
反射的缺点
1.性能问题
使用反射基本上是一种解释操作,用于字段和方法接入时要远慢于直接代码。因此Java反射机制主要应用在对灵活性和扩展性要求很高的系统框架上,普通程序不建议使用。
2.使用反射会模糊程序内部逻辑
程序人员希望在源代码中看到程序的逻辑,反射等绕过了源代码的技术,因而会带来维护问题。反射代码比相应的直接代码更复杂。
3.安全限制
使用反射技术要求程序必须在一个没有安全限制的环境中运行。如果一个程序必须在有安全限制的环境中运行,如Applet,那么这就是个问题了。
4.内部暴露
由于反射允许代码执行一些在正常情况下不被允许的操作(比如访问私有的属性和方法),所以使用反射可能会导致意料之外的副作用--代码有功能上的错误,降低可移植性。反射代码破坏了抽象性,因此当平台发生改变的时候,代码的行为就有可能也随着变化。