`
phoebird
  • 浏览: 117779 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

反射 之 调用类中有参数和无参数的方法

    博客分类:
  • J2SE
阅读更多
package com.cn.service;

/**
 * 接口对象
 * @author Administrator
 *
 */
public interface China {

	public static final String NATIONAL="China";//常量
	
	public static final String AUTHOR="老李";//接口中的常量
	
	public void sayChina();//方法,实现接口必须重写
	
	public String sayHello(String name,int age);//方法,实现接口必须重写
}


package com.cn.model;

import com.cn.service.China;

public class Person implements China{

	private String name;
	
	private int age;
	
	public Person(){
		
	}
	
	public Person(String name){
		this.name=name;
	}
	
	public Person(String name,int age){
		this(name);//调用有一个参数的构造函数
		this.setAge(age);
	}
	
	public void sayChina() {
		// TODO Auto-generated method stub
		System.out.println("作者:"+AUTHOR+" ,国籍: "+NATIONAL);
	}

	public String sayHello(String name, int age) {
		// TODO Auto-generated method stub
		return name+",你好!我今年"+age+"岁了";
	}

	public String getName() {
		return name;
	}

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

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
	
	

}


package com.cn.component;

import java.lang.reflect.Method;
/**
 * 反射之调用类中有参数和无参数的方法
 * @author Administrator
 *
 */
public class InvokeSayChina {

	public static void main(String args[]) {
		Class<?> c = null;
		try {
			c = Class.forName("com.cn.model.Person");//申明class对象
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		try {
			//调用无参数方法
//			Method method = c.getMethod("sayChina");//通过class对象取得方法名称,该方法没参数
//			method.invoke(c.newInstance());//调用方法,必须传递对象实例
		    //输出结果:作者:老李 ,国籍: China
			
			//调用有参数的方法 ,obj...args表示可变参数
			Method method=c.getMethod("sayHello", String.class,int.class);//第一个参数为方法名称,后面参数为可变参数
			String returnValue="";//初始化返回值
			//method.invoke返回一个Object,因此必须向下转型
			returnValue=(String)method.invoke(c.newInstance(), "小李子",28);//第一个参数表示类的实例化对象,第二个及其以后参数为可变参数
			System.out.println(returnValue);
			
		} 
		catch(Exception e){
			e.printStackTrace();
		}
		//输出结果:
		//小李子,你好!我今年28岁了
		
	}

}

 

分享到:
评论

相关推荐

    反射动态调用DLL方法,含参数

    在给定的场景中,“反射动态调用DLL方法,含参数”意味着我们要通过代码动态地调用DLL库中的特定方法,并且能够传递参数。下面将详细解释这一过程以及涉及的关键知识点。 1. 反射(Reflection): 反射是.NET框架...

    java 反射 调用私有方法(有参数私有方法)获取私有属性值

    Java反射是Java语言提供的一种强大的动态类型特性,它允许程序在运行时检查类、接口、字段和方法的信息,并且能够动态地创建对象和调用方法。这个能力使得开发者可以突破静态类型的束缚,实现一些在编译时期无法完成...

    frida反射调用对象中的方法与字段.pdf

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

    反射,动态加载指定类调用类中的方法

    4. 调用方法:对获取到的`Method`对象,调用`invoke()`方法,传入对象实例和方法参数。 下面是一个简单的示例,演示了如何动态加载一个类并调用其方法: ```java public class Tafcm01 { public static void main...

    Java方法反射调用demo

    Java反射是Java编程语言中的一个强大特性,它允许在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个特性使得Java具有了高度的灵活性,常用于框架开发、插件系统、元编程等...

    Java反射调用方法

    在给定的代码中,`TestRef` 类展示了如何使用Java反射调用方法。首先,我们创建了一个 `Foo` 类,它有一个私有字符串成员变量 `msg` 和三个方法:`setMsg`、`getMsg` 和 `outInfo`。`main` 方法是演示反射调用的入口...

    通过反射调用静态方法

    本文将详细讲解如何通过反射调用静态方法,并探讨在特定场景下,如MyBatis中的应用。 首先,理解反射的概念是至关重要的。在Java中,反射API(java.lang.reflect)允许我们获取类的信息,包括类名、构造函数、方法...

    反射获取属性调用方法反射获取属性调用方法

    在Java或.NET编程环境中,反射是一种强大的工具,它允许程序在运行时检查并操作类、接口、字段和方法等对象。反射获取属性和调用方法是其核心功能,广泛应用于框架设计、动态代理、插件机制等领域。下面将详细解释这...

    Java反射方法调用

    Java反射机制是Java语言提供的一种强大的工具,它允许我们在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个特性在处理不确定类型的对象或者实现动态代理等场景中非常有用。...

    C#实现反射调用动态加载的DLL文件中的方法

    ### C#中使用反射调用动态加载的DLL文件中的方法 #### 反射的作用与应用场景 反射是.NET框架中的一项重要技术,它允许程序在运行时动态地获取自身的元数据(如类、方法、属性等)并进行操作。具体而言,反射主要有...

    C# 获取调用函数 参数名称和值

    总之,C#中获取调用函数的参数名称主要依赖于反射机制,通过`StackTrace`、`StackFrame`和`MethodBase`来追踪和解析调用信息。然而,获取参数值通常需要更复杂的策略,如使用AOP或对代码进行特殊处理。在实际开发中...

    java 通过反射获取类上注解,方法上注解,注解里的值及方法参数

    本教程将深入探讨如何通过反射获取类、方法上的注解以及注解中的值和方法参数。 1. **注解的定义与使用** 注解以`@`符号开头,后面跟着注解的类型。例如,`@Override`表示方法重写,`@Deprecated`表示某个功能已...

    Java反射调用工具类

    2. **获取类信息**:`Class`对象提供了获取类名、修饰符、父类、接口、字段和方法等信息的方法。 3. **实例化对象**:通过`Class`对象的`newInstance()`方法,可以无参构造器创建对象;如果有参构造器,需使用`...

    反射实例反射调用DLL里的方法

    在.NET环境中,我们可以创建.NET DLL项目,编译后生成.dll文件,这些文件包含了可以被其他程序调用的类和方法。 反射的使用通常包含以下几个步骤: 1. 加载DLL:使用`Assembly`类的静态方法`LoadFrom`或`LoadFile`...

    .NET中反射的应用 获取Dll参数

    - 获取DLL中的方法、字段、属性等信息,然后通过反射调用。 总结起来,反射是.NET框架中的一个重要特性,它允许我们在运行时动态地操作类型和对象,提高了代码的灵活性。在VB.NET和C#中,我们可以利用反射来获取...

    java反射机制,调用私有方法

    Java反射机制是Java编程语言中的一个强大工具,它允许程序在运行时检查和操作类、接口、字段和方法的信息。这种动态类型的能力使得Java代码能够处理未知或未提前定义的对象,增强了程序的灵活性和可扩展性。在Java中...

    .NET/C#利用反射调用含ref或out参数的方法示例代码

    总的来说,反射提供了一种在运行时动态操作类型和方法的能力,包括那些有`ref`和`out`参数的方法。虽然反射增加了代码的复杂性,但在某些场景下,如插件系统、动态代码生成等,它能带来极大的灵活性。正确理解和使用...

    C# 调用函数时动态获取参数名称和值

    总结一下,C#中动态获取函数参数名称和值涉及反射和表达式树的使用。反射可以帮助我们获取函数的元数据,而表达式树则允许我们解析代码并访问其内部结构。在实际开发中,结合这两者可以实现灵活且强大的代码分析功能...

    Java 反射详解(包含私有方法属性的调用)

    Java反射是Java编程语言中的一个强大特性,它允许在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个特性使得Java程序具有了高度的灵活性和动态性,尤其在框架开发、插件系统...

Global site tag (gtag.js) - Google Analytics