`

java反射获取属性和方法

阅读更多
反射的应用一般是要用到某些特殊类的属性和方法,无论是一般方法还是私有方法都可以通过反射机制获取到。

下面将介绍其中的6种属性的获取:一般构造函数,私有有参构造函数,一般变量,私有变量,一般方法,私有有参方法

---测试类
package com.test.jse.invoke;

public class MyClass {
	public String n = "MyClass公有变量"; 
	private String m = "MyClass私有变量";
	
	public MyClass(){
		System.out.println("MyClass无参公有构造方法");
	}
	
	private MyClass(int n,String name){
		System.out.println("MyClass有参私有构造方法"+"\t名字:"+name+"\t编号:"+n);
	}
	
	public void say(){
		System.out.println("MyClass类的无参公有一般方法---say()");
	}
	
	private void tell(String name){
		System.out.println("MyClass类的一般有参私有方法----private tell()");
	}
}


----利用反射获取类中属性和调用类中的方法
package com.test.jse.invoke;

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

public class People {
	public static void main(String[] args) {
		try {
			Class clazz = Class.forName("com.test.jse.invoke.MyClass");//反射出来的类clazz
			MyClass myClass =(MyClass)clazz.newInstance();//MyClass类无参数公有构造函数
			
			Constructor constructor = clazz.getDeclaredConstructor(new Class[]{int.class,String.class});
		constructor.setAccessible(true);//设置查看私有方法的权限
		MyClass myclass2 = (MyClass)constructor.newInstance(1,"张三");
			
		System.out.println(clazz.getField("n").get(myClass));
			
		Field field = clazz.getDeclaredField("m");//定义m变量
		field.setAccessible(true);
		System.out.println(field.get(myClass));
			
		Method method_say = clazz.getMethod("say"); //先查询定位到公有say()方法
		method_say.invoke(myClass);		//再执行say()方法
			
		Method method = clazz.getDeclaredMethod("tell", new Class[]{String.class }); //定义方法属性
		method.setAccessible(true);
		method.invoke(myClass,"张三");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			e.printStackTrace();
		} catch (SecurityException e) {
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			e.printStackTrace();
		} catch (NoSuchFieldException e) {
			e.printStackTrace();
		}
	}
}

分享到:
评论

相关推荐

    java反射,获取所有属性、方法以及List集合类

    本篇文章将深入探讨如何使用Java反射来获取一个类的所有属性、方法,并处理List集合类。 首先,让我们了解Java反射的基础概念。在Java中,`java.lang.Class`类代表运行时的类信息。我们可以使用`Class.forName()`...

    java反射获取所有属性,获取所有get方法,包括子类父类

    总结,Java反射机制为我们提供了强大的动态性,能够方便地获取和操作类的属性和方法,包括私有成员和子类父类中的成员。通过熟练掌握反射技术,开发者可以实现更灵活、更动态的代码,但也需要谨慎使用,以避免潜在的...

    java 反射得到某个方法

    在本文中,我们将深入探讨如何使用Java反射来获取并执行某个特定的方法。 首先,我们需要了解Java反射的基本概念。`java.lang.Class`类是反射的核心,它代表了Java中的每一个类。我们可以通过以下方式获取到一个...

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

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

    java反射操作父类所有属性和方法

    通过上述示例,我们了解了如何使用Java反射机制来获取父类的所有属性和方法。这种方法非常灵活,适用于许多不同的场景,如框架开发、测试工具等。需要注意的是,虽然反射功能强大,但在生产环境中应谨慎使用,因为它...

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

    反射获取属性和调用方法是其核心功能,广泛应用于框架设计、动态代理、插件机制等领域。下面将详细解释这两个概念。 1. 反射获取属性: 在Java中,`java.lang.reflect`包提供了`Class`类来获取类的信息,包括其...

    Java方法反射调用demo

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

    用反射的方式获取父类中的所有属性和方法

    在Java编程语言中,反射(Reflection)是一种强大的工具,它允许程序在运行时检查和操作对象的内部结构,包括类的属性、方法以及构造器。...通过上述步骤,你可以有效地利用反射获取和操作类的父类属性和方法。

    Java 反射创建get set方法及反射方法的调用

    在Java编程语言中,反射(Reflection)是一种强大的技术,它允许程序在运行时检查类、接口、字段和方法的信息,并能够动态地创建对象和调用方法。本文将详细介绍如何利用Java反射来创建get和set方法,并演示如何通过...

    通过Java反射机制获取JavaBean对象

    1.通过Java反射机制获取JavaBean对象。 2.通过JavaBean全路径字符串获取JavaBean对象。 3.获取JavaBean注解信息

    Java常用的反射方法

    3. 反射获取属性变量 3.1 获取所有public修饰符的成员变量 3.2 获取指定字段并赋值 3.3 获取所有的成员变量(不考虑修饰符) 3.4 获取私有的变量(利用暴力反射) 4. 反射获取构造方法 4.1有参构造 4.2无参构造 ...

    java 通过反射获取枚举类,及枚举类的值,枚举类枚举实例名

    在Java编程语言中,反射(Reflection)是一种强大的工具,它允许程序在运行时检查和操作类、接口、字段和方法等对象。枚举(Enumeration)是Java中的一个特殊类类型,用于定义一组常量。本项目"test-enum-demo-...

    java 反射入门-属性方法调用实例

    这篇博文将带你入门Java反射,并通过属性和方法的调用来实践这一概念。 首先,理解反射的基础概念。在Java中,`Class`类代表了运行时的类信息。通过`Class`对象,我们可以获取到类的名称、构造器、方法和字段。例如...

    java反射 java反射 java反射java反射

    Java反射是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并操作类的对象。在Java中,反射机制提供了强大的能力,包括在运行时检查类的结构、创建对象实例、调用方法以及访问和修改字段值。...

    java反射基本方法测试

    Java反射是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射主要用于在运行时分析类、接口、字段和方法的信息,使得我们可以在不知道对象具体...

    Java反射类中属性方法

    - 运行时检查类结构:例如在单元测试中验证类的属性和方法。 总结来说,Java反射为开发者提供了强大的工具,可以在运行时深入洞察和操纵类的结构,虽然使用时需谨慎,但它无疑极大地扩展了Java的灵活性和功能性。在...

    java反射机制学习(三):通过反射获取实体类的属性、方法、接口和父类信息

    总结一下,Java反射机制提供了一种动态访问和操作类、接口、属性和方法的能力,这在处理不确定类型、插件系统、元数据解析等多种场景下非常有用。通过`Class`对象,我们可以获取类的详细信息,包括但不限于字段、...

    JAVA反射机制的入门代码

    Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得Java具有了高度的灵活性和动态性,尤其是在处理元数据、创建对象、调用私有方法...

    java 反射取得类的私有属性,通过私有属性取得属性值

    在Java编程语言中,反射(Reflection)是一种强大的工具,它允许程序在运行时检查和操作对象的内部属性和方法,即使这些属性或方法是私有的。这篇博客文章可能讨论了如何利用反射机制来获取类的私有属性并读取其对应...

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

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

Global site tag (gtag.js) - Google Analytics