1、注解
1 . 内置注解
-
@Override,定义在lang.Override中,只用于修饰方法,表明表明一个方法声明打算重写超类中另一个声明。
-
@Depracated,定义在lang.Depracated中,修饰方法,属性,类,表明不鼓励使用,很危险或有更好的存在。
-
@Suppress Warnings,定义在lang.Suppress Warnings中,用来抑制编译时的警告信息 , 需要参数。
2 . 元注解
负责注解其他注解,java定义了4个标准的meta-annotation类型,用来提供对其他annotation类型作说明。
这些类型和他们支持的类在lang.annotation包中可以找到
-
@Target,用于描述注解的使用范围,即注解可以用在哪些地方。
-
@Retention,表示需要在什么级别保存该注释信息,用于描述注解的生命周期(SOURCE<CLASS<RUNTIME(一般情况))
-
@Document,说明该注解将被包含在javadoc中。
-
Inherited,说明子类可以继承父类中的该注解。
3 . 自定义注解
//自定义一个注解
//注解的作用域Target,TYPE类,Method方法
@Target({ElementType.TYPE,ElementType.METHOD})
//注解的生命周期,默认都用RUNTIME运行时
@Retention(RetentionPolicy.RUNTIME)
//@interface自定义注解后加注解名
@interface Myannotation{
//注解参数表示为 :参数类型 + 参数名();
//使用时为@Myannotation(name = "名字")
String name() default "a";//默认值为a,不必须传参
int age();//无默认值,使用该注解时必须传入该参数
int id() default -1;//默认值为-1,代表不存在
//当注解中无上述参数,只有一个时参数名可设置为value,传参时候不需要参数名
String value();
}
2、反射
Java Reflection(反射)是java被视为动态语言的关键,反射机制允许程序在执行期借助Reflction API去的任何类的内部信息并能直接操作任何对象的内部属性以及方法。
-
优点:动态创建对象和编译,体现灵活性。
-
缺点:对性能有影响,反射属于解释操作,慢于直接操作。
通过反射获取类实例方式
//新建一个类人类,类学生继承人类
class Person{}
class Student extends Person{}
//创建一个学生对象
Person person = new Student();
//方式1:通过对象获得学生类
Class c1 = person.getClass();
//方式2:forname获得学生类
Class c2 = Class.forName("src.biji.Student");
//方式3:通过类名.class获得学生类
Class c3 = Student.class;
//方式4:通过父类类型,获取学生的父类人类
Class c4 = c1.getSuperclass();
//方式5:基本内置类型的包装类有一个Type属性,获取int类型
Class c5 = Integer.TYPE;