`
rainlife
  • 浏览: 233306 次
  • 性别: Icon_minigender_1
  • 来自: 我也来自火星?
社区版块
存档分类
最新评论

[常用代码整理]JAVA反射

    博客分类:
  • JAVA
阅读更多

public class User {
	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}	
}


通过反射调用setName方法为name赋值:
public class Main {
	public static void main(String[] args) {
		try {
			Class clazz = Class.forName("test.User");
			Method mtd = clazz.getMethod("setName", new Class[]{String.class});
			Object obj = (Object) clazz.newInstance();
			mtd.invoke(obj,new Object[]{"Jacky"});
			System.out.println(((User)obj).getName());
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SecurityException e) {
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			e.printStackTrace();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			e.printStackTrace();
		}		
	}
}

********************************************************************
import java.lang.reflect.Array;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;


/**
 * Java Reflection Cookbook
 *
 * @author Michael Lee
 * @since 2006-8-23
 * @version 0.1a
 */

public class Reflection {
    /**
     * 得到某个对象的公共属性
     *
     * @param owner, fieldName
     * @return 该属性对象
     * @throws Exception
     *
     */
    public Object getProperty(Object owner, String fieldName) throws Exception {
        Class ownerClass = owner.getClass();

        Field field = ownerClass.getField(fieldName);

        Object property = field.get(owner);

        return property;
    }

    /**
     * 得到某类的静态公共属性
     *
     * @param className   类名
     * @param fieldName   属性名
     * @return 该属性对象
     * @throws Exception
     */
    public Object getStaticProperty(String className, String fieldName)
            throws Exception {
        Class ownerClass = Class.forName(className);

        Field field = ownerClass.getField(fieldName);

        Object property = field.get(ownerClass);

        return property;
    }


    /**
     * 执行某对象方法
     *
     * @param owner
     *            对象
     * @param methodName
     *            方法名
     * @param args
     *            参数
     * @return 方法返回值
     * @throws Exception
     */
    public Object invokeMethod(Object owner, String methodName, Object[] args)
            throws Exception {

        Class ownerClass = owner.getClass();

        Class[] argsClass = new Class[args.length];

        for (int i = 0, j = args.length; i < j; i++) {
            argsClass[i] = args[i].getClass();
        }

        Method method = ownerClass.getMethod(methodName, argsClass);

        return method.invoke(owner, args);
    }


      /**
     * 执行某类的静态方法
     *
     * @param className
     *            类名
     * @param methodName
     *            方法名
     * @param args
     *            参数数组
     * @return 执行方法返回的结果
     * @throws Exception
     */
    public Object invokeStaticMethod(String className, String methodName,
            Object[] args) throws Exception {
        Class ownerClass = Class.forName(className);

        Class[] argsClass = new Class[args.length];

        for (int i = 0, j = args.length; i < j; i++) {
            argsClass[i] = args[i].getClass();
        }

        Method method = ownerClass.getMethod(methodName, argsClass);

        return method.invoke(null, args);
    }



    /**
     * 新建实例
     *
     * @param className
     *            类名
     * @param args
     *            构造函数的参数
     * @return 新建的实例
     * @throws Exception
     */
    public Object newInstance(String className, Object[] args) throws Exception {
        Class newoneClass = Class.forName(className);

        Class[] argsClass = new Class[args.length];

        for (int i = 0, j = args.length; i < j; i++) {
            argsClass[i] = args[i].getClass();
        }

        Constructor cons = newoneClass.getConstructor(argsClass);

        return cons.newInstance(args);

    }


    
    /**
     * 是不是某个类的实例
     * @param obj 实例
     * @param cls 类
     * @return 如果 obj 是此类的实例,则返回 true
     */
    public boolean isInstance(Object obj, Class cls) {
        return cls.isInstance(obj);
    }
    
    /**
     * 得到数组中的某个元素
     * @param array 数组
     * @param index 索引
     * @return 返回指定数组对象中索引组件的值
     */
    public Object getByArray(Object array, int index) {
        return Array.get(array,index);
    }
}
分享到:
评论
2 楼 panshunchang 2010-05-20  
发帖过程这么辛苦,还要回答一大堆问题,受不了了
1 楼 tianlinzx 2007-08-08  
    

相关推荐

    Java常用代码整理

    "Java常用代码整理"这个主题涵盖了Java开发中的诸多常见技术点和实用代码片段,旨在帮助开发者提升工作效率。以下是对这些知识点的详细阐述: 1. **基础语法**:Java的基础语法包括数据类型(如整型、浮点型、字符...

    java一些常用的代码,应广大观众要求,我整理好的

    以下是一些基于Java常用代码的知识点: 1. **异常处理**:Java通过`try-catch-finally`结构来处理程序运行时可能出现的错误。异常类通常继承自`Exception`,如`IOException`, `NullPointerException`等。程序员应该...

    反射常用方法整理(xmind)

    整理的Java反射的常用的一些方式,采用xmind的形式整理出来。希望有能够用到的。将java代码的各个组成部分封装为其他对象,可以在程序运行过程中操作这些对象,这就是java的反射机制;

    java常用工具类整理

    "java常用工具类整理"这个主题涵盖了Java开发中常用的工具类,这些类在日常编程中非常实用,能大大提高开发效率。这里我们将深入探讨一些常见的Java工具类,并结合`com-jarvis-base`这个文件名,推测这是一个基础...

    java常用技术整理.rar

    6. **反射**:Java反射允许在运行时检查类的信息,创建并操作类的对象,这对于动态加载类、调用私有方法或访问私有字段非常有用。 7. **泛型**:泛型提高了代码的类型安全,允许在类、接口和方法中使用类型参数,...

    2011最新整理java经典代码.zip

    标题 "2011最新整理java经典代码.zip" 暗示这是一份包含Java编程语言的经典代码集合,可能是一个文档或多个文件的压缩包,其中的代码示例旨在展示Java编程的最佳实践、常见问题解决方案或者流行算法。描述中再次强调...

    我整理的java代码库,使用eclipse工程方式展现

    7. **反射API**:Java反射允许在运行时动态访问和修改类的信息,包括构造方法、字段和方法。它是许多高级功能如插件系统、序列化和元数据处理的基础。 8. **注解与元编程**:注解是Java中的一种元编程技术,用于在...

    java_常用jar包整理.rar

    本压缩包"java_常用jar包整理.rar"显然是一份集合了Java开发中常用库的资源,可以帮助开发者快速搭建项目环境或解决特定功能需求。以下将详细解析这些常见的jar包及其在Java开发中的作用。 1. **Apache Commons**: ...

    Java常用代码大全.7z

    "Java常用代码大全.7z"这个压缩包很可能是为了帮助开发者收集和整理了一系列常见的Java编程代码片段,以便在开发过程中快速参考和使用。文档中的内容可能涵盖了各种Java编程的基础到进阶知识点。 在Java编程中,...

    JAVA核心知识点整理——java自学资料.rar

    7. **反射与注解**:反射机制使得在运行时可以动态地获取类的信息并操作类的对象,而注解提供了元数据的功能,增强了代码的可读性和自解释性。 8. **设计模式**:了解并能应用常见的设计模式,如单例、工厂、观察者...

    整理的若干java常用工具类

    8. **反射**:`java.lang.reflect`包中的类和接口提供了对运行时类信息的访问,如Class、Constructor、Method和Field等,可以动态地创建对象、调用方法、访问字段。 9. **枚举**:Java枚举是预定义常量的一种类型,...

    java 面试常见问题整理

    finally 中的代码一定会执行吗? 如何使用 try-with-resources 代替try-catch-finally? I/O 什么是序列化?什么是反序列化? Java 序列化中如果有些字段不想进行序列化,怎么办? 获取用键盘输入常用的两种方法 Java ...

    Java程序员高手文章集+(PDF)源码整理

    【Java程序员高手文章集+(PDF)源码整理】这一资源主要针对的是Java编程语言的学习与实践,特别是对于希望成为Java编程高手的程序员。这个压缩包包含了一整套精选的Java技术文章,以及相关的源码整理,是提升Java技能...

    JAVA核心知识点整理.zip

    8. **反射机制**:Java反射机制允许在运行时检查类、接口、字段和方法的信息,甚至可以动态调用方法和访问私有属性。这对于创建灵活和动态的应用程序非常有用。 9. **JVM内存模型**:理解Java虚拟机(JVM)的工作...

    java程序各种常用方法集锦

    在Java编程语言中,开发者经常会遇到各种...以上只是部分知识点,实际的"java常用代码方法"文件中可能包含更多实用技巧和示例。通过学习和实践这些方法,开发者能够更好地应对日常开发中的挑战,提高代码质量和效率。

    Java学习笔记(整理)

    12. **反射机制**:反射允许在运行时检查类的信息,创建和调用对象,是Java动态性的重要体现。 13. **泛型**:泛型提高了代码的类型安全,避免了强制类型转换,并提供了一种类型参数化的方法。 14. **枚举**:Java...

    Java基础知识方面的面试题pdfJava实用源码整理learns

    7. **反射**:Java反射机制允许我们在运行时动态地获取类的信息并操作类的对象,是实现元编程的重要手段。 8. **JVM**:Java虚拟机的理解,包括内存管理(堆、栈、方法区)、垃圾收集机制、类加载器等,对于优化...

    Java基础整理

    ### Java基础知识点整理 #### 第一章 搭建开发环境 **1.1 配置Java环境** 在配置Java开发环境之前,首先需要下载并安装JDK(Java Development Kit)。JDK是Java语言的核心组件,包含了Java运行时环境(JRE)及编译...

    Java手机短信项目源码Java实用源码整理learns

    2. **Java进阶**:涉及多线程、网络编程、I/O流、反射、JVM优化等,有助于解决复杂问题。 3. **Java框架**:Spring、MyBatis、Hibernate等,是企业级开发中常用的工具,掌握它们可以提高开发效率。 4. **Java最佳...

Global site tag (gtag.js) - Google Analytics