反射与注释
一、注解
1、定义
注解提供的是有关程序的数据,该数据却不属于程序本身。
基本语法:
@Override //@注解类型名
去掉注解对程序运行不会产生影响。例如之前写过的工厂类与汽车类的代码,即使改成这样也能正常运行:
public abstract class Factory {
public abstract void process();
}
public class Car extends Factory{
public void process() {
System.out.println("汽车厂生产的是汽车");
}
public static void main(String[] args)
{
Factory m=new Car();
m.process();
}
}
然而注解并非没有用处,它常常与反射结合被运用在框架中。
使用阶段 | 作用 |
---|---|
编译前 | 为编译器提供编译检查的依据,辅助检查代码错误或抑制检查异常 |
编译中或发布时 | 给编译器提供信息生成代码或给其他工具提供信息生成文档等 |
运行时 | 在运行过程中提供信息给解释器,辅助程序执行 |
2、Override
通过在方法显使用指定的注解,可以显著的减少继承时重写父类方法错误。加上@Override注解的代码,在重写有错误时会报错。
例如上面汽车生产的代码:
public abstract class Factory {
public abstract void process();
}
public class Car extends Factory{
@Override
public void process(String products) {
System.out.println("汽车厂生产的是"+products);
}
public static void main(String[] args)
{
Factory m=new Car();
m.process("汽车");
}
}
这段代码存在明显的错误,产生以下提示:
j a v a : c o m . t e s t . C a r 不 是 抽 象 的 , 并 且 未 覆 盖 c o m . t e s t . F a c t o r y 中 的 抽 象 方 法 p r o c e s s ( ) java: com.test.Car不是抽象的, 并且未覆盖com.test.Factory中的抽象方法process() java:com.test.Car不是抽