java反射机制简单介绍

1.字节码。所谓的字节码就是当java虚拟机载入某个类的对象时,首先须要将硬盘中该类的源码编译成class文件的二进制代码(字节码),然后将class文件的字节码载入到内存中,之后再创建该类的对象

2.java反射的基础是Class类(注意不是小写的class),Class类实例代表着内存中的一份字节码。常见的获取Class类对象的方法例如以下(第一种为对象的方法,另外一种为类的方法):

Dog dog = new Dog();
Class dogClass = dog.getClass();
Class dogClass = Class.forName("Dog");
Class dogClass = Dog.class;

3.获取反射的构造函数。有了主要的Class类,要获取类的对象,首先要获取类的构造函数,这里主要使用的是Class类的getConstructor方法,例如以下所看到的:

		//使用StringBuffer来构造String对象
		String str1 = new String(new StringBuffer("hello"));
		//获取String类对应的构造函数对象
		Constructor c1 = String.class.getConstructor(StringBuffer.class);
		//错误,这里的參数类型必须和获取构造函数时的參数类型(及StringBuffer.class)一致
		String str2 = (String)c1.newInstance(new String("world"));
		//正确
		String str3 = (String)c1.newInstance(new StringBuffer("world"));
		System.out.println(str3);

4.获取反射的字段。

import java.lang.reflect.Field;

class Point{
	public int x;//这里是public
	private int y;//注意这里是private
	Point(int x,int y){
		this.x = x;
		this.y = y;
	}
}

public class ReflectTest {

	public static void main(String[] args) throws Exception {
		Point p = new Point(2,3);
		//getField仅仅能获得public的字段
		Field fieldX = p.getClass().getField("x");
		//获取x的值
		System.out.println(fieldX.get(p));
		//getDeclaredField能够获取全部字段
		Field fieldY = p.getClass().getDeclaredField("y");
		//设置y的属性
		fieldY.setAccessible(true);
		System.out.println(fieldY.get(p));
	}

}

5.获取反射的方法。

	public static void main(String[] args) throws Exception {
		String s1 = "hello";
		//參数为函数名,函数的參数(可变长)
		Method m = s1.getClass().getMethod("charAt", int.class);
		//參数为要调用的对象,以及函数的參数。这里假设第一个參数为null,表示调用的是类的静态方法
		System.out.println(m.invoke(s1, 1));
	}



java反射机制简单介绍

时间: 2024-10-07 22:02:26

java反射机制简单介绍的相关文章

Java反射机制简单使用

1.Java反射相关类所在package: java.lang.reflect.* 2.开始使用Reflection: 使用reflect相关类,遵循三个步骤: a.获取想要操作类的 java.lang.Class 对象. 如: Class c = Class.forName("java.lang.String"); //得到的是一个String类的对象 或者使用: Class c = int.class; b.调用诸如 getDeclaredMethods() 方法,用以获取该类的方

java反射机制-简单实例

public class Car { private String brand; private String color; private int maxSpeed; public Car() { } public Car(String brand, String color, int maxSpeed) { this.brand = brand; this.color = color; this.maxSpeed = maxSpeed; } public String getBrand()

Java反射机制的原理及在Android下的简单应用

花了几天时间,研究了一下Java的反射机制.在这里总结一下这几天学习的成果,一来分享自己的学习过程和在学习中遇到的问题,二来是给像我一样不太了解Java反射机制的同学做一个简单的介绍.在文章后面会链接一个Android反射机制的应用程序. 一.反射的概念及在Java中的类反射 反射主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.在计算机科学领域,反射是一类应用,它们能够自描述和自控制.这类应用通过某种机制来实现对自己行为的描述和检测,并能根据自身行为的状态和结果,调整或修改应用所描述

Java 反射机制介绍

参考文章:http://www.cnblogs.com/skywang12345/p/3345205.html Java 反射机制.通俗来讲呢,就是在运行状态中,我们可以根据"类的部分已经的信息"来还原"类的全部的信息".这里"类的部分已经的信息",可以是"类名"或"类的对象"等信息."类的全部信息"就是指"类的属性,方法,继承关系和Annotation注解"等内容.

Java反射机制剖析(三)-简单谈谈动态代理

通过Java反射机制剖析(一)和Java反射机制剖析(二)的学习,已经对反射有了一定的了解,这一篇通过动态代理的例子来进一步学习反射机制. 1.     代理模式 代理模式就是为其他对象提供一种代理来控制对这个对象的访问.其实代理模式是在访问的对象时引入一定程度的间接性,这种间接性可以附加多种用途. 它 的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常会 存在关联关系,一个代理类的对象与一个委托类的对象

java反射机制(一)—— 利用反射机制实例化对象

一.Java有着一个非常突出的动态相关机制:Reflection,用在Java身上指的是我们可以于运行时加载.探知.使用编译期间完全未知的classes.换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体.或对其fields设值.或唤起其methods.(度娘文库是这么说的) 二.这篇文章主要介绍一下通过反射机制去实例化一个类的对象,然后调用其方法.本文主要介绍两种方式,第一种就是通过构造函数来实例化,第二种就是通过Cl

java反射机制分析

本文转自:http://www.cnblogs.com/gulvzhe/archive/2012/01/27/2330001.html 浅显易懂,值得收藏 Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象, 都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制.反射的概念是由Smith在1982年 首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.这一概念的提出很快引发了

Java 反射机制及Annotation

转自:http://justjavac.iteye.com/blog/714654 Java 反射是 Java 语言的一个很重要的特征. 它允许运行中的 Java 程序对自身进行检查,并能直接操作程序的内部属性.例如,使用 它能获得 Java 类中各成员的名称并显示出来. Java 反射机制主要提供了以下功能: a .在运行时判断任意一个对象所属的类. b .在运行时构造任意一个类的对象. c .在运行时判断任意一个类所具有的成员变量和方法. d .在运行时调用任意一个对象的方法. 在 JDK 

【java基础】Java反射机制

一.预先需要掌握的知识(java虚拟机)  1)java虚拟机的方法区:  java虚拟机有一个运行时数据区,这个数据区又被分为方法区,堆区和栈区,我们这里需要了解的主要是方法区.方法区的主要作用是存储被装载的类 的类型信息,当java虚拟机装载某个类型的时候,需要类装载器定位相应的class文件,然后将其读入到java虚拟机中,紧接着虚拟机提取class 中的类型信息,将这些信息存储到方法区中.这些信息主要包括: 这个类型的全限定名 这个类型的直接超类的全限定名 这个类型是类类型还是接口类型