一.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());
}
}

java反射1的更多相关文章

  1. 第28章 java反射机制

    java反射机制 1.类加载机制 1.1.jvm和类 运行Java程序:java 带有main方法的类名 之后java会启动jvm,并加载字节码(字节码就是一个类在内存空间的状态) 当调用java命令 ...

  2. Java反射机制

    Java反射机制 一:什么事反射机制 简单地说,就是程序运行时能够通过反射的到类的所有信息,只需要获得类名,方法名,属性名. 二:为什么要用反射:     静态编译:在编译时确定类型,绑定对象,即通过 ...

  3. java反射(基础了解)

    package cn.itcast_01; /** *Person类 */ public class Person {    /** 姓名 */    private String name;     ...

  4. java基础知识(十一)java反射机制(上)

    java.lang.Class类详解 java Class类详解 一.class类 Class类是java语言定义的特定类的实现,在java中每个类都有一个相应的Class对象,以便java程序运行时 ...

  5. java基础知识(十一)java反射机制(下)

    1.什么是反射机制? java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象都能够调用他的属性和方法,这种动态获取属性和方法的功能称为java的反射机制. ...

  6. java反射学习之二万能EXCEL导出

    一.EXCEL导出的实现过程 假设有一个对象的集合,现在需要将此集合内的所有对象导出到EXCEL中,对象有N个属性:那么我们实现的方式是这样的: 循环这个集合,在循环集合中某个对象的所有属性,将这个对 ...

  7. java反射学习之一反射机制概述

    一.反射机制背景概述 1.反射(reflection)是java被视为动态语言的一个关键性质 2.反射机制指的是程序在运行时能获取任何类的内部所有信息 二.反射机制实现功能概述 1.只要给定类的全名, ...

  8. java反射 之 反射基础

    一.反射 反射:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为 ...

  9. java反射 cglib asm相关资料

    有篇文章对java反射的调用的效率做了测试,写的比较好.猛击下面地址 http://www.blogjava.net/stone2083/archive/2010/09/15/332065.html ...

  10. 超详细的java反射教程

    看技术博客时,看到关于java反射的博文,写的非常好.猛击下面的地址,开始java反射之旅 中文翻译地址:http://ifeve.com/java-reflection/ 英文原版地址:http:/ ...

随机推荐

  1. Unity学习资源

    NGUI文档及视频: http://www.tasharen.com/forum/index.php?topic=6754 动态更新的解决方案: http://game.ceeger.com/foru ...

  2. 使用 margin 让div块内容居中

    问:有一个div块,其width为300px,如何设置margin让div块居中显示? 答:margin设置为 margin:0 auto,即div块的上下外边距设置为 0 , 左右外边距设置为 自动 ...

  3. APACHE 多站点配置方法

    例如你的主机IP:192.168.1.8 而你有三个站点,域名为:www.111.com,www.222.com,www.333.com 相应的网站文件放在主机的:\website\111;D:\we ...

  4. viewPage

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

  5. 自定义Mvc5 Owin 验证

    public class AuthIn : IUserAuthenticate { public static ApplicationUserManager UserManager { get { r ...

  6. linux框架之ibus

    框架与具体输入法安装 ibus是一个框架,安装好ibus框架后,只需要安装ibus平台下具体的输入法即可,海风或极点五笔,然后注销当前账户,重新登录,便可添加新安装的输入法 [root@localho ...

  7. 【转】C#程序打包安装部署之添加注册表项

    今天为大家整理了一些怎样去做程序安装包的具体文档,这些文档并不能确保每个人在做安装包的时候都能正确去生成和运行,但是这些文档的指导作用对于需要的朋友来说还是很有必要的,在实际产品的安装部署过程中可能有 ...

  8. Log4j使用详解(log4j.properties格式)

    Log4j使用详解(log4j.properties格式) 1.Log4j 的引入 在应用程序中添加日志记录总的来说基于三个目的: ① 监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计 ...

  9. Android MVC模式

    Android MVC模式 下面是我对Android MVC模式的理解 Model 模型层 包括实体模型层,存放程序中调用的实体. 业务模型层,存放程序中调用的业务逻辑.   View 显示层  An ...

  10. Struts2 - Convertion

    Struts2中的Convertion插件是比较有用,它可以简化很多操作,比如不需要一个一个Action在struts.xml中设置.当然,最有意义的是它与rest插件一起整合使用,可以完成web-s ...