java反射初学整理

1.什么是反射

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

Java反射机制主要提供了以下功能:在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。

延伸方向:动态语言

一般而言,开发者社群说到动态语言,大致认同的一个定义是:“程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言。

尽管在这样的定义与分类下Java不是动态语言,它却有着一个非常突出的动态相关机制:Reflection。这个字的意思是“反射、映象、倒影”,用在Java身上指的是我们可以于运行时加载、探知、使用编译期间完全未知的classes。换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其methods。这种“看透class”的能力(theability of the program to examineitself)被称为introspection(内省、内观、反省)。Reflection和introspection是常被并提的两个术语。

2.Class类

可以说,没有Class类就没有反射。

而只有获取了Class对象,才可以对其拥有的成员进行操作。

Class类十分特殊。它和一般类一样继承自Object,其实体用以表达Java程序运行时的classes和interfaces,也用来表达enum、array、primitiveJava types(boolean, byte, char, short, int, long, float,double)以及关键词void。当一个class被加载,或当加载器(class loader)的defineClass()被JVM调用,JVM便自动产生一个Class 对象。如果您想借由“修改Java标准库源码”来观察Class对象的实际生成时机(例如在Class的constructor内添加一个println()),这样是行不通的!因为Class并没有publicconstructor。

3.获取Class对象的方式

a.Object是百类之主,其中定义了getClass()方法,顾名思义可知,该方法可用来Class对象。

b.对于Integer等数据类型,可以使用.Type语法和.class

c.一般类使用.class

d.Class.forName()乃是静态方法,也可以使用。

package xyz.waterloocode.www;

public class ReflectDemo {

	//Person p1 = null;
	
	public static void main(String[] args) throws ClassNotFoundException {
	
		Person p1 =  Person.getPerson();
		Class c1 = p1.getClass();
		Class c2 = Integer.TYPE;
		Class c3 = Integer.class;
		Class c4 = Class.class;
		Class c6 = Person.class;
		Class c5 = Class.forName("xyz.waterloocode.www.Person");
		
		System.out.println(c2.getName()+"\n"+c1.getSimpleName());
		System.out.println(c4.getName());
		System.out.println(c6.getName());
		
	}
	
	public static  class Person {
		
		public  static Person getPerson(){
			Person p = new Person();
			return p;
					
		}
		public String run() {
			System.out.println("run and run!!!....");
			return "11.....";
		}
		
		public void car(){
			System.out.println("start.....");
		}
	}

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值