码迷,mamicode.com
首页 > 编程语言 > 详细

Java基础学习笔记【11】Reflect反射(1)

时间:2015-10-08 19:48:21      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:

  1. InputStreamReader将字节流转换为字符流
  2. 在java1.7中新增了Files,Paths对流,路径操作的工具类,内部就是输入输出流等的操作
  3. Syso加只能提示可以快速代码System.out.println();
  4. 反射创建Class的三种方式:
    (1)使用 class的属性得到Class对象          
    1
    2
    Class<String> c = String.class;//String.class就表示JVM里的一份表示String类的字节码
    Class<String> c2 = String.class;
    (2)使用Class.forName(类的全限定名称)         static Class<?> forName(String className)  
    1
    2
    Class<String> clazz = (Class<String>) Class.forName("String");//ERROR
    Class<String> clazz = (Class<String>) Class.forName("java.lang.String");
    (3) Object类: Class<?> getClass() 返回此 Object 的运行时类。  
    1
    2
    3
    4
    List<String> list = new ArrayList<String>();
    Class<?> listClz = list.getClass();//得到的是listClz的真正类型类
    System.out.println(listClz);//java.util.ArrayList
    boolean b = listClz.isInstance(list);//等价于 list instanceof ArrayList
  5. Class的一些常用方法:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Class<IM> clz = IM.class;
    clz.getPackage()//获取clz的包
    clz.getName()//类的全限定名称
    clz.getSuperclass()//获取直接父类
    Class<?>[] ins = clz.getInterfaces(); //获取所有的接口,接口可能多个所以数组接收,要操作就循环遍历
    Class<?>[] ins= clz.getClasses();//获得类public修饰的的内部类/接口
    String getSimpleName() //返回源代码中给出的底层类的简称。
    Class<? super T> getSuperclass() //返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的超类的 Class。
    Class<?>[] getInterfaces() //确定此对象所表示的类或接口实现的接口。
    int getModifiers() //返回此类或接口以整数编码的 Java 语言修饰符。
    Modifier:public static String toString(int mod) //返回描述指定修饰符中的访问修饰符标志的字符串
    <U> Class<? extends U> asSubclass(Class<U> clazz)
    //强制转换该 Class 对象,以表示指定的 class 对象所表示的类的一个子类。
    boolean isInstance(Object obj) //判定指定的 Object 是否与此 Class 所表示的对象赋值兼容。对象  instanceof  类
    int mod = clz.getModifiers(); //获取类的访问修饰符,获取到的为数字类型,要转成对应的类型就要使用相应的方法System.out.println(mod);//1表示public
    System.out.println(Modifier.toString(mod));
  6. 反射构造器:
    1
    2
    3
    4
    5
    6
    7
    Class<Employee> clz = Employee.class;//现获取class对象
    Constructor<Employee>[] cs = (Constructor<Employee>[]) clz.getConstructors();
    //类的所有公共构造方法
    Constructor<Employee> con=clz.getConstructor(String.class,Integer.class);
    //得到public指定的构造器,有几个参数就使用几个参数类型的字节码
    Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes) 访问不受访问权限控制
    clz.getDeclaredConstructors()//获取所有的构造器集合
  7. 基本类型(boolean、byte、char、short、int、long、float 和 double)使用 类型.Class 获取class
    包装类型(Integer等)都使用:包装类都有一个TYPE的常量 ;用于表示其基本数据类型的字节码
    数组的Class对象,所有具有相同元素类型和维数的数组都共享该 Class 对象   Class<String[]> arr = String[].class; 
    什么数组是使用 类型[].Class
  8. 反射的方法:
    1
    2
    3
    4
    5
    Class<MethodDemo> clz = MethodDemo.class;
    Method[] ms = clz.getMethods();//拿到子类及其父类里所有的public修饰的方法
    Method m = clz.getMethod("main", String[].class);
    //拿到子类及其父类里所有的public修饰的指定的方法,后面的参数可可变参数用(类型.Class)做参数
    clz.getDeclaredMethods();//获取自己类里的所有方法或指定的一个方法,和访问权限无关
  9. 反射字段:
    1
    2
    3
    4
    Field[] fs = clz.getFields();//获得所有的public 字段,包括继承
    Field f = clz.getField("c");//指定的一个 public的,包阔继承
    Field[] fs = clz.getDeclaredFields();//得到所有的字段,只能获取当期类里面的,和访问权限无关
    f = clz.getDeclaredField("hahha");
  10. Declared一般在反射的使用中带有该单词名称的方法都是私有的或者受保护的类型



Java基础学习笔记【11】Reflect反射(1)

标签:

原文地址:http://www.cnblogs.com/lindongdong/p/f7666077c9f7e2275322887ac3ec58cc.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!