`
cywhoyi
  • 浏览: 421075 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

反射的基础知识

 
阅读更多

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) + " ");
		}
	}
}

 

分享到:
评论

相关推荐

    PHP反射基础知识回顾

    反射API的核心在于提供了一系列以`Reflection`开头的类,如`ReflectionClass`, `ReflectionMethod`, `ReflectionFunction`等。这些类允许开发者获取关于类、方法、函数等的详细信息,甚至在运行时修改它们的属性和...

    八年级物理光的反射pptPPT教案学习.pptx

    这篇文档主要介绍了八年级物理中的光的反射...总结来说,这篇PPT教案详细介绍了光的反射基础知识,通过实验探究加深了学生对反射定律的认识,并通过练习题来巩固学习成果,为理解和应用光的反射提供了全面的学习材料。

    八年级物理光反射8PPT学习教案.pptx

    1. 光的反射基础知识:首先提出了两个基本问题,即我们能看到物体的原因。答案是由于光的反射,太阳、电灯等发光物体发出的光线照射到我们的眼睛,而教室、人、书本等非发光物体则是通过反射周围环境的光线被我们...

    C#反射特性基础知识

    《C#反射特性基础知识详解》 C#反射是.NET框架提供的一种强大机制,它允许程序在运行时获取关于自身类型的信息,并能动态地创建和操作对象。本文将深入探讨C#反射的基础知识,帮助开发者更好地理解和运用这一特性。...

    CommonsCollection1反序列化链学习.doc

    为了深入了解 CommonsCollection1 反序列化链学习,需要具备一定的 Java 基础知识,包括反射基础知识、对象与类的基础知识、反射获取对象过程等。 一、对象与类的基础知识 在 Java 中,类(class)是对象的抽象化...

    C#反射基础学习

    这篇学习笔记将带你深入了解C#反射的基础知识,帮助你掌握这一关键技能。 1. **程序集(Assembly)**:程序集是.NET应用程序的基本部署和版本控制单位,包含了元数据和IL(中间语言)代码。你可以通过`System....

    精品资料(2021-2022收藏)第三节神经调节的基本方式1.doc

    虽然课程可能未涵盖所有类型的反射,例如人类特有的、基于语言和文字的反射,但这并不影响学生对反射基础知识的掌握。这样的教学方法体现了教育改革的进步,强调了学生主动参与和实践的重要性,使科学概念的学习变得...

    光的反射基础资料知识讲解.doc

    【光的反射基础资料知识讲解】 光的反射是光学领域中的基本现象,指的是光线射向物体表面时,一部分光线被物体表面反射回原来的空间。这一现象涉及到一系列关键概念和定律,对于理解和应用光学原理至关重要。 **...

    Java基础知识点总结.docx

    Java是一种广泛使用的面向对象的编程语言,其基础知识涵盖了多个方面,包括语法、面向对象特性、异常处理、多线程、I/O流、网络编程、反射技术、设计模式以及JVM等核心概念。以下是对这些知识点的详细说明: 一、...

    光学薄膜的基础知识与防反射膜(中文版)借鉴.pdf

    "光学薄膜的基础知识与防反射膜" 光学薄膜是指具有特殊光学性质的薄膜,广泛应用于光学器件、显示器件、激光器件等领域。理解光学薄膜的基础知识是设计和制造高性能光学器件的关键。 1. 屈折率与分散 屈折率是指...

    java基础知识学习教程-12注解和反射.pptx

    Java基础知识学习教程-12注解和反射 本章节主要讲述Java中的注解和反射机制,涵盖了注解的基本概念、内置注解、元注解和自定义注解等知识点,并引入反射机制,详细介绍了反射的概念、Class类、通过反射获取注解、...

    主题:学习Spring必学的Java基础知识(1)----反射

    主题:学习Spring必学的Java基础知识(1)----反射主题:学习Spring必学的Java基础知识(1)----反射主题:学习Spring必学的Java基础知识(1)----反射

    光的反射(基础)知识讲解.doc

    光的反射是光学基础知识的重要组成部分,它涉及到光线在物体表面如何改变方向并返回的现象。本文主要阐述了光的反射的基本概念、反射定律及其应用,以及镜面反射和漫反射的区别。 首先,光的反射分为几个关键点:...

    新手学习java反射基础

    Java 反射基础知识点 Java 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;并且能改变它的属性。下面我们来一起学习一下吧。 一、...

    JAVA基础知识点(全面,基础)

    本篇文章将深入探讨Java的基础知识,包括String类、接口、继承、I/O流以及反射等重要概念。 首先,我们来看看String类。在Java中,String是不可变的对象,这意味着一旦创建了String对象,就不能更改它的值。String...

    java思维导图 (基础知识、多线程、网络编程反射、设计模式、常用API)

    java思维导图 (基础知识、多线程、网络编程反射、设计模式、常用API) java思维导图 (基础知识、多线程、网络编程反射、设计模式、常用API) java思维导图 (基础知识、多线程、网络编程反射、设计模式、常用API)...

    硬件设计/电路设计+信号完整性/SI+基础知识概念思维导图

    通过使用信号完整性基础知识的思维导图,无论是学生还是工程师,都能更好地理解和解决实际设计中的信号问题,从而提高电子设备的性能和可靠性。在实际设计中,需要综合考虑各种因素,如线宽、过孔、端接、串扰控制等...

    天线的基础知识

    在理解天线的基础知识时,我们首先关注天线的作用和分类。 天线的作用在于发射和接收电磁波。当电流在导线上变化时,会激发电磁波的辐射。天线的设计和尺寸直接影响其辐射能力。例如,当导线长度接近波长时,辐射...

    计算机图形学基础知识讲义

    这份“计算机图形学基础知识讲义”对于初学者来说,是一份非常有价值的资源。 讲义可能会涵盖以下几个核心知识点: 1. **坐标系统与变换**:在计算机图形学中,我们首先会接触到笛卡尔坐标系,包括世界坐标、视口...

Global site tag (gtag.js) - Google Analytics