1、注解的概念
(1)注解和注释:
注释:是给程序员看的,便于其他人理解自己的程序
注解:是给虚拟机看的,符合一定格式的语法,主要的作用是可以代替配置文件,格式:@xxx
(2)配置文件和注解的优缺点:
注解优点:开发效率高,成本低
注解缺点:耦合性大,而且不利与后期维护
2、用注解代替配置文件
(1)创建一个servlet:
package pers.zhb.web;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
@WebServlet("/zhujieServlet")
public class ZhujieServlet extends javax.servlet.http.HttpServlet {
protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
}
protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
response.getWriter().write("wu han jia you!");
}
}
一般情况下需要配置web.xml文件,但是在运用了注解之后就不再需要配置文件了。
(2)运行结果:
3、JDK5的注解
(1)@Override:帮助检查覆盖的方法书写是否正确
public class Person {
private String name;
private int age;
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
当方法名错误的时候给出提示:
(2)@SuppressWarnings:压制警告
list:未使用发出警告:
@SuppressWarnings(“all”),压制所有警告:list发出的警告已经消失了
(3)@Deprecated:代表方法已经过时了
public class Test {
@Deprecated
public static void test(){
}
public static void test(String name,int age){
}
public static void main(String [] args){
Test.test();
Test.test("zhai",23);
}
}
4、自定义注解
(1)自定义注解和使用:
注解的定义:
public @interface Myanno {
String name();
String age();
}
注解的使用:
public class TestMyanno {
@Myanno(name="zhai",age="22")
public void test(){
}
}
5、注解的解析
(1)定义:
@Target({ElementType.METHOD,ElementType.TYPE})//定义注解的位置
@Retention(RetentionPolicy.RUNTIME)//访问级别
public @interface Myanno {
String name();
String age();
}
(2)使用:
public class TestMyanno {
@Myanno(name="zhai",age="22")
public void test(String str){
}
}
(3)解析:
public class MyAnnPaster {
public static void main(String[] Args) throws NoSuchMethodException {
Class cla=TestMyanno.class;
Method method=cla.getMethod("test",String.class);//获取show方法的字节码对象
Myanno myanno=method.getAnnotation(Myanno.class);//获取注解对象
System.out.println(myanno.name());
System.out.println(myanno.age());
}
}