反射机制调用普通成员方法
来源:互联网 发布:工厂生产数据表格 编辑:程序博客网 时间:2024/06/05 04:21
一个类中的普通成员函数必须要在有实例的情况下才能调用,而产生实例的方法有三种,分别是new、clone()、反射。
先看一下下面这个类:
package com.andy.entity;public class Cat { private int age;//定义猫的年龄 private double weight;//定义猫的体重 public Cat(int age,double weight) { this.age=age; this.weight=weight; } public Cat() { System.out.println("-----这是无参构造函数-----------"); } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public double getWeight() { return weight; } public void setWeight(double weight) { this.weight = weight; } @Override public String toString() { return "猫的年龄是"+age+" 体重是"+weight; }}
该类有无参构造函数(当程序中存在有参构造函数时,必须要明确给出无参构造函数,否则程序中就不存在无参构造函数),那么在进行实例化时就可以通过Class类提供的newInstance方法进行。
在Class类中提供一下关于类中Method 的操作:
一、public Method[] getMethods()
该方法用于获取所有的成员方法
二、public Method getMethod(String name, Class<?>... parameterTypes)
根据参数用来调用指定的成员方法,其中name是方法名称,后面是数据类型参数。
注意:以上两个方法的返回类型是Method,该类中有一个用来执行函数的方法:`public Object invoke(Object obj, Object… args) 参数obj是执行体,即调用方法的实例,后面是方法所需要的参数的数据类型。
比如为了调用上面类中的setAge()、getAge()、setWeight()、getWeight()方法,用反射实现如下:
package com.andy.temp;import java.lang.reflect.Constructor;import java.lang.reflect.Method;public class Temp { public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException { String fildName1="age"; String fildName2="weight"; Class<?>class1=Class.forName("com.andy.entity.Cat"); try { Constructor<?> constructor=class1.getConstructor(int.class,double.class); Object cat=constructor.newInstance(2,2.6);//相当于正常情况下的new,会调用构造函数 System.out.println(class1);//输出“class com.andy.temp.Cat” System.out.println(cat);//调用toString方法 Method setMet1=class1.getMethod("set"+initcap(fildName1), int.class); Method getMet1=class1.getMethod("get"+initcap(fildName1)); Method setMet2=class1.getMethod("set"+initcap(fildName2), double.class); Method getMet2=class1.getMethod("get"+initcap(fildName2)); setMet1.invoke(cat, 3); System.out.println(getMet1.invoke(cat)); setMet2.invoke(cat, 2.3); System.out.println(getMet2.invoke(cat)); System.out.println(cat);//调用toString方法 } catch (Exception e) { e.printStackTrace(); } } public static String initcap(String str) { return str.substring(0,1).toUpperCase()+str.substring(1).toLowerCase(); }}
`
输出结果如下:
class com.andy.entity.Cat
猫的年龄是2 体重是2.6
3
2.3
猫的年龄是3 体重是2.3
0 0
- 反射机制调用普通成员方法
- 基础反射概念之调用构造和普通方法和成员
- JAVA反射调用无参构造、有参构造、普通方法、成员操作
- 反射机制调用类的方法,或操作成员,以及反射中的数组对象
- 反射(四)使用反射机制调用对象的私有方法及成员变量
- java反射机制获取成员变量调用和调用实例方法的实现
- 反射调用普通方法(5)
- 构造方法_普通方法_成员变量的反射
- java反射机制调用方法
- 反射机制实现方法调用
- java反射机制调用方法
- Java反射机制-调用方法
- 反射机制--调用构造函数和成员方法、制作帮助文档
- Java反射机制,通过对象访问调用类的私有成员属性或者方法
- android 反射机制和反射调用方法
- Java反射机制之成员方法的反射
- java 反射机制 / 反射new 对象 / 反射方式调用方法
- 类反射学习(三) JAVA如何利用类反射调用普通函数、访问成员成员变量
- nginx
- 单位转换
- 51学习库(2)--矩阵键盘
- 设计模式
- (复习)Struts2+MySQL完成登录数据是够为空的校验(二)
- 反射机制调用普通成员方法
- B. T-shirt buying(stl)
- 非递减排列 非递增排列 递减排列 递增排列
- java XML转JSON格式
- flex 最后一行左对齐
- 线程 中断 Thread.interrupt()使用
- HTML5学习笔记 —— JavaScript语句
- 如何优化MySQL
- [Leetcode] 135. Candy