注解 Annotation
作用:
1.对程序作出解释
2.可以被其他程序(比如编译器)读取 通过反射读取
//什么是注解
public class demo01 extends Object{
@Override //重写的注解
public String toString() {
return super.toString();
}
}
Annotation的格式:
以“@注释名”早代码中存在,还可以添加一些参数值
内置注解
import java.util.ArrayList;
import java.util.List;
//什么是注解
public class demo01 extends Object{
@Override //重写的注解
public String toString() {
return super.toString();
}
@Deprecated //不推荐,但是可以使用,存在更好的方式
public static void test(){
System.out.println("Deprecated");
}
@SuppressWarnings("all") //加注解后标黄去掉,抑制警告
public void test02(){
List list = new ArrayList();
}
public static void main(String[] args) {
test();
}
}
元注解
import java.lang.annotation.*;
@MyAnnotation
public class demo02 {
//@MyAnnotation 如果只定义了@Target(value = ElementType.METHOD),只在此处有效
public void test(){
}
}
//定义一个注解
//Target表示我们的注解可以用在哪些地方
@Target(value = {ElementType.METHOD,ElementType.TYPE})
//Retention 表示我们的注解在什么地方有效
//runtime>class>source
@Retention(value = RetentionPolicy.RUNTIME )
@Documented //表示是否讲我们的注解生成在JAVAdoc中
@Inherited //表示子类可以继承父类的注解
@interface MyAnnotation{}
自定义注解 使用**@interface** ,自动继承了java.lang.annotation.Annotation接口
java.lang.annotation.*;
public class demo02 {
@MyAnnotation(name ="cici",schools = {"XiDian"})
//如果定义的时候写了默认值default ""这里就可以不写,但是如果没有定义默认值,这里就必须写,比如,schools没有给他默认值,这里不写就会报错
public void test(){
}
@MyAnnotation.NewAnnotation("new") //value可以不写,只有value
public void test2(){
}
}
//自定义注解
//@Target(ElementType.TYPE) //表示它可以在类上定义
@Target({ElementType.TYPE,ElementType.METHOD}) //表示它既可以在类上定义,又可以在方法上定义
@Retention(RetentionPolicy.RUNTIME) //表示他在运行时有效
@interface MyAnnotation{
//这是注解的参数 参数类型+参数名() 格式,这里不是方法
String name() default "";
int age() default 0;
int id() default -1; //-1表示不存在
String[] schools();
String[] company() default("my company");
@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@interface NewAnnotation{
String value();
//如果注解只有一个值,可以用value来命名,在表示时,value可以省略不写,只有value可以省略
}
反射
反射可以实现动态创建对象和编译,具有很大的灵活性,但是对性能有影响,相当于一种解释操作,
告诉JVM我们希望做什么并且他满足我们的要求,慢于直接执行相同的操作
静态语言VS动态语言
只要元素类型与维度一样,就是同一个Class