在main方法中获取所有method对象

今天在学习注解时突然想到两个问题:
1、
在一个类的方法中能不能拿到该类的类对象,即在AnnotationTest4.java文件中,执行Class c = AnnotationTest4.class;能否拿到;
2、在该类的main方法中获取该类的所有method对象,会不会拿到main方法本身?

public static void main(String[] args) throws Exception {
        Class c = AnnotationTest4.class;
        Method[] methods= c.getDeclaredMethods();

        for (Method method : methods) {
            //若有注解,则执行
            System.out.println(method.getName());
            if(method.isAnnotationPresent(MyTest.class)){
                method.invoke(new AnnotationTest4());
            }
        }
    }

输出如下:
在这里插入图片描述
根据实验结果得知,首先,是可以在类中获取本类对象;其次

Method[] methods= c.getDeclaredMethods();

会把该类中的所有方法,其中也包含main方法都包含到Method[]中。

Java中,反射是一种强大的工具,允许程序在运行时检查和操作自身的类型、字段、方法等信息。如果你想要通过反射获取`main`方法,首先需要导入`java.lang.reflect.Method`包,然后按照以下步骤操作: 1. 获取当前类的Class对象,这通常是从`Class.forName("your.package.YourClass")`得到的,其中"your.package.YourClass"是你想获取`main`方法所在的类名。 2. 使用`Class`对象的`getMethods()`方法获取类的所有公共方法。这个方法返回的是`Method`数组,包含类中所有定义的方法。 3. 遍历这个方法数组,查找名为`main`并且接受`String[]`参数的方法。你可以使用`getName()`方法获取方法名,`getParameterTypes()`来获取参数类型。 4. 如果找到匹配的方法,可以调用`isPublic()`和`isDeclared()`方法确认它是一个公开的静态方法,因为`main`通常是public static的。 以下是简单的示例代码: ```java import java.lang.reflect.Method; public class Main { public static void main(String[] args) throws NoSuchMethodException { Class<?> clazz = Class.forName("YourClassName"); Method[] methods = clazz.getMethods(); for (Method method : methods) { if ("main".equals(method.getName()) && method.getParameterTypes().length == 1 && method.getParameterTypes()[0] == String[].class) { System.out.println("Found main method: " + method); break; } } } } ``` 在这个例子中,如果找到了`main`方法,就会打印出它的相关信息。如果没有找到,程序会继续运行直到结束。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值