×

java反射调用类的方法

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

admin admin 发表于2024-07-22 13:39:55 浏览12 评论0

抢沙发发表评论

“java反射调用类的方法”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看java反射调用类的方法(java中,用反射方式调用一个类中的main方法)!

本文目录

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+"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反射调用int类型方法

int是基础类型,不是java对象。所以java提供了包装类型Integer,提供了一些常用的方法。所以要用反射不能调用int类型的方法,只能调用Integer的。要用反射调用Integer的方法,首先要获取Integer的class对象,通过class对象,获取类的属性、方法,并调用。

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

获得一个类中的方法先看一下方法和运行结果。获取所有的方法使用Class类中getMethos()方法。待获取的类:12345678910111213141516171819202122232425262728293031323334353637383940414243444546package 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;}@Overridepublic String toString() {return "Heros ";}}Hero类中包含了三个属性,和对应的getter和setter方法。另外还有一个toString方法。这是一个非常常见的pojo。测试类:12345678910111213package 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方法运行结果:123456789101112131415public 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.InterruptedExceptionpublic final native void java.lang.Object.wait(long) throws java.lang.InterruptedExceptionpublic final void java.lang.Object.wait() throws java.lang.InterruptedExceptionpublic 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,注意参数。1234567891011121314151617181920package 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();}}}运行结果:12345678调用set方法:Heros 调用get方法:影魔

java反射机制怎样调用类的私有方法

为了一看就懂,请看下面的示例(假设调用 MyTest类的私有方法 privateMethod()):

public class ReflectionTest {     public static void setObjectColor(Object obj) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAcces***ception, InvocationTargetException{   // 核心代码加粗    Class cls = obj.getClass();    //获得类的私有方法    Method method = cls.getDeclaredMethod("privateMethod", null);    method.setAccessible(true); //没有设置就会报错    //调用该方法    method.invoke(obj, null);  }  public static void main(String args) throws SecurityException, IllegalArgumentException, NoSuchMethodException, IllegalAcces***ception, InvocationTargetException{         setObjectColor(new MyTest());  }} //测试类class MyTest{     public void setMyTest(){    System.out.println("setMyTest");  }  /**   类的私有方法   **/  private void privateMethod(){    System.out.println("调用了 private Method");  }   }

关于本次java反射调用类的方法和java中,用反射方式调用一个类中的main方法的问题分享到这里就结束了,如果解决了您的问题,我们非常高兴。