您的位置:首页 > 编程语言 > Java开发

java之番外

2016-01-15 17:15 477 查看
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

只想到这些
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: