`
小牛犊
  • 浏览: 96951 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Reflection 反射

    博客分类:
  • Java
阅读更多

1.得到对象的属性字段

   (1)getFields()

public class PropertyTest {
	public static void main(String[] args) {
		Met p = new Person();
		// Person p=new Person(); //结果一样
		// Zou p=new Person(); //结果一样
		Class c = p.getClass();
		Field[] f = c.getFields();
		for (int i = 0; i < f.length; i++) {
			System.out.println(f[i]);
		}
	}
}
class Person extends Zou implements Met {
	public String name;
	protected String address;
	private int age;
	int kk;
}
interface Met {
	public String interfaceFiled = "ff";
}
abstract class Zou {
	public String abstractFiled;
}

    运行结果

public java.lang.String com.flh.reflection.Person.name
public static final java.lang.String com.flh.reflection.Met.interfaceFiled
public java.lang.String com.flh.reflection.Zou.abstractFiled

 结论:相信已经一目了然,getFields()返回该类(包括实现的接口和继承的抽象类)的所有可访问的公共字段。

 另:getField(String name)返回某一具体的字段。

 

2.得到对象的属性值

public class FieldTest {
	public static void main(String[] args) {
		User user=new User();
		user.name="yyming";
		Class c=user.getClass();
		try {
			Field f=c.getField("name");
			Object o=f.get(user);
			System.out.println(o);
		} catch (SecurityException e) {
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		} catch (NoSuchFieldException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		}
	}
}
class User{
	public String name;
	protected String address;
	private int age;
	int kk;
}

   运行结果:yyming

   f.get(user)通过对象得到该属性的实例,如果这个属性是非公有的,这里会报IllegalAccessException。

 

3.得到静态的属性值

   见上上面的例子

   Object o=f.get(user);

   Object o=f.get(c);

   即可以通过类的实例,也可以通过Class类的实例得到。

 

4.得到对象的方法

public class MethodTest {
	public static void main(String[] args) {
		Animal a = new Animal();
		Class c = a.getClass();
		Method[] method = c.getMethods();
		for (int i = 0; i < method.length; i++) {
			System.out.println(method[i]);
		}
	}
}
class Animal {
	public void eat() {
		System.out.println("动物吃东西");
	}
	public static void eat(String s) {
		System.out.println("动物吃" + s);
	}
	private void lasi() {
		System.out.println("动物拉斯");
	}
	protected void run() {
		System.out.println("动物跑");
	}
}

    运行结果:

public void com.flh.reflection.Animal.eat()
public static void com.flh.reflection.Animal.eat(java.lang.String)
public final void java.lang.Object.wait() throws java.lang.InterruptedException
public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
public native int java.lang.Object.hashCode()
public final native java.lang.Class java.lang.Object.getClass()
public boolean java.lang.Object.equals(java.lang.Object)
public java.lang.String java.lang.Object.toString()
public final native void java.lang.Object.notify()
public final native void java.lang.Object.notifyAll()

 

 

  

      

分享到:
评论

相关推荐

    javaReflection反射机制.ppt

    之前上课的时候老师总结的JavaReflection反射学习资料,内容简单易懂,浅显易懂,适合小白入手学习。。

    reflection反射

    Object instance = constructor.newInstance("Hello, Reflection!"); ``` 这会创建一个带有给定参数的新实例。 ### 5. 调用方法 `Method`对象提供了`invoke(Object obj, Object... args)`方法,允许我们在运行时...

    java Reflection 反射机制 反编译

    package day29; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier; public class ReflectionTest { public static void main(String[] args) { ...

    Reflection反射.md

    ### Java反射机制详解 #### 一、Java反射机制概述 反射是Java的一种强大的特性,它使得Java成为一种“准动态语言”。尽管Java本质上是一种静态类型语言,但它支持一些类似于动态语言的功能,比如运行时能够检查类...

    北大青鸟ACCP6.0 第三学期 Y2 JAVA方向 reflection 反射

    Java反射是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在北大青鸟ACCP6.0第三学期Y2的JAVA方向课程中,反射作为核心知识点被深入讲解,主要是为了提升...

    java reflection反射机制示例

    Java反射机制是Java编程语言中的一个强大工具,它允许运行时动态访问类的信息,包括类名、属性、方法以及构造器等。通过反射,我们可以在程序执行过程中创建和操作任何类的对象,即使在编译时未知该类的具体信息。...

    实例介绍PHP的Reflection反射机制

    总之,PHP的Reflection反射机制为开发者提供了一种强大的手段,可以在运行时深入分析和操作类的内部结构,这不仅有助于调试和测试,也为创建动态代码生成器等高级应用提供了可能。通过使用Reflection API,开发者...

    Unity Planar Reflection平面反射

    Unity Planar Reflection平面反射

    reflection 详解

    在Java编程语言中,Reflection(反射)是一种强大的工具,它允许程序在运行时检查和操作类、接口、字段和方法的信息。Reflection的概念基于这样一个事实:Java程序不仅可以执行预先定义的操作,还可以在运行时动态地...

    反射Reflection小应用

    在Java编程语言中,反射(Reflection)是一种强大的工具,它允许程序在运行时检查和操作类、接口、字段和方法的信息。通过反射,我们可以动态地创建对象、调用方法、访问字段,甚至处理私有成员,这在某些情况下非常...

    C#反射(Reflection)的应用

    在C#编程语言中,反射(Reflection)是一个强大的工具,它允许程序在运行时检查自身的行为,包括类、接口、属性、方法等元数据信息,并能够动态地创建对象和调用方法。这篇压缩包文件提供了关于C#反射的实践示例,...

    Java Reflection (JAVA反射)详解

    Java 反射(Reflection)是Java编程语言的一个重要特性,它允许程序在运行时动态地获取类的信息(如类名、方法、字段等)并直接操作对象的内部属性。这为开发者提供了强大的灵活性,能够在不预先知道具体类的情况下...

    C#反射(Reflection)详解

    C#反射(Reflection)详解 什么是反射 命名空间和装配体的关系

    圣思园 reflection(Java反射) 课件

    Java反射机制是Java编程语言中一个强大的工具,它允许程序在运行时检查和操作类、接口、字段和方法的信息。通过反射,开发者可以在程序执行过程中动态地获取类的信息并进行操作,这为Java应用程序提供了高度的灵活性...

    JAVA 私塾笔记整理——反射机制(Reflection)

    在"JAVA私塾笔记整理——反射机制(Reflection)"这份文档中,我们将深入探讨反射机制的基础知识、用途和实现方式。 1. **反射机制的基本概念** 反射机制是Java提供的一种能够在运行时分析类和对象的能力。它允许...

    在3DS-MAX虚拟现实中反光材质的实现.docx

    在材质命令面板中选择 Maps 下选择 Reflection 反射贴图,然后选择程序 Reflect/Refract,将设置指定为 Reflect 反射时产生反射效果,将设置指定为 Refract 折射时产生折射效果。 反光材质在 3DS MAX 虚拟现实中的...

    Java Reflection (JAVA反射.mht

    Java Reflection (JAVA反射.mht

Global site tag (gtag.js) - Google Analytics