spublic Method[] getDeclaredMethods()
throws SecurityException返回 Method 对象的一个数组,这些对象反映此 Class 对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。返回数组中的元素没有排序,也没有任何特定的顺序。如果该类或接口不声明任何方法,或者此 Class 对象表示一个基本类型、一个数组类或 void,则此方法返回一个长度为 0 的数组。类初始化方法 <clinit> 不包含在返回数组中。如果该类声明带有相同参数类型的多个公共成员方法,则它们都包含在返回的数组中。
下面一段代码在Sausage 写了两个方法,其中一个是重写了父类的getIngredient() 方法。Sausage.class.getDeclaredMethods()却返回了三个方法,包括两个getIngredient() 和他自己的showDescription()方法,请问这是为什么?为什么会拿到了父类的方法?
import java.util.*;
import java.lang.reflect.*;
class Food{
private Object ingredient;
public Object getIngredient(){
return ingredient;
}
public void showDescription(){
}
}
class Sausage extends Food{
private ArrayList ingredient;
public ArrayList getIngredient(){
return ingredient;
}
public void showDescription(){
System.out.println("I'm very delicious!");
}
}
class Test{
public static void main(String[] args) throws Exception{
Method[] ms = Sausage.class.getDeclaredMethods();
System.out.println(ms.length);
}
}
相关推荐
总结,Java反射机制为我们提供了强大的动态性,能够方便地获取和操作类的属性和方法,包括私有成员和子类父类中的成员。通过熟练掌握反射技术,开发者可以实现更灵活、更动态的代码,但也需要谨慎使用,以避免潜在的...
### Java反射操作父类所有属性和方法 #### 一、引言 在Java编程语言中,反射(Reflection)是一项强大的特性,它允许程序在运行时动态地获取类的信息,并能够直接操作这些信息。通过反射,我们可以获取类的字段、...
例如,如果我们有一个名为`MyClass`的类,我们可以这样获取它的父类: ```java Class<?> superClass = MyClass.class.getSuperclass(); ``` 2. 获取父类的所有属性: 有了父类的`Class`对象后,我们可以通过`...
Java反射机制是Java语言...通过`Class`对象,我们可以获取类的详细信息,包括但不限于字段、方法、接口和父类,这为我们提供了强大的编程灵活性。在实际开发中,应谨慎使用反射,因为它可能会降低代码的可读性和性能。
Java 中 Class.getMethods() 和 Class.getDeclaredMethods() 方法的区别 Java 中的 Class.getMethods() 和 Class.getDeclaredMethods() 是两个常用的方法,它们都可以用来获取某个类的方法,但是它们之间存在着一些...
接下来,我们可以遍历这些方法,分析它们的参数类型、返回类型以及是否为静态或抽象方法等属性。 ```java for (Method method : methods) { System.out.println("方法名:" + method.getName()); System.out....
对于有成员值的注解,可以使用`Annotation`对象的`annotationType().getDeclaredMethods()`来获取成员方法,然后调用这些方法来获取值。例如,对于注解`@MyAnnotation(value="test")`,可以这样获取值: ```java ...
我们使用 `getDeclaredMethods` 方法来获取该类的所有方法,然后遍历每个方法,检查其是否拥有 `DescriptionAnno` 注解,如果是,则将其描述信息输出。 结论 在本文中,我们提供了一种获取同一路径下所有类及其...
- `getDeclaredMethods`:这个方法可以用来获取对象的所有声明方法,同样包括公有、保护、默认(包)访问和私有方法,但不包括继承的方法。 - `getDeclaredField(String name)`:这个方法可以用来获取对象中特定名称...
2. `getDeclaredMethods()`:返回类自身声明的所有方法,不包括继承的方法,但包括私有方法和接口中的方法。 3. `getMethod(String name, Class<?>... parameterTypes)`:根据指定的方法名和参数类型获取公共方法,...
- `getDeclaredMethods()`:返回当前类声明的所有方法,不包括超类方法。 - `getMethod(String name, Class<?>... parameterTypes)`:根据方法名和参数类型获取公共方法。 - `getDeclaredMethod(String name, ...
5. 获取方法:`getMethods()`返回所有公共方法,`getDeclaredMethods()`返回所有方法。 6. 调用方法:`getMethod(String name, Class<?>... parameterTypes)`或`getDeclaredMethod(String name, Class<?>... ...
`Class`类提供了`getMethods()`方法,它会返回一个`Method`对象数组,包含了类及其所有父类的所有公共方法。如果只想获取类自身声明的方法,可以使用`getDeclaredMethods()`。 ```java Method[] methods = clazz....
使用`getFields()`方法可以获取到类的所有public字段,如果需要获取包括私有的和受保护的字段,可以使用`getDeclaredFields()`方法。这些`Field`对象提供了设置和获取字段值的能力,通过`set()`和`get()`方法。 `...
`getDeclaredMethods()`和`getMethods()`方法会返回包括合成方法在内的所有方法,这就是为什么通过反射可以发现这些原本在源代码中看不到的方法。 **桥接方法(Bridge Methods)** 桥接方法是Java泛型和类型擦除的...
2. **获取私有方法的Method对象**:使用`Class`对象的`getDeclaredMethods()`方法,可以获取类中所有的方法,包括私有方法。然后通过`getMethod()`或`getDeclaredMethod()`方法,指定方法名和参数类型,获取私有方法...
- `getMethod()`, `getField()`, `getConstructor()`:获取指定名称的方法、字段或构造器,它们不包含父类的成员。 4. **反射示例**: 在给出的代码示例中,`MyTest`类展示了如何使用反射API获取用户输入的类的...
`Method`类代表类中的单个方法,通过`getDeclaredMethods()`可以获取类中所有声明的方法,包括私有方法和父类的方法。每个`Method`对象包含了方法名、返回类型、参数类型等信息。例如,`Method m[] = c....
在"ReflectTest"这个测试中,我们将深入探讨如何使用反射来访问和操作类的属性、方法以及注解,同时也会涉及到泛型的处理。下面我们将详细讲解这些知识点。 首先,让我们从属性的获取开始。在Java中,我们可以使用`...