java反射调用一个类(java类的反射)

本文目录一览:

利用JAVA反射技术执行一个类的方法

public class Test {

public Test() {

}

public static void main(String[] args) throws IllegalArgumentException,

SecurityException, IllegalAccessException,

InvocationTargetException, NoSuchMethodException {

Bean bean = new Bean();

System.out.println(bean);

Bean.class.getMethod(“setName”, String.class).invoke(bean, “Jerry”);

Bean.class.getMethod(“setAge”, int.class).invoke(bean, 25);

System.out.println(“After reflection….\n” + bean);

}

}

class Bean {

private String name;

private int age;

public Bean() {

}

public Bean(String name, int age) {

super();

this.name = name;

this.age = age;

}

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 toString() {

return “NAME: ” + this.getName() + “\nAGE: ” + this.getAge();

}

}

用java的反射机制怎么获取一个类中里面方法

获得一个类中的方法

先看一下方法和运行结果。获取所有的方法使用Class类中getMethos()方法。

待获取的类:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

package com.aaron.reflect;

public class Heros {

private String name;//名字

private String type;//类型

private int camp;//0,近卫;1,天灾

public Heros(){}

public Heros(String name, String type, int camp) {

super();

this.name = name;

this.type = type;

this.camp = camp;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getType() {

return type;

}

public void setType(String type) {

this.type = type;

}

public int getCamp() {

return camp;

}

public void setCamp(int camp) {

this.camp = camp;

}

@Override

public String toString() {

return “Heros [\n name=” + name + “, \n type=” + type + “, \n camp=” + camp + “\n]”;

}

}

Hero类中包含了三个属性,和对应的getter和setter方法。另外还有一个toString方法。这是一个非常常见的pojo。

测试类:

1

2

3

4

5

6

7

8

9

10

11

12

13

package com.aaron.reflect;

import java.lang.reflect.Method;

public class Demo5 {

public static void main(String[] args) {

Class? herosClass = Heros.class;

Method[] methods = herosClass.getMethods();

for (Method method : methods) {

System.out.println(method);

}

}

}

理论上,我们会获得所有的getter和setter,然后还有toString方法

运行结果:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

public void com.aaron.reflect.Heros.setType(java.lang.String)

public int com.aaron.reflect.Heros.getCamp()

public void com.aaron.reflect.Heros.setCamp(int)

public java.lang.String com.aaron.reflect.Heros.toString()

public java.lang.String com.aaron.reflect.Heros.getName()

public void com.aaron.reflect.Heros.setName(java.lang.String)

public java.lang.String com.aaron.reflect.Heros.getType()

public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException

public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException

public final void java.lang.Object.wait() throws java.lang.InterruptedException

public boolean java.lang.Object.equals(java.lang.Object)

public native int java.lang.Object.hashCode()

public final native java.lang.Class java.lang.Object.getClass()

public final native void java.lang.Object.notify()

public final native void java.lang.Object.notifyAll()

然而却列出了这么一大堆。

仔细看一下返回的方法,原来把Object类所拥有的方法也返回了。因为我们这个POJO类默认继承的是java.lang.Object类。,例如getClass(),equals()这些。

使用getMethods()这个方法,返回了一个包含某些Method对象的数组,Method对象已经介绍过,用来表示一个方法的对象,是对类中方法进行抽象的结果。

这些对象反映了Class对象所表示的类或者接口,当然,包括那些由该类或者接口声明的以及从超类和超接口继承的那些类或接口。举个例子来解释一下:

例如使用getMethods()获得Integer类的方法,会把Integer的父类,Number的所有方法,以及Number的父类Object的方法都获取出来。

这个返回数组,包括了从Object类继承的所有(公共)member方法。返回数组中的元素没有排序。如果这个Class对象表示没有公共成员方法的类或者接口,或者表示了一个基本类型或者表示void,则返回长度为0的数组。

2,调用类中的方法

直接给出一个Demo,注意参数。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

package com.aaron.reflect;

import java.lang.reflect.InvocationTargetException;

import java.lang.reflect.Method;

public class Demo5 {

public static void main(String[] args) {

Class? herosClass = Heros.class;

try {

Method m1 = herosClass.getMethod(“setName”,String.class);

Method m2 = herosClass.getMethod(“getName”);

Object userInfo = herosClass.newInstance();

m1.invoke(userInfo,”影魔”);

System.out.println(“调用set方法:”+userInfo);

System.out.println(“调用get方法:”+m2.invoke(userInfo));

} catch (Exception e) {

e.printStackTrace();

}

}

}

运行结果:

1

2

3

4

5

6

7

8

调用set方法:

Heros [

name=影魔,

type=null,

camp=0

]

调用get方法:

影魔

java中,用反射方式调用一个类中的main方法

Main方法是用static修饰的,有2种方法可以调用

1.类名.main(参数);

2.new创建实例,实例.main(参数);

这个地方注意必须传递字符串数组的参数 或者 null !

另外举一个用反射机制调用Main方法的例子

这个类是被调用的main方法类:

Java代码

public class Run

{

public static void main(String[] args)

{

String str=args[0]+”Hello World”;

System.out.println(str);

}

}

下面是调用main方法的类:

Java代码

public class JobRun

{

public static void main(String[] args)

{

String idStr = “YAya”;

try

{

Method method = Run.class.getMethod(“main”, String[].class);

method.invoke(null, (Object) new String[] { idStr });

}

catch (Exception e)

{

e.printStackTrace();

}

}

}

利用JAVA反射技术执行一个类

import java.lang.reflect.InvocationTargetException;

public class SimRef {

public SimRef() {

}

public static void main(String[] args) throws IllegalArgumentException,

SecurityException, IllegalAccessException,

InvocationTargetException, NoSuchMethodException {

Bean bean = new Bean();

System.out.println(bean);

Bean.class.getMethod(“setName”, String.class).invoke(bean, “Jerry”);

Bean.class.getMethod(“setAge”, int.class).invoke(bean, 25);

System.out.println(“After reflection….\n” + bean);

}

}

class Bean {

private String name;

private int age;

public Bean() {

}

public Bean(String name, int age) {

super();

this.name = name;

this.age = age;

}

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 toString() {

return “NAME: ” + this.getName() + “\nAGE: ” + this.getAge();

}

}

java反射的作用。

1.可以通过反射机制发现对象的类型,发现类型的方法/属性/构造器

2.可以创建对象并访问任意对象方法和属性

java 通过反射 调用D盘中的类 这怎么实现?(要代码)

//fileName是你的java文件路径

//先编译java文件为class文件

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();

StandardJavaFileManager fileMgr = compiler.getStandardFileManager(null, null, null);

Iterable units = fileMgr.getJavaFileObjects(fileName);

CompilationTask t = compiler.getTask(null, fileMgr,null, null, null, units);

t.call();

fileMgr.close();

//反射来加载class文件,假设你的类为A,最好写个接口B,让A 实现这个接口

B a = (B)Class.forName(“包名.A”);

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/239712.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-12 12:18
下一篇 2024-12-12 12:18

相关推荐

  • java client.getacsresponse 编译报错解决方法

    java client.getacsresponse 编译报错是Java编程过程中常见的错误,常见的原因是代码的语法错误、类库依赖问题和编译环境的配置问题。下面将从多个方面进行分析…

    编程 2025-04-29
  • Java JsonPath 效率优化指南

    本篇文章将深入探讨Java JsonPath的效率问题,并提供一些优化方案。 一、JsonPath 简介 JsonPath是一个可用于从JSON数据中获取信息的库。它提供了一种DS…

    编程 2025-04-29
  • Java腾讯云音视频对接

    本文旨在从多个方面详细阐述Java腾讯云音视频对接,提供完整的代码示例。 一、腾讯云音视频介绍 腾讯云音视频服务(Cloud Tencent Real-Time Communica…

    编程 2025-04-29
  • Java Bean加载过程

    Java Bean加载过程涉及到类加载器、反射机制和Java虚拟机的执行过程。在本文中,将从这三个方面详细阐述Java Bean加载的过程。 一、类加载器 类加载器是Java虚拟机…

    编程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介绍

    本文将详细介绍Java Milvus SearchParam withoutFields的相关知识和用法。 一、什么是Java Milvus SearchParam without…

    编程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java语言中的一个版本,于2014年3月18日发布。本文将从多个方面对Java 8中某一周的周一进行详细的阐述。 一、数组处理 Java 8新特性之一是Stream…

    编程 2025-04-29
  • Java判断字符串是否存在多个

    本文将从以下几个方面详细阐述如何使用Java判断一个字符串中是否存在多个指定字符: 一、字符串遍历 字符串是Java编程中非常重要的一种数据类型。要判断字符串中是否存在多个指定字符…

    编程 2025-04-29
  • VSCode为什么无法运行Java

    解答:VSCode无法运行Java是因为默认情况下,VSCode并没有集成Java运行环境,需要手动添加Java运行环境或安装相关插件才能实现Java代码的编写、调试和运行。 一、…

    编程 2025-04-29
  • Java任务下发回滚系统的设计与实现

    本文将介绍一个Java任务下发回滚系统的设计与实现。该系统可以用于执行复杂的任务,包括可回滚的任务,及时恢复任务失败前的状态。系统使用Java语言进行开发,可以支持多种类型的任务。…

    编程 2025-04-29
  • Java 8 Group By 会影响排序吗?

    是的,Java 8中的Group By会对排序产生影响。本文将从多个方面探讨Group By对排序的影响。 一、Group By的概述 Group By是SQL中的一种常见操作,它…

    编程 2025-04-29

发表回复

登录后才能评论