java之番外

来源:互联网 发布:自制sql注入工具 编辑:程序博客网 时间:2024/04/27 17:21

1 反射

1.1 获得类的Class对象

Class c1 = Object.class;
Class c2 = Class.forName("java.lang.Object");
Class c3 = new Object().getClass();

c1和c2会调用Object中的静态代码块且 Class支持泛型

1.2 创建对象

Object obj = c1.newInstance();

会调用类的代码块 构造方法

1.3 通过Class中的方法 可以得到类中所有的属性 方法

1.4 如果需要调用方法 通过Method的invoke  赋值需要用到Field中的set  如果需要访问私有变量或方法 需要调用setAccessible

1.5 自定义ClassLoader 重写loadClass  findClass等方法   可以实现字节码加密  //java核心技术 卷2   9.1.3


2 枚举

蛮好的总结:http://www.cnblogs.com/happyPawpaw/archive/2013/04/09/3009553.html


3 注解

3.1 元注解

@Retention元注解,表示需要在什么级别保存该注释信息(生命周期)。可选的RetentionPoicy参数包括:
RetentionPolicy.SOURCE: 停留在java源文件,编译器被丢掉
RetentionPolicy.CLASS:停留在class文件中,但会被VM丢弃(默认)
RetentionPolicy.RUNTIME:内存中的字节码,VM将在运行时也保留注解,因此可以通过反射机制读取注解的信息
@Target元注解,默认值为任何元素,表示该注解用于什么地方。可用的ElementType参数包括
ElementType.CONSTRUCTOR: 构造器声明
ElementType.FIELD: 成员变量、对象、属性(包括enum实例)
ElementType.LOCAL_VARIABLE: 局部变量声明
ElementType.METHOD: 方法声明
ElementType.PACKAGE: 包声明
ElementType.PARAMETER: 参数声明
ElementType.TYPE: 类、接口(包括注解类型)或enum声明
@Documented将注解包含在JavaDoc中
@Inheried允许子类继承父类中的注解

3.2 自定义注解

3.2.1 定义   通过@interface

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Des {
    String name() default "name";
    int age();
}

3.2.2 添加注解

@Des(age = 10)
public class Test {
    public static void main(String[] args) {
        Class<Test> c = Test.class;
        if (c.isAnnotationPresent(Des.class)) {//判断是否有Des的注解
            Des des = (Des) c.getAnnotation(Des.class);
            System.err.println(des.name() + "-----" + des.age());
        }
    }
}

此外 还有用于方法的 变量的 具体见http://blog.csdn.net/initphp/article/details/37041975


只想到这些

0 0