用到的实例Person:
interface China { public static final String NATIONL="中国";//国籍 public static final String NAME="wjl";//姓名 public void getBasicInfo(); public String setBasicInfo(String userName,String pwd); } public class Person implements China{ private String userName; private String passWord; //构造方法 public Person(){} public Person(String userName) { this.userName = userName; } public Person(String userName, String passWord) { this(userName);//调用一个参数的构造方法 this.passWord = passWord; } //父类方法 public void getBasicInfo() { System.out.println("国籍:"+NATIONL+",姓名:"+NAME); } public String setBasicInfo(String userName, String pwd) { return "用户名:"+userName+",密码:"+pwd; } //userName、passWord的setter/getter方法 }
1、直接执行方法:
public static void main(String[] args) { try{ Class<?> c = Class.forName("com.wjl.reflect.Person"); //调用指定的方法 Method me = c.getMethod("getBasicInfo"); //实例化Person对象并调用方法 me.invoke(c.newInstance());//无参 //调用有参数的方法 Method me2 = c.getMethod("setBasicInfo",String.class,String.class);//2个String类型的参数 String result = (String)me2.invoke(c.newInstance(),"admin","123456"); System.out.println(result); }catch(Exception e){ e.printStackTrace(); } }
2、 操作属性/执行“拼接的方法”:
public static void main(String[] args) { try{ //1、实例化class对象 Class<?> c = Class.forName("com.wjl.reflect.Person");//实例化class Object obj = c.newInstance();//实例化对象 setter(obj,"userName","admin",String.class); System.out.println(getter(obj,"userName")); Field nameField = c.getDeclaredField("userName");//获取userName属性 Field pwdField = c.getDeclaredField("passWord");//获取passWord属性 //让两个属性对外可见,private私有属性的外界不能访问 //若是不处理将报错: // java.lang.IllegalAccessException: Class com.wjl.reflect.InvokeMethodDemo02 can not access a member of class com.wjl.reflect.Person with modifiers "private" nameField.setAccessible(true); pwdField.setAccessible(true); //赋值 nameField.set(obj,"sa"); pwdField.set(obj,"sa"); //取值 System.out.print("用户名:"+nameField.get(obj)+"\t"); System.out.print("密码:"+pwdField.get(obj)); }catch(Exception e){ e.printStackTrace(); } } //set方法 public static void setter(Object obj,String attr,Object value,Class<?> type){ try{ System.out.println("执行的方法:"+("set"+initStr(attr))); //getMethod(param1,param2):param1方法名称,param2参数类型 Method me = obj.getClass().getMethod("set"+initStr(attr), type); me.invoke(obj,value); }catch(Exception e){ e.printStackTrace(); } } //get方法 public static String getter(Object obj,String attr){ String result = ""; try{ System.out.println("执行的方法:"+("get"+initStr(attr))); Method me = obj.getClass().getMethod("get"+initStr(attr)); result = (String)me.invoke(obj); }catch(Exception e){ e.printStackTrace(); } return result; } //该方法用来将字符串的首字母大写 public static String initStr(String str){ return str.substring(0,1).toUpperCase()+str.substring(1); }
3、操作数组中的数据:
public static void main(String[] args) { int temp[]= {1,2,3,4,5}; //getComponentType():返回表示数组组件类型的 Class Class<?> c = temp.getClass().getComponentType(); System.out.println("数组类型:"+c.getName()); System.out.println("数组长度:"+Array.getLength(temp)); System.out.println("数组第一个内容:"+Array.get(temp,0)); //set(p1,p2,p3):p1要操作的数组 p2:要修改的内容的下标 p3:修改之后的值 Array.set(temp,0,10); System.out.println("修改数组的第一个内容为:"+Array.get(temp,0)); //修改数组的长度 int[] newArray = (int[])createNewArray(temp,10); print(newArray); } //创建新的数组 public static Object createNewArray(Object obj,int length){ Class<?> array = obj.getClass().getComponentType();//得到数组组件类型的class Object newObj = Array.newInstance(array, length);//创建新的数组 System.arraycopy(obj, 0, newObj, 0, Array.getLength(obj)); return newObj; } //打印数组内容 public static void print(Object array){ if(!array.getClass().isArray()){return ;} System.out.println(array.getClass().getComponentType()+"数组的长度为:"+Array.getLength(array)); System.out.print("数组内容:"); for(int i=0;i<Array.getLength(array);i++){ System.out.print(Array.get(array, i)+"、"); } }
相关推荐
本文将详细解释如何在Java反射中操作数组。 首先,我们创建一个字符串数组`String[] sArr = {}`。要获取这个数组的`Class`对象,我们可以调用`getClass()`方法,即`Class css = sArr.getClass();`。这个`Class`对象...
Java反射机制是Java语言提供的一种强大功能,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在本篇文章中,我们将深入探讨如何通过反射获取构造方法并实例化对象,这对于理解和使用Java的...
总结来说,Java反射机制是Java语言的一个重要特性,它使得程序能够在运行时动态地获取类的信息并进行操作,提高了代码的通用性和适应性。在实际开发中,反射机制常用于框架设计、插件系统、数据持久化等领域,但同时...
Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、字段和方法的信息。这个特性使得Java具备了高度的灵活性,能够在运行时动态地发现和使用类的属性和方法,即使这些信息在编译时...
### Java反射机制详解 #### 一、反射机制是什么 反射机制是Java编程语言的一个核心特性,它允许程序在运行时动态地获取类的信息,并且能够动态地创建对象和调用对象的方法。简单来说,反射机制使得Java程序可以...
Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得Java具有了高度的动态性,可以在运行时发现类的信息并创建及调用对象的方法。在...
通过Java反射机制,我们可以在运行时获取类的信息,包括类的成员变量、方法、构造方法等,并可以动态地调用这些成员变量和方法。 获取Class对象 ---------------- 在Java中,Class对象是反射机制的基础。我们可以...
Java反射机制是Java编程语言中的一个重要特性,它允许程序在运行时获取和操作任何已知名称的类的内部信息。这一机制使得Java具备了一定的动态性,虽然在传统的分类中Java被视为静态类型语言。通过反射,开发者可以在...
Java反射机制是Java编程语言中一项强大的工具,它允许程序在运行时检查和操作类、接口、对象等的内部信息。反射机制的核心在于能够在运行时动态地获取类的信息,并且可以动态调用对象的方法,创建对象,甚至修改对象...
Java反射机制是Java语言提供的一种基础功能,通过反射机制,可以在运行时分析类的属性和方法,并动态调用对象的方法。在Java的java.lang.reflect包中包含了一系列的类来支持反射机制的实现,下面详细介绍一下这些类...
Java反射机制是Java编程语言中一个强大的特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得Java具有了高度的灵活性和动态性,尤其是在处理元数据、创建对象、调用方法以及...
Java反射是Java编程语言中的一个强大特性,它允许在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个特性使得Java具有了高度的灵活性,常用于框架开发、插件系统、元编程等...
数组是 Java 语言中的一种基本数据结构,反射机制可以动态地获取数组的信息和调用数组的方法。 反射与泛型是指在反射机制中如何操作泛型。泛型是 Java 语言中的一种类型参数机制,反射机制可以动态地获取泛型的信息...
### Java反射机制应用详解 #### 一、Java反射机制简介 Java反射机制是Java语言提供的一种能在运行时分析类信息并动态操作对象的功能。通过反射,我们可以在程序运行期间获取类的信息(如类名、方法名等),创建...
Java反射机制是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并进行操作。通过反射,开发者可以在程序执行时发现并访问类的字段(fields)、方法(methods)以及构造器(constructors),...
Java反射机制是在运行时通过Reflection APIs获取任何已知类的内部信息,包括类的修饰符(如public、static等)、超类、实现的接口、字段和方法的全部信息。它还允许在运行时改变字段内容、调用方法,甚至创建未知类...
JAVA 反射机制是 Java 语言中的一种动态获取信息和动态调用对象方法的功能。它允许程序在运行时获取类的信息、构造对象、获取成员变量和方法、调用对象的方法等。 Java 反射机制主要提供了以下功能: 1. 在运行时...
在 Java 反射机制中,我们可以通过 Method 对象的 invoke 方法来执行某对象的方法,这个方法的返回值是 Object 类型的,可以是基本类型、数组、集合等各种类型。 Java 反射机制提供了一种动态获取类信息和执行对象...
Java反射机制是Java编程语言中的一个强大工具,它允许程序在运行时检查和操作类、接口、对象等的内部信息,包括但不限于类名、方法名、构造器、字段以及它们的元数据。这个机制的核心在于Java.lang.Class类和java....