海外主机测评

您现在的位置是:首页 > 服务器 > 正文

服务器

method.invokemethodinvoke返回值

cds8202023-04-22服务器70
本文目录一览:1、method的invoke方法怎么用2、Method对象中invoke方法中第一个参数表示____3、javaMethodinvoke抛出异常4、ja

本文目录一览:

  • 1、method的invoke方法怎么用
  • 2、Method对象中invoke方法中第一个参数表示____
  • 3、java Method invoke 抛出异常
  • 4、java反射中method类中的invoke方法是做什么的,他有什么作用?

method的invoke方法怎么用

public class Names {

 public String firstName = "Callan";

 public String lastName = "Wang";

 

 public String getFullName(){

  return firstName + " " + lastName;

 }

 

 public String getFullName(String firstName,String lastName){

  return firstName + " " + lastName;

 }

}

 

 

 

import java.lang.reflect.InvocatiONTargetException;

import java.lang.reflect.Method;

public class Test {

 

 public static void main(String[] args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {

  

  Names methods = new Names();

 

  // 调用getFullName()方法

  Method method1 = methods.getClass().getMethod("getFullName");

  Object obj1 = method1.invoke(methods, null);

  System.out.println(obj1);

  

  // 调用getFullName(String firstName,String lastName)方法

  Method method2 = methods.getClass().getMethod("getFullName", new Class[]{String.class,String.class});//方法带有两个String类型的参数

  // invoke(从中调用基础方法的对象,用于方法调用的参数)

  Object obj2 = method2.invoke(methods, new String[]{"Callan","Wang"});

  System.out.println(obj2);

 }

}

Method对象中invoke方法中第一个参数表示____

invoke方法的第一个参数是一个对象。

此对象可以为:①方法持有者;②方法持有者的继承者。

例子:父类有方法

public class Father {

    public void say(String name){

        System.out.println("我是father叫"+name);

    }

}

子类有方法

public class Son extends Father {

    @Override

    public void say(String name){

        System.out.println("我是son我叫"+name);

    }

}

测试类

public class TestInvoke {

    public void test() throws Exception {

        Class clazz = Class.forName("CloneObject.Father");//反射父类

        Father father = new Father();//实例化父类

        Son son = new Son();//实例化子类

        Object object=clazz.newInstance();//获得一个新的父类对象

        

        Method method = clazz.getMethod("say",String.class);

        method.invoke(father,"爸爸");

        method.invoke(son,"孩子");

        method.invoke(object,"新的父亲");

    }

    public static void main(String[] args) throws Exception {

        new TestInvoke().test();

    }

}

结果

我是father叫爸爸

我是son我叫孩子

我是father叫新的父亲

java Method invoke 抛出异常

InvocationTargetException异常由Method.invoke(obj, args...)方法抛出。当被调用的方法的内部抛出了异常而没有被捕获时,将由此异常接收。

示例:

package com.zzj.test.reflect;

public class Reflect {

public void run(int i) throws ZeroException {

B b = new B();

b.run(i);

}

}

class B {

public void run(int i) throws ZeroException {

if (i 0) {

throw new ZeroException("参数不能小于零!");

}

System.out.println("参数:" + i);

}

}

class ZeroException extends Exception {

private static final long serialVersionUID = 1L;

private String detailMessage;

public ZeroException(String detailMessage) {

this.detailMessage = detailMessage;

}

public String getMessage() {

return detailMessage;

}

}

测试:

package com.zzj.test.reflect;

import java.lang.reflect.InvocationTargetException;

import java.lang.reflect.Method;

public class Test {

public static void main(String[] args) {

try {

Class? clazz = Class.forName("com.zzj.test.reflect.Reflect");

Method method = clazz.getMethod("run", int.class);

method.invoke(clazz.newInstance(), -1);

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (SecurityException e) {

e.printStackTrace();

} catch (NoSuchMethodException e) {

e.printStackTrace();

} catch (IllegalArgumentException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

} catch (InvocationTargetException e) {

System.out.println("此处接收被调用方法内部未被捕获的异常");

e.printStackTrace();

} catch (InstantiationException e) {

e.printStackTrace();

}

}

}

输出:

此处接收被调用方法内部未被捕获的异常

java.lang.reflect.InvocationTargetException

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.lang.reflect.Method.invoke(Unknown Source)

at com.zzj.test.reflect.Test.main(Test.java:11)

Caused by: com.zzj.test.reflect.ZeroException: 参数不能小于零!

at com.zzj.test.reflect.B.run(Reflect.java:13)

at com.zzj.test.reflect.Reflect.run(Reflect.java:6)

... 5 more

也可以直接打印目标异常:

package com.zzj.test.reflect;

import java.lang.reflect.InvocationTargetException;

import java.lang.reflect.Method;

public class Test {

public static void main(String[] args) {

try {

Class? clazz = Class.forName("com.zzj.test.reflect.Reflect");

Method method = clazz.getMethod("run", int.class);

method.invoke(clazz.newInstance(), -1);

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (SecurityException e) {

e.printStackTrace();

} catch (NoSuchMethodException e) {

e.printStackTrace();

} catch (IllegalArgumentException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

} catch (InvocationTargetException e) {

System.out.println("此处接收被调用方法内部未被捕获的异常");

Throwable t = e.getTargetException();// 获取目标异常

t.printStackTrace();

} catch (InstantiationException e) {

e.printStackTrace();

}

}

}

输出:

此处接收被调用方法内部未被捕获的异常

com.zzj.test.reflect.ZeroException: 参数不能小于零!

at com.zzj.test.reflect.B.run(Reflect.java:13)

at com.zzj.test.reflect.Reflect.run(Reflect.java:6)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.lang.reflect.Method.invoke(Unknown Source)

at com.zzj.test.reflect.Test.main(Test.java:11)

java反射中method类中的invoke方法是做什么的,他有什么作用?

首先Method类代表一个方法,所以invoke(调用)就是调用Method类代表的方法。它可以让你实现动态调用,例如你可以动态的传人参数。下面是一个简单的例子。

public class MethodTest

{

    public static void main(String[] args)

    {

        String [] names ={"tom","tim","allen","alice"};

        Class? clazz = Test.class;

        try

        {

            Method method = clazz.getMethod("sayHi", String.class);

            for(String name:names)

                method.invoke(clazz.newInstance(),name);

        } catch (NoSuchMethodException e)

        {

            e.printStackTrace();

        } catch (IllegalAccessException e)

        {

            e.printStackTrace();

        } catch (IllegalArgumentException e)

        {

            e.printStackTrace();

        } catch (InvocationTargetException e)

        {

            e.printStackTrace();

        } catch (InstantiationException e)

        {

            e.printStackTrace();

        }

    }

}

class Test

{

    public void sayHi(String name)

    {

        System.out.println("Hi "+name);

    }

}

关于method.invoke和methodinvoke返回值的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

发表评论

评论列表

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~