在Java反射中,Method 类的 invoke 方法之所以需要一个对象作为参数(通常称为 obj),是因为它用于调用对象实例上的方法。这个对象参数指定了哪个实例上的方法将被调用。如果该方法是静态的(static),则理论上这个对象参数并不是必需的,但在Java反射的API设计中,调用静态方法时仍然需要传递一个对象实例参数,不过在这种情况下,可以传递 null 作为对象参数。
实例方法,对于非静态(实例)方法,你需要一个实例来调用它,因为非静态方法属于类的实例,而不是类本身。这个实例就是你传递给 invoke 方法的对象参数。
静态方法,静态方法属于类本身,不属于任何特定的实例。然而,Java反射的API设计为统一的方式处理所有方法调用,包括静态方法。因此,即使你调用的是静态方法,你也需要提供一个对象参数,但在这种情况下,可以传递 null。这允许反射API在内部统一处理方法调用逻辑,而不需要区分静态方法和非静态方法。