`

jdk6.0从入门到精通-----chapter16反射机制

阅读更多
反射机制用到java.lang.reflect包中的类
一下是一个小例子:

package example1;

import java.lang.reflect.Method;

public class PrintMethods {
	public static void main(String[] args) throws Exception {
		// 加载并初始化命令行参数指定的类
		Class classType = Class.forName(args[0]); // 一定是类的全名字,加上package,如java.lang.Object
		Method methods[] = classType.getDeclaredMethods(); // 获得类的所有方法
		for (int i = 0; i < methods.length; i++) {
			System.out.println(methods[i].toString());
		}
	}

}

如果参数是:java.lang.Object
执行结果 
protected void java.lang.Object.finalize() throws java.lang.Throwable
 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()
 protected native java.lang.Object java.lang.Object.clone() throws
 java.lang.CloneNotSupportedException
 private static native void java.lang.Object.registerNatives()
 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()


第二个例子;

对象接口:
package example2;
public interface ObjInterface {

	public String getGreeting();
}

对象实体类
package example2;
public class ObjImpl implements ObjInterface {

	@Override
	//内置的java的Annotation类型@Override
	public String getGreeting() {
		return "hello world!";
	}

}


测试类:
package example2;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Main {

	public static void main(String[] args) throws ClassNotFoundException,
			InstantiationException, IllegalAccessException, SecurityException,
			NoSuchMethodException, IllegalArgumentException,
			InvocationTargetException {
		// 根据类名称创建类实例
		Class objClass = Class.forName("example2.ObjImpl"); // ClassNotFoundException
		// 面向接口
		ObjInterface obj = (ObjInterface) objClass.newInstance();// InstantiationException,IllegalAccessException
		// ObjImpl obj = (ObjImpl) objClass.newInstance(); //这样也可

		System.out.println(obj.getGreeting());

		// 根据方法名称创建方法实例
		Method method = obj.getClass().getMethod("getGreeting", // 错错??????NoSuchMethodException???
				new Class[] { String.class });// SecurityException,
		// NoSuchMethodException

		// 动态调用方法
		Object result = method.invoke(obj, new Object[] { "Tu chuanbin" }); // InvocationTargetException
		System.out.println("返回结果:" + (String) result);

	}

}
分享到:
评论

相关推荐

    jdk6.0从入门到精通-----chapter16反射机制-spring AOP

    总的来说,理解并掌握JDK6.0的反射机制和Spring AOP对于Java开发者来说至关重要。反射提供了一种强大的手段来操作类和对象,而Spring AOP则帮助我们实现关注点的分离,提高代码的可维护性和可测试性。结合两者,我们...

    jdk6.0从入门到精通-----chapter17动态编程

    《JDK 6.0从入门到精通——Chapter 17 动态编程》 在Java编程领域,JDK 6.0版本引入了许多新特性,其中动态编程是提升开发效率和灵活性的重要方面。本章将深入探讨动态编程的概念、用途以及如何在JDK 6.0中利用这些...

    jdk6.0从入门到精通-----chapter18与动态语言结合

    标题中的“jdk6.0从入门到精通-----chapter18与动态语言结合”指的是Java开发工具包(JDK)6.0版本中的一个章节,主要探讨了如何将Java与动态编程语言集成。在Java 6中,引入了一个重要的特性,即Java平台标准版6...

    jdk6.0从入门到精通-----chapter7线程

    《JDK 6.0线程入门到精通——Chapter 7》 在Java开发中,线程是程序执行的最小单元,它使得一个程序能够同时处理多个任务,从而提高了程序的效率和响应性。在JDK 6.0中,线程的管理和使用有了更加完善的特性,对于...

    (源码下载)jdk6.0从入门到精通-----chapter2--输入输出,克隆对象

    标题 "(源码下载)jdk6.0从入门到精通-----chapter2--输入输出,克隆对象" 提供了我们要探讨的主题,即Java中的输入输出流(I/O Stream)和对象克隆。在这个章节中,我们将深入理解这两个关键概念。 **输入输出流...

    jdk6.0从入门到精通-----chapter5网络编程 新I/O(含源码下载)

    在Java编程领域,JDK(Java Development Kit)是开发和运行Java应用程序的...总的来说,"JDK6.0从入门到精通-----chapter5网络编程 新I/O"是一个极好的学习资源,无论你是初学者还是有经验的开发者,都能从中获益良多。

    jdk6.0从入门到精通-----chapter8并发多线程(1)(源码下载)

    本章“jdk6.0从入门到精通-----chapter8并发多线程(1)”着重讲解了Java 6中关于多线程的基本知识和实践技巧。通过源码下载,读者可以更直观地理解多线程的实现方式。 首先,我们要理解什么是多线程。在单线程环境...

    jdk6.0从入门到精通-----chapter4--文件目录操作

    本章节将深入探讨JDK 6.0中的文件和目录操作,这对于任何Java开发者来说都是必备的知识点。在实际项目中,我们需要频繁地与文件系统交互,例如读取、写入、移动或删除文件和目录,因此理解这部分内容至关重要。 ...

    jdk 6.0 jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008(微信开发平台开发JDK)

    微信开发平台开发工具 JDK jdk 6.0 jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008

    jdk-7u80-windows-x64安装包

    jdk-7u80-windows-x64安装包 jdk-7u80-windows-x64安装包 jdk-7u80-windows-x64安装包 jdk-7u80-windows-x64安装包 jdk-7u80-windows-x64安装包 jdk-7u80-windows-x64安装包 jdk-7u80-windows-x64安装包 jdk-7u80-...

    JDK6.0+中文文档-lytim24.part1.rar

    java6.0文档chm版,分成三部分,分别为JDK6.0+中文文档-lytim24.part1.rar、JDK6.0+中文文档-lytim24.part2.rar、JDK6.0+中文文档-lytim24.part3.rar

    官方JDK6.0中文版

    - **增强的动态代理:** JDK 6.0引入了改进的动态代理机制,允许开发者创建能够处理多个接口的代理类,提高了代码的灵活性和可维护性。 - **Swing组件的增强:** Swing库在JDK 6.0中得到了加强,包括新的布局管理器...

    开发工具 jdk-8u121-windows-i586

    开发工具 jdk-8u121-windows-i586开发工具 jdk-8u121-windows-i586开发工具 jdk-8u121-windows-i586开发工具 jdk-8u121-windows-i586开发工具 jdk-8u121-windows-i586开发工具 jdk-8u121-windows-i586开发工具 jdk-8...

    JDK6.0u10b32-windows-

    这个是安装开发工具java jdk 有很多用途

    java-jdk1.8-8u361-all-jdk-win-linux

    java-jdk1.8-8u361-all-jdk-win-linux 该压缩包中包含jdk1.8-8u361下windows版本和linux版本,其包含快速安装包和对应的jdk压缩包版本,具体内容如下: jdk-8u361-linux-aarch64.rpm jdk-8u361-linux-i586.rpm jdk-8...

    jdk-8u131-windows-x64

    jdk-8u131-windows-x64jdk-8u131-windows-x64jdk-8u131-windows-x64jdk-8u131-windows-x64jdk-8u131-windows-x64jdk-8u131-windows-x64jdk-8u131-windows-x64jdk-8u131-windows-x64jdk-8u131-windows-x64jdk-8u131-...

    jdk-8u60-windows-i586-JDK1.8-32位

    jdk-8u60-windows-i586 jdk-8u60-windows-i586 jdk-8u60-windows-i586 jdk-8u60-windows-i586 jdk-8u60-windows-i586

    jdk1.8 jdk-8u5-windows-i586 32位官方正式版

    jdk1.8 jdk-8u5-windows-i586 32位官方正式版 jdk1.8 jdk-8u5-windows-i586 32位官方正式版

    jdk-8u311-windows-x64.exe

    jdk-8u311-windows-x64.exe jdk-8u311-windows-x64.exe.zip jdk-8u311-windows-x64.exe jdk-8u311-windows-x64.exe.zip jdk-8u311-windows-x64.exe jdk-8u311-windows-x64.exe.zip jdk-8u311-windows-x64.exe jdk-8u...

    JDK 6.0.zip

    安装JDK 6.0后,你需要设置环境变量`JAVA_HOME`指向JDK的安装路径,同时将bin目录添加到系统PATH变量中,以便在任何地方都能运行Java命令。然后,你可以开始编写、编译和运行Java程序,享受JDK 6.0带来的便利和强大...

Global site tag (gtag.js) - Google Analytics