Why do we need reflection?
检查Object的运行期的class
运行期的构造函数
检查Object运行期的成员变量和方法
调用Object的运行期的方法
Example 1: Get class name from object
import java.lang.reflect.Method; public class ReflectionHelloWorld { public static void main(String[] args){ Foo f = new Foo(); System.out.println(f.getClass().getName()); } } class Foo { public void print() { System.out.println("abc"); } }
Example 2: Invoke method on unknown object
import java.lang.reflect.Method; public class ReflectionHelloWorld { public static void main(String[] args){ Foo f = new Foo(); Method method; try { method = f.getClass().getMethod("print", new Class<?>[0]); method.invoke(f); } catch (Exception e) { e.printStackTrace(); } } } class Foo { public void print() { System.out.println("abc"); } }
Example 3: Create object from Class instance
public class ReflectionHelloWorld { public static void main(String[] args){ //create instance of "Class" Class<?> c = null; try{ c=Class.forName("myreflection.Foo"); }catch(Exception e){ e.printStackTrace(); } //create instance of "Foo" Foo f = null; try { f = (Foo) c.newInstance(); } catch (Exception e) { e.printStackTrace(); } f.print(); } } class Foo { public void print() { System.out.println("abc"); } }
Example 4: Get constructor and create instance
package myreflection; import java.lang.reflect.Constructor; public class ReflectionHelloWorld { public static void main(String[] args){ //create instance of "Class" Class<?> c = null; try{ c=Class.forName("myreflection.Foo"); }catch(Exception e){ e.printStackTrace(); } //create instance of "Foo" Foo f1 = null; Foo f2 = null; //get all constructors Constructor<?> cons[] = c.getConstructors(); try { f1 = (Foo) cons[0].newInstance(); f2 = (Foo) cons[1].newInstance("abc"); } catch (Exception e) { e.printStackTrace(); } f1.print(); f2.print(); } } class Foo { String s; public Foo(){} public Foo(String s){ this.s=s; } public void print() { System.out.println(s); } }
Example 5: Change array size though reflection
package myreflection; import java.lang.reflect.Array; public class ReflectionHelloWorld { public static void main(String[] args) { int[] intArray = { 1, 2, 3, 4, 5 }; int[] newIntArray = (int[]) changeArraySize(intArray, 10); print(newIntArray); String[] atr = { "a", "b", "c", "d", "e" }; String[] str1 = (String[]) changeArraySize(atr, 10); print(str1); } // change array size public static Object changeArraySize(Object obj, int len) { Class<?> arr = obj.getClass().getComponentType(); Object newArray = Array.newInstance(arr, len); //do array copy int co = Array.getLength(obj); System.arraycopy(obj, 0, newArray, 0, co); return newArray; } // print public static void print(Object obj) { Class<?> c = obj.getClass(); if (!c.isArray()) { return; } System.out.println("\nArray length: " + Array.getLength(obj)); for (int i = 0; i < Array.getLength(obj); i++) { System.out.print(Array.get(obj, i) + " "); } } }
相关推荐
反射API的核心在于提供了一系列以`Reflection`开头的类,如`ReflectionClass`, `ReflectionMethod`, `ReflectionFunction`等。这些类允许开发者获取关于类、方法、函数等的详细信息,甚至在运行时修改它们的属性和...
这篇文档主要介绍了八年级物理中的光的反射...总结来说,这篇PPT教案详细介绍了光的反射基础知识,通过实验探究加深了学生对反射定律的认识,并通过练习题来巩固学习成果,为理解和应用光的反射提供了全面的学习材料。
1. 光的反射基础知识:首先提出了两个基本问题,即我们能看到物体的原因。答案是由于光的反射,太阳、电灯等发光物体发出的光线照射到我们的眼睛,而教室、人、书本等非发光物体则是通过反射周围环境的光线被我们...
《C#反射特性基础知识详解》 C#反射是.NET框架提供的一种强大机制,它允许程序在运行时获取关于自身类型的信息,并能动态地创建和操作对象。本文将深入探讨C#反射的基础知识,帮助开发者更好地理解和运用这一特性。...
为了深入了解 CommonsCollection1 反序列化链学习,需要具备一定的 Java 基础知识,包括反射基础知识、对象与类的基础知识、反射获取对象过程等。 一、对象与类的基础知识 在 Java 中,类(class)是对象的抽象化...
这篇学习笔记将带你深入了解C#反射的基础知识,帮助你掌握这一关键技能。 1. **程序集(Assembly)**:程序集是.NET应用程序的基本部署和版本控制单位,包含了元数据和IL(中间语言)代码。你可以通过`System....
虽然课程可能未涵盖所有类型的反射,例如人类特有的、基于语言和文字的反射,但这并不影响学生对反射基础知识的掌握。这样的教学方法体现了教育改革的进步,强调了学生主动参与和实践的重要性,使科学概念的学习变得...
【光的反射基础资料知识讲解】 光的反射是光学领域中的基本现象,指的是光线射向物体表面时,一部分光线被物体表面反射回原来的空间。这一现象涉及到一系列关键概念和定律,对于理解和应用光学原理至关重要。 **...
Java是一种广泛使用的面向对象的编程语言,其基础知识涵盖了多个方面,包括语法、面向对象特性、异常处理、多线程、I/O流、网络编程、反射技术、设计模式以及JVM等核心概念。以下是对这些知识点的详细说明: 一、...
"光学薄膜的基础知识与防反射膜" 光学薄膜是指具有特殊光学性质的薄膜,广泛应用于光学器件、显示器件、激光器件等领域。理解光学薄膜的基础知识是设计和制造高性能光学器件的关键。 1. 屈折率与分散 屈折率是指...
Java基础知识学习教程-12注解和反射 本章节主要讲述Java中的注解和反射机制,涵盖了注解的基本概念、内置注解、元注解和自定义注解等知识点,并引入反射机制,详细介绍了反射的概念、Class类、通过反射获取注解、...
主题:学习Spring必学的Java基础知识(1)----反射主题:学习Spring必学的Java基础知识(1)----反射主题:学习Spring必学的Java基础知识(1)----反射
光的反射是光学基础知识的重要组成部分,它涉及到光线在物体表面如何改变方向并返回的现象。本文主要阐述了光的反射的基本概念、反射定律及其应用,以及镜面反射和漫反射的区别。 首先,光的反射分为几个关键点:...
Java 反射基础知识点 Java 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;并且能改变它的属性。下面我们来一起学习一下吧。 一、...
本篇文章将深入探讨Java的基础知识,包括String类、接口、继承、I/O流以及反射等重要概念。 首先,我们来看看String类。在Java中,String是不可变的对象,这意味着一旦创建了String对象,就不能更改它的值。String...
java思维导图 (基础知识、多线程、网络编程反射、设计模式、常用API) java思维导图 (基础知识、多线程、网络编程反射、设计模式、常用API) java思维导图 (基础知识、多线程、网络编程反射、设计模式、常用API)...
通过使用信号完整性基础知识的思维导图,无论是学生还是工程师,都能更好地理解和解决实际设计中的信号问题,从而提高电子设备的性能和可靠性。在实际设计中,需要综合考虑各种因素,如线宽、过孔、端接、串扰控制等...
在理解天线的基础知识时,我们首先关注天线的作用和分类。 天线的作用在于发射和接收电磁波。当电流在导线上变化时,会激发电磁波的辐射。天线的设计和尺寸直接影响其辐射能力。例如,当导线长度接近波长时,辐射...
这份“计算机图形学基础知识讲义”对于初学者来说,是一份非常有价值的资源。 讲义可能会涵盖以下几个核心知识点: 1. **坐标系统与变换**:在计算机图形学中,我们首先会接触到笛卡尔坐标系,包括世界坐标、视口...