文档章节

使用反射调用方法

学而时习之
 学而时习之
发布于 2015/03/02 16:26
字数 459
阅读 21
收藏 0

1、实体类

package com.ljb.app.model;

import java.io.Serializable;

/**
 * 序列化实体类
 * @author  LJB
 * @version  2015年2月10日
 */
public class Student implements Serializable{
 private String name;
 private int age;
 private String gender;
 private transient String password;
 
 public Student () {};
 
 public Student(String name, int age, String gender , String password) {
  super();
  this.name = name;
  this.age = age;
  this.gender = gender;
  this.password = password;
 }

 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;
 }

 public String getGender() {
  return gender;
 }

 public void setGender(String gender) {
  this.gender = gender;
 }

 public String getPassword() {
  return password;
 }

 public void setPassword(String password) {
  this.password = password;
 }

 @Override
 public String toString() {
  return "Student [name=" + name + ", age=" + age + ", gender=" + gender
    + "]";
 }
}

2、调用get方法

package com.ljb.app.my_first_maven;

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

import com.ljb.app.model.Student;

/**
 * 利用反射调用方法
 * @author  LJB
 * @version  2015年3月2日
 */
public class MethodCallTest {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // 创建实例对象
  Student stu = new Student();
  stu.setName("张三");
  
  // 利用反射调用get方法
  Class cla = Student.class;
  
  try {
   // 获取名称为getName的方法
   Method meth = cla.getMethod("getName", null);
   
   // 调用指定对象的该方法,获取name值
   try {
    String name = (String) meth.invoke(stu, null);
    
    System.out.println(name);
   } catch (IllegalArgumentException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (IllegalAccessException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (InvocationTargetException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  } catch (SecurityException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (NoSuchMethodException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  

 }

}

运行结果:张三

3、调用set方法

package com.ljb.app.my_first_maven;

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

import com.ljb.app.model.Student;

/**
 * 利用反射调用方法
 * @author LJB
 * @version 2015年3月2日
 */
public class MethodCallTest {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // 创建实例对象
  Student stu = new Student();
  stu.setName("张三");
  
  // 获取Class类对象

  Class cla = Student.class;
    
  // 利用反射调用set方法
  try {
   // 获取方法
   Method setMeth = cla.getMethod("setName", String.class);
   
   // 调用方法,传入参数
   setMeth.invoke(stu, "李四");
   
   String name = stu.getName();
   System.out.println(name);
  } catch (IllegalArgumentException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IllegalAccessException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (InvocationTargetException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (SecurityException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (NoSuchMethodException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }

}

运行结果:李四
4、如果是private方法

使用setAccessible(Boolean flag)

true 为取消权限; false 为实施权限检查

 

© 著作权归作者所有

共有 人打赏支持
学而时习之
粉丝 29
博文 93
码字总数 42877
作品 0
西安
私信 提问
kvn-wang/hp-reflect

hp-reflect (high performance reflect) 项目介绍 hp-reflect 是一个高性能的反射工具。它使用字节码技术动态生成 access class。通过不同的 access class,可以高效的获取字段的值,或者调用...

kvn-wang
08/16
0
0
为什么 .NET 的反射这么慢?

大家都知道 .NET 的反射很慢,但是为什么会出现这种情况呢?这篇文章会带你寻找这个问题的真正原因。 CLR 类型系统的设计目标 原因之一是,在设计的时候反射本身就不是以高性能为目标的,可以...

oschina
2016/12/19
6.4K
31
08-《深度拆解JVM》之JVM是如何实现反射的?

一、问题引入 今天我们来讨论一下 Java 里的反射机制。反射是 Java 语言中一个相当重要的特性,它允许正在运行的 Java 程序观测,甚至是修改程序的动态行为。 举例来说,我们可以通过 Class ...

飞鱼说编程
10/12
0
0
Java反射知识总结(2)——阅读

上一部分介绍了反射的一些基本内容,现在将利用反射完成更多的事情。 一、 Field类 Field类封装了属性的信息,一个Field类封装了一个属性的信息,类似于Method对象封装了方法的信息一样。那么...

关河
2016/01/20
66
0
.NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)

版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:http://blog.csdn.net/wpwalter/)...

walter lv
11/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

缓存

并发情况下发生的缓存问题: 缓存一致性: 缓存穿透:是指在高并发场景下,如果某一个key被高并发的访问,缓存没有命中,出于容错性的考虑,会去数据库获取数据,从而导致大量请求访问数据库...

wuyiyi
4分钟前
0
0
eclipse 和idea 快捷键对照

分类 功能点 Eclipse快捷键 IDEA快捷键 搜索 搜索文本 Ctrl + F Ctrl + F Ctrl + R 查找替换 Alt + P/A 逐个/全部替换 Alt + F3 查找当前选中词 继续搜索 Ctrl + K 向前 Ctrl + Shift + K 向...

郭恩洲_OSC博客
5分钟前
0
0
PowerHA IP 替换方式与IP 别名方式的区别

IPAT via replacement (IP替换) The service IP label replaces the boot IP address on the interface. The heartbeat IP alias address remains. IPAT via aliasing (IP别名) The servic......

突突突酱
9分钟前
1
0
Kafka 几个重要的配置总结

注意:配置基于Kafka 0.8.2.1 broker配置 #非负整数,用于唯一标识broker broker.id 0 #kafka持久化数据存储的路径,可以指定多个,以逗号分隔 log.dirs /tmp/kafka-logs #broker接收连接请求...

hblt-j
9分钟前
0
0
开发函数计算的正确姿势 —— 排查超时问题

写不尽的 code,查不完的 bug 通常我们写 bug,哦,不对,写代码时总不会一帆风顺,往往各种 bug 充斥其中,即使测试有较高的代码覆盖率往往也会有漏网之鱼。能写出一些比较隐蔽或者看起来像...

阿里云官方博客
14分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部