文档章节

使用反射调用方法

学而时习之
 学而时习之
发布于 2015/03/02 16:26
字数 459
阅读 20
收藏 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
08-《深度拆解JVM》JVM是如何实现反射的?

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

飞鱼说编程
10/12
0
0
c#中的反射机制

反射的概述: 反射的定义:审查元数据并收集关于它的类型信息的能力。元数据(编译以后的最基本数据单元)就是一大堆的表,当编译程序集或者模块时,编译器会创建一个类定义表,一个字段定义...

云栖希望。
2017/12/04
0
0
Java反射知识总结(2)——阅读

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

关河
2016/01/20
66
0
Java中的反射|SquirrelNote

前言 本篇简介: 反射概述 反射具体功能实现 Android中的反射应用 一、反射(Reflection)概述 1.定义 是指在运行状态中,对于任意一个类,都能知道这个类的所有属性和方法;并且对于任何一个...

跳动的松鼠
2017/11/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

hive数据导入导出

- 导入主要方式 load从本地加载 load从hdfs中加载 insert into方式加载 location指定源数据路径 like指定、克隆 ctas语句指定(create table tableName as ...) 手动将数据copy到表目录 5、 ...

Mr_yul
16分钟前
0
0
基于基线版本新建分支,并合并之前未合并到基线版本的分支

`合并feature2到feature5继续开发 git checkout -b feature2 origin/feature2 git pull git checkout -b baseline origin/baseline git pull git checkout -b feature5 git merge feature2 ......

philonic
24分钟前
0
0
统一认证服务CAS 5安装

简要介绍统一认证服务(CAS,Central Authentication Service,注:常称为单点登录系统)5.2.X的安装及配置。 CAS环境:Centos7.5+Tomcat8.5+jdk-8u181。后台用户管理采用openldap,其安装请...

阿笨哥
24分钟前
0
0
多线程糗事百科案例

爬取糗事百科段子,假设页面的URL是:http://www.qiushibaike.com/8hr/page/1 要求 1.使用requests获取页面信息,用XPath / re 做数据提取 2.获取每个帖子里的用户头像链接、用户姓名、段子内...

代码打碟手
27分钟前
0
0
09-《深度拆解JVM》JVM是怎么实现invokedynamic的?(上)

一、问题引入 前不久,“虚拟机”赛马俱乐部来了个年轻人,标榜自己是动态语言,是先进分子。 这一天,先进分子牵着一头鹿进来,说要参加赛马。咱部里的老学究 Java 就不同意了呀,鹿又不是马...

飞鱼说编程
33分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部