反射---最大的应用:反射配置文件中的类路径,动态创建对象,增强扩展性,灵活性
反射:一般被反射的类,都需要一个默认的构造函数,即无参构造函数不要被覆盖了!
反射构造函数
反射类的字段
反射类的方法
package com.gc.reflect; public class Person { private String name; private int age; public static String country = "CN"; public Person(String name, int age) { super(); this.name = name; this.age = age; } public Person() { super(); } private void privateMethod(String param) { System.out.println("Person.privateMethod():"+name+"---"+param); } public void show() { System.out.println("Person.show():"+this.name); } public static void staticMethod() { System.out.println("Person.staticMethod():"+country); } }
package com.gc.reflect; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; public class Reflect { public static void main(String[] args)throws Exception { //getObjectClass(); //newObjectInstance(); //getConstructors(); //getObjectFields(); getObjectMethods(); } /** * 获取字节码文件对象 * @throws ClassNotFoundException */ public static void getObjectClass() throws ClassNotFoundException { Class clazz1 = Person.class; Class clazz2 = new Person().getClass(); Class clazz3 = Class.forName("com.gc.reflect.Person");//服务器:读取配置文件---反射---接口---多态 System.out.println(clazz1==clazz2); System.out.println(clazz1==clazz3); } /** * 无参构造函数创建对象 * @throws Exception */ public static void newObjectInstance() throws Exception { //加载字符串所指的类,并编译为字节码,得到Class对象 Class clazz = Class.forName("com.gc.reflect.Person"); //调用类的无参构造函数,创建对象 Object object = clazz.newInstance(); } /** * 获取带参数的构造方法,并通过这个构造函数创建对象 */ public static void getConstructors() throws Exception { Class clazz = Class.forName("com.gc.reflect.Person"); //获取带参数的构造方法 Constructor cons = clazz.getConstructor(String.class,int.class); //传入产生,创建对象 Object obj = cons.newInstance("zs",20); } /** * 获取类中的字段 * clazz.getFields();//本类和父类中所有的共有成员 * clazz.getDeclaredFields();//只获取本类,包括私有成员 */ public static void getObjectFields() throws Exception { Class clazz = Class.forName("com.gc.reflect.Person"); Field field = clazz.getDeclaredField("name"); if(!field.isAccessible()) { field.setAccessible(true); } Object obj = clazz.newInstance(); //为字段设置值 field.set(obj, "xiaoqiang"); //获取字段的值 Object name = field.get(obj); System.out.println(name); } /** * 调用类中的方法 */ public static void getObjectMethods() throws Exception { Class clazz = Class.forName("com.gc.reflect.Person"); Constructor cons = clazz.getConstructor(String.class, int.class);//注意:int.class != Integer.class Object obj = cons.newInstance("beabai",26); Method[] methods = clazz.getDeclaredMethods(); for(Method m : methods) { if(!m.isAccessible()) m.setAccessible(true); if("privateMethod".equals(m.getName())) m.invoke(obj, "hello"); else m.invoke(obj, (Object[])null); } } }
相关推荐
JAVA 反射机制是 Java 语言中的一种动态获取信息和动态调用对象方法的功能。它允许程序在运行时获取类的信息、构造对象、获取成员变量和方法、调用对象的方法等。 Java 反射机制主要提供了以下功能: 1. 在运行时...
首先,让我们了解Java反射的基础概念。在Java中,`java.lang.Class`类代表运行时的类信息。我们可以使用`Class.forName()`方法或者对象的`getClass()`方法来获取`Class`对象。一旦我们有了`Class`对象,就可以进一步...
总的来说,"JAVA反射机制的入门代码"是初学者理解Java反射机制的好教材,通过它,你可以学习如何动态地操作Java类,提高代码的灵活性,并掌握处理`properties`文件的基础方法。在深入学习和实践中,你将进一步理解...
Java反射机制是Java编程语言中一个强大的特性,它允许程序在运行时动态地访问、检测和修改类、接口、字段和方法等对象。然而,反射操作通常会引入额外的开销,这在性能敏感的应用场景下可能成为一个瓶颈。本文将深入...
一、Java反射的基础概念 Java反射源于Java.lang.Class类,它代表了Java运行时的类信息。通过Class对象,我们可以获取到类的构造器、方法、字段等信息,甚至可以动态地实例化对象和调用其成员。例如,`Class<?> ...
以下我们将深入探讨Java反射的基本概念、主要API以及如何通过给定的代码示例来理解反射的应用。 首先,让我们了解什么是类的反射。在Java中,`java.lang.Class` 类代表了运行时的类信息。我们可以通过一个类的全名...
Java反射机制允许在运行时检查类、接口、字段和方法的信息,甚至可以在运行时动态创建对象并调用其方法。这为程序提供了极大的灵活性,特别是在框架开发和元编程中。通过`java.lang.Class`类和`java.lang.reflect`...
Java反射详解 在Java编程语言中,反射是一个强大的工具,它允许程序在运行时检查类、接口、字段和方法的信息,甚至能够在运行时创建和访问这些对象。这种能力使得Java成为一种动态语言,增强了代码的灵活性和可扩展...
本专栏主要为Java程序设计(基础)实验报告和Java程序设计(进阶)实验报告,基础篇有JAVA环境搭建、Java语言基础、方法和数组、面向对象基础、Java常用类、继承与接口、成员访问控制与异常、JavaFX程序设计、Java...
在反射中,由于类型擦除,泛型信息在运行时不可用。但可以通过方法签名或字段类型推断泛型的实际类型。 7. 注解与反射: 反射也可以用来读取类、方法、字段上的注解,帮助我们在运行时了解类的元数据信息。 8. ...
Java反射机制是Java语言提供的一种强大的工具,它允许程序在运行时动态地获取类的信息(如类名、属性、方法等)并进行操作。反射机制是基于Java的动态类型特性的,它使得Java具备了“元编程”的能力,即在运行时分析...
Java反射机制在JDK 1.1版本中就已经引入,但在JDK 1.5之后得到了进一步增强和完善,增加了泛型支持等功能,使得反射更加安全和强大。 #### 三、Java反射机制的核心概念与应用 1. **核心概念** - **Class对象**:...
java反射机制基础,是进入java反射机制的一把钥匙
Java反射机制是Java语言中一个强大的功能,它允许程序在运行时检查和修改其自身的结构和行为。通过Java反射机制,我们可以在运行时获取类的信息,包括类的成员变量、方法、构造方法等,并可以动态地调用这些成员变量...
在本资料"java反射机制文档及代码"中,详细介绍了Java反射的基础知识和常见应用。 首先,反射的核心类是`java.lang.Class`,它代表了运行时的类信息。通过Class对象,我们可以获取到类的名称、包名、属性、构造器、...
4. Java反射中的主要类和方法 - `Class`: 提供了获取类信息的各种方法,如`getConstructors()`获取构造方法,`getMethods()`获取所有的公共方法,`getFields()`获取公共字段等。 - `Constructor`: 表示类的构造方法...
在Java基础入门四泛型、反射、注解的学习中,我们会了解到如何正确使用泛型来创建更加健壮的代码,如何利用反射机制实现类和对象的动态操作,以及如何利用注解来简化开发过程和提高代码的可读性。 此外,文档中提到...
要使用Java反射,首先需要获取到`Class`对象,这是反射操作的基础。以下是一些获取`Class`对象的方法: 1. `getClass()`:每个对象都有`getClass()`方法,可以直接获取对象所属的类的`Class`实例。 2. `Class....
Java反射机制是Java编程语言中的一个重要特性,它允许程序在运行时获取和操作任何已知名称的类的内部信息。这一机制使得Java具备了一定的动态性,虽然在传统的分类中Java被视为静态类型语言。通过反射,开发者可以在...