zoukankan      html  css  js  c++  java
  • java反射1

    一.Class部分

    加载类的几种方式

    // 1.
    Class clazz = Class.forName("com.wzh.test.reflect.Person");

    // 2.
    Class clazz1 = new Person().getClass();

    // 3.
    Class clazz2 = Person.class;

    // 4.
    ClassLoader cl = ClassLoader.getSystemClassLoader();
    Class clazz3 = cl.loadClass("com.wzh.test.reflect.Person");

    获取加载器

    ClassLoader cl = ClassLoader.getSystemClassLoader();
     Class c = cl.loadClass("com.wzh.test.Student");
     System.out.println(c);
     System.out.println(c.getName());

    // //SSH的配置文件都是放在src(classpath)
    // InputStream is= ClassLoader.getSystemResourceAsStream("user.properties");
    // System.out.println(is);
    //获取类对象
    Class myc=Class.forName("com.wzh.test.Student");
    System.out.println(myc);
    //获取类实例,必须要有无参构造器
    Student s= (Student)myc.newInstance();
    System.out.println(s);

    // 绝对路径
    InputStream is = this.getClass().getResourceAsStream("/");

    System.out.println(is);

    // 相对路径
    InputStream is2 = this.getClass().getResourceAsStream("a.xml");
    System.out.println(is2);

    // 相对路径
    InputStream is3 = this.getClass().getResourceAsStream("b.xml");
    System.out.println(is3);

    //绝对路径 d:/test.xml
    InputStream is4=new FileInputStream("d:/test.xml");
    System.out.println(is4);

    ------------------------------------------------------------------------------

    二.构造器部分

    public static void main(String[] args) {
    try {
    Class c=Class.forName("com.wzh.test.Student");
    //
    try {
    Constructor cs=c.getDeclaredConstructor(String.class,Integer.class);
    Student stu=(Student)cs.newInstance("myname",123);
    System.out.println(stu);

    //获取所有构造器
    Constructor[] css=c.getConstructors();
    for (Constructor constructor : css) {
    System.out.println(constructor);
    }
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    } catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }

    -----------------------------------------------

    三.字段

    public static void main(String[] args) throws Exception {

    Class c = Class.forName("com.wzh.test.Student");
    Student stu = (Student) c.newInstance();
    Field[] fs = c.getDeclaredFields();
    for (Field field : fs) {
    System.out.println(field.getName());
    if (!field.isAccessible())
    field.setAccessible(true);
    System.out.println(field.get(stu));
    }
    Field f = c.getDeclaredField("age");
    if (!f.isAccessible())
    f.setAccessible(true);
    System.out.println("stu:" + f.get(stu));
    }

    ---------------------------------------------------------

    四.方法

    public static void main(String[] args) throws Exception {
    Class c = Class.forName("com.wzh.test.Student");
    Student stu=(Student)c.newInstance();
    Method m=c.getDeclaredMethod("play");
    m.invoke(stu);

    Method m2=c.getDeclaredMethod("play", String.class);
    m2.invoke(stu, "依琳");

    Method[] ms=c.getDeclaredMethods();
    for (Method method : ms) {
    System.out.println(method.getName());
    }
    }

  • 相关阅读:
    ANSI C
    如何判断机器的endianness
    union的常见用法
    主流浏览器引擎
    用宏来求数组元素个数
    inode
    分区时"磁盘上没有足够的空间完成此操作"的解决方法
    删除OEM分区
    jquery加table布局 模仿实现FaceBook Dialog
    Container.DataItem使用
  • 原文地址:https://www.cnblogs.com/zhuawang/p/3344820.html
Copyright © 2011-2022 走看看