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编程语言中的一个强大工具,它允许运行时动态访问类的信息,包括类名、属性、方法以及构造器等。通过反射,我们可以在程序执行过程中创建和操作任何类的对象,即使在编译时未知该类的具体信息。...
Java 反射(Reflection)是Java编程语言的一个重要特性,它允许程序在运行时动态地获取类的信息(如类名、方法、字段等)并直接操作对象的内部属性。这为开发者提供了强大的灵活性,能够在不预先知道具体类的情况下...
在《Java Reflection in Action》这本书中,作者深入探讨了这一主题,帮助开发者理解并有效地利用Java反射机制。这本书是2005年出版的英文版,对于想要提升Java编程技能,特别是对动态类型和元编程感兴趣的开发者来...
### Java反射机制详解 #### 一、Java反射机制概述 反射是Java编程语言的一个关键特性,它赋予了Java程序在运行时自我检查的能力,并能够直接操纵程序内部的属性。通过反射,开发者可以在运行时获取类的信息(如...
Java Reflection (JAVA反射.mht
Java Reflection in Action这本书作为Java反射机制的经典之作,详细介绍了反射技术的应用和相关的概念基础,是Java开发者的必备书籍。 首先,反射允许开发者在不知道对象具体类型的情况下,通过类名获取类类型,...
Java反射是Java编程语言的核心特性之一,它允许程序员在运行时检查和操作类、接口、字段和方法等对象。这使得Java程序具有高度的灵活性和动态性,可以在不事先知晓具体类信息的情况下处理对象。 首先,要使用Java...
### Java反射经典实例详解 #### 一、引言 反射是Java编程语言中的一个重要特性,它允许程序在运行时检查自身结构(如类、字段、方法等),并且可以在运行时调用任意一个类的成员(包括私有成员)。这一特性为Java...
本书《Java Reflection in Action》深入浅出地讲解了Java反射技术的各种应用场景和技术细节。书中通过一系列生动的例子展示了如何安全有效地使用反射技术解决实际问题。例如: 1. **使用反射进行动态代理**:介绍了...
《JAVA反射在行动》这本书由Ira R. Forman和Nate Forman撰写,由MANNING出版社出版,是一本深入探讨Java反射机制及其应用的权威指南。反射是Java语言的一项强大特性,允许运行时检查类的信息并操作类的对象,这在很...
《Java Reflection in Action》这本书深入探讨了这一主题,为开发者提供了理解和运用反射的强大工具。这本书包含了PDF版的全文以及示例源代码,帮助读者通过实践来学习。 1. **反射基础**: - 反射API:`java.lang...
《Java Reflection In Action》这本书会详细解释这些概念,并提供实践示例,帮助开发者更好地理解和利用Java反射的强大功能。阅读本书,你将能够更深入地理解Java的动态特性和潜在应用,提升你的编程技能。
Java反射是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在北大青鸟ACCP6.0第三学期Y2的JAVA方向课程中,反射作为核心知识点被深入讲解,主要是为了提升...