classParentClass1{publicvoidmyMethod1(){...}}classClass1extendsParentClass1{publicvoidmyMethod2(){...}}建立Class1的实例,而且调用myMethod1方法ParentClass1c1=newClass1();c1.myMethod1();以上的代码能够正常编译通过和执行。可是在写Class1的代码时,误将myMethod1写成了myMethod2,然而在调用时,myMethod1并未被覆盖。因此,c1.myMethod1()调用的还是ParentClass1的myMethod1方法。更不幸的是,程序猿并未意识到这一点。因此,这可能会产生bug。假设我们使用Override来修饰Class1中的myMethod1方法,当myMethod1被误写成别的方法时,编译器就会报错。因此,就能够避免这类错误。classClass1extendsParentClass1{@Override//编译器产生一个错误publicvoidmyMethod2(){...}}以上代码编译不能通过,被Override凝视的方法必须在父类中存在相同的方法程序才干编译通过。也就是说仅仅有以下的代码才干正确编译。classClass1extendsParentClass1{@OverridepublicvoidmyMethod1(){...}}Deprecated
这个凝视是一个标记凝视。所谓标记凝视,就是在源程序中增加这个标记后,并不影响程序的编译,但有时编译器会显示一些警告信息。那么Deprecated凝视是什么意思呢?假设你常常使用eclipse等IDE编写java程序时,可能会常常在属性或方法提示中看到这个词。假设某个类成员的提示中出现了个词,就表示这个并不建议使用这个类成员。由于这个类成员在未来的JDK版本号中可能被删除。之所以在如今还保留,是由于给那些已经使用了这些类成员的程序一个缓冲期。假设如今就去了,那么这些程序就无法在新的编译器中编译了。讲到这,可能你已经猜出来了。Deprecated凝视一定和这些类成员有关。说得对!使用Deprecated标注一个类成员后,这个类成员在显示上就会有一些变化。在eclipse中很明显。让我们看看图1有哪些变化。图1加上@Deprecated后的类成员在eclipse中的变化
从上图能够看出,有三个地方发生的变化。红色框里面的是变化的部分。1.方法定义处2.方法引用处3.显示的成员列表中发生这些变化并不会影响编译,仅仅是提醒一下程序猿,这种方法以后是要被删除的,最好别用。Deprecated凝视另一个作用。就是假设一个类从另外一个类继承,而且override被继承类的Deprecated方法,在编译时将会出现一个警告。如test.java的内容例如以下:
Methodmethod=TestAnnotation.class.getMethod("myMethod",null);Annotationannotation=method.getAnnotation(MyAnnotation.class);注:要想使用反射得到凝视信息,这个凝视必须使用@Retention(RetentionPolicy.RUNTIME)进行凝视。总结凝视是J2SE5.0提供的一项很有趣的功能。它不但有趣,并且还很实用。EJB3规范就是借助于凝视实现的。这样将使EJB3在实现起来更简单,更人性化。还有Hibernate3除了使用传统的方法生成hibernate映射外,也能够使用凝视来生成hibernate映射。总之,假设能将凝视灵活应用到程序中,将会使你的程序更加简洁和强大。