import java.lang.reflect.*; public class Reflection { public static void main(String[] args) { ReflectPerson p = new ReflectPerson("chenzq", 20); Class<? extends ReflectPerson> c1 = p.getClass(); System.out.println(c1); Class<String> c2 = String.class; System.out.println(c2); Class<?> c3 = null; try { c3 = Class.forName("com.jaeson.javastudy.ReflectPerson"); } catch (ClassNotFoundException e) { e.printStackTrace(); } System.out.println(c3); //Class类的有参构造对象 Class<?> c4 = null; ReflectPerson person = null; try { c4 = Class.forName("com.jaeson.javastudy.ReflectPerson"); Constructor<?> con = c4.getConstructor(new Class[]{String.class, int.class}); person = (ReflectPerson) con.newInstance("jaesonchen", 30); System.out.println(person); System.out.println(c4.getClassLoader()); System.out.println(c4.getInterfaces()); System.out.println(c4.getConstructors()); Method[] m = c4.getDeclaredMethods(); for (int i = 0; i < m.length; i++) { System.out.println(m[i]); } Field f = c4.getDeclaredField("name"); //name是私有属性,所以要设置安全检查为true f.setAccessible(true); System.out.println("name:" + (String) f.get(person)); f.set(person, "chenzq"); System.out.println(person); Method m2 = c4.getMethod("show", String.class); m2.invoke(person, "hello world"); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } } class ReflectPerson { private String name; private int age; public ReflectPerson(String name, int age) { this.name = name; this.age = age; } public void show(String str) { System.out.println(str); } public String toString() { return "name:" + this.name + ",age:" + this.age; } }
* java1.5中一个变化是类 java.lang.Class是泛型化的。
现在,Class有一个类型参数T, 它代表Class对象代表的类型。
比如说,String.class类型代表 Class<String>。
* 由于Class类没有构造方法,所以实例化Class类的方式有点特殊:
(1) 对象.getClass()
(2) 类.Class
(3) Class.forName("全限定类名") 会抛出ClassNotFoundException异常
(4) classloader.loadClass(name)
* Class.newInstance(),Class对象包含的内容就是反射好的那个类,用来创建一个Class类对象的新实例。
Class的 newInstance() 方法现在返回一个T, 你可以在使用反射创建对象时得到更精确的类型。
抛出InstantiationException和IllegalAccessException
输出为:
class com.jaeson.javastudy.ReflectPerson
class java.lang.String
class com.jaeson.javastudy.ReflectPerson
name:jaesonchen,age:30
sun.misc.Launcher$AppClassLoader@6d4b473
[Ljava.lang.Class;@5dcba031
[Ljava.lang.reflect.Constructor;@63822112
public java.lang.String com.jaeson.javastudy.ReflectPerson.toString()
public void com.jaeson.javastudy.ReflectPerson.show(java.lang.String)
name:jaesonchen
name:chenzq,age:30
hello world
相关推荐
之前上课的时候老师总结的JavaReflection反射学习资料,内容简单易懂,浅显易懂,适合小白入手学习。。
import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier; public class ReflectionTest { public static void main(String[] args) { Class c = null; try { ...
讲述java 反射机制的典型示例,通过学习应该能很好的掌握
Java Reflection (JAVA反射)详解
Reflection 是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说“自审”,并能直接操作程序的内部属性。例如,使用它能获得 Java 类中各成员的名称并显示出来。 Java 的这一能力在...
Java Reflection (JAVA反射.mht
java reflection in action 2005 英文版
Java反射经典实例 Java Reflection Cookbook[1].docx.pdf
JAVA反射详解。 Reflection是Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说"自审",并能直接操作程序的内部属性。
Java Reflection in Action is unique in presenting a clear account of all the cool things you can do with reflection, and at the same time pro- viding the sound conceptual basis that developers need to...
北大青鸟ACCP6.0 第三学期 Y2 JAVA方向 reflection 反射 基础复习 上课示例
圣思园 reflection(Java反射) 课件 圣思园 reflection(Java反射) 课件 圣思园 reflection(Java反射) 课件
Reflection in Java. 介绍Java中的反射机制,候捷谈Java反射机制
Java反射机制及各成份所对应的Reflection APIs
Java反射机制的实现_Reflection,适合学习了解反射机制。
尽管在这样得定义与分类下Java不是动态语言,它却有着一个非常突出的动态相关的机制:反射机制 (Reflection)。 什么是反射? 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改...
Java 反射机制、Java 的类反射机制、Java 反射机制的学习、Java 反射Reflection--运行时生成实例 java反射机制的手册文档