zoukankan      html  css  js  c++  java
  • 类加载器、注解

    类加载器

    类加载器就是加载字节码文件(.class)

    demo.java ->编译器->demo.class->类加载器 (将.class字节码文件加载到内存并且生成字节码对象Class)->可以进行反射 对Class对象在运行出结果之前进行动态的修改

    类加载器的种类 有三种 不同类加载器加载不同的

    1.BootStrap:引导类加载器-家在都是最基础的文件

    2.ExtClassLoader:扩展类加载器 -家在都是基础的文件

    3.AppClassLoader:应用类加载器 -三方jar包和自己编写的java文件

    获得类加载器

    ClassLoader 字节码对象.getClassLoader();

    注解

    注解就是符合一定格式的语法 @xxx

    注解的作用:

      注释:给程序员看的

      注解:给jvm看的,给机器看的

    注解在目前最主流的应用是:代替配置文件

    关羽配置文件与注解开发的优缺点:

      注解优点:开发效率高 成本低

      注解缺点:耦合性大 并不利于后期维护

    @Override:告知编译器此方法是重写的

    @Deprecated:标注过时的

    @SuppressWarnings:压制警告 让编译器不报黄线 红线

    不同的注解只能在不同的位置使用(方法、字段、类上)

    @WebServlet(name = "TestServlet",urlPatterns = "/TestServlet")
    public class TestServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
        }
    }

    @WebServlet注解 相当于在web.xml中配置如下

        <servlet>
            <servlet-name>TestServlet</servlet-name>
            <servlet-class>com.david.web.TestServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>TestServlet</servlet-name>
            <url-pattern>/TestServlet</url-pattern>
        </servlet-mapping>

    自定义注解

    关键字 @interface

    注解的属性:

      语法:返回值 名称();

    package com.david.myInterface;
    //定义注解
    public @interface zhujie {
        //注解的属性
        String name();
        //定义属性 默认值28 调用时可以不写
        int age() default 28;
    }

    使用注解

    @zhujie(name="haha")
        public boolean AddUser(User user) throws SQLException {
            UserDao dao = new UserDao();
            return dao.AddUser(user);
        }

    注意:如果属性的名字是value,并且注解的属性只有一个,那么使用注解时可以省略value

    package com.david.myInterface;
    //定义注解
    public @interface zhujie {
        String value();
    }

    使用时可以省略value="xxx"

    @zhujie("xxx") 

    注解的属性类型只能是以下几种:

    基本类型、String、枚举类型、注解类型、Class类型、以上类型的数组类型

    元注解:代表修饰注解的注解,作用是限制定义的注解的特性

    @Retention

      SOURCE:注解在源码级别可见

      CLASS:注解在字解码文件级别可见

      RUNTIME:注解在整个运行阶段都可以见
    @Target

      代表注解修饰的范围:类上使用、放过发上使用,或字段上使用

      FIELD:字段上可用此注解

      METHOD:方法上可以用此注解

      TYPE:类/接口上可以使用此注解

    @Target({ElementType.METHOD,ElementType.TYPE,ElementType.FIELD})
    @Retention(RetentionPolicy.CLASS)
    public @interface zhujie {
        String value();
    }

    使用注解

    public class zhujieTest {
    
        @zhujie("hhh")
        public void Show(String c){
            System.out.println(c);
        }
    }

    通过反射获得注解的值

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
            Class c = zhujieTest.class;
            try {
                Method m = c.getMethod("Show",String.class);
                zhujie z = m.getAnnotation(zhujie.class);
                System.out.println(z.value());
            } catch (NoSuchMethodException e) {
                e.printStackTrace();
            }
    
        }
  • 相关阅读:
    将Java应用部署到SAP云平台neo环境的两种方式
    Java实现 LeetCode 524 通过删除字母匹配到字典里最长单词(又是一道语文题)
    Java实现 LeetCode 524 通过删除字母匹配到字典里最长单词(又是一道语文题)
    Java实现 LeetCode 523 连续的子数组和(ง •_•)ง
    Java实现 LeetCode 523 连续的子数组和(ง •_•)ง
    Java实现 LeetCode 523 连续的子数组和(ง •_•)ง
    Java实现 LeetCode 522 最长特殊序列 II(查找最长的非子序列的长度)
    Java实现 LeetCode 522 最长特殊序列 II(查找最长的非子序列的长度)
    Java实现 LeetCode 522 最长特殊序列 II(查找最长的非子序列的长度)
    Java实现 LeetCode 521 最长特殊序列 Ⅰ(出题人:“就是喜欢看你们不敢相信那么简单,又不敢提交的样子。”)...
  • 原文地址:https://www.cnblogs.com/baidawei/p/9037379.html
Copyright © 2011-2022 走看看