,4种.
30004希望对你有帮助!
在一个类的内部,一般包括以下几类成员:成员变量、构造方法、普通方法和内部类等。使用反射机制可以在无法查看源代码的情况下查看类的成员。编写程序,使用反射机制查看ArrayList类中定义的成员变量、构造方法和普通方法。思路分析:这个ArrayList类不是自己定义的,就是Java里面的java.util.ArrayList类。
代码如下:
import java.lang.reflect.Constructor
import java.lang.reflect.Field
import java.lang.reflect.Method
public class ClassViewer {
public static void main(String[] args) throws ClassNotFoundException {
Class<?>clazz = Class.forName("java.util.ArrayList")
System.out.println("类的标准名称:" + clazz.getCanonicalName())
Constructor<?>[] constructors = clazz.getConstructors()// 获得该类对象的所有构造方法
System.out.println("类的构造方法:")
if (constructors.length != 0) {
for (Constructor<?>constructor : constructors) {
System.out.println("\t" + constructor)// 输出构造方法
}
} else {
System.out.println("\t空")
}
Field[] fields = clazz.getDeclaredFields()// 获得该类对象的所有非继承域
System.out.println("类的非继承域变量:")
if (fields.length != 0) {
for (Field field : fields) {
System.out.println("\t" + field)// 输出非继承域
}
} else {
System.out.println("\t空")
}
Method[] methods = clazz.getDeclaredMethods()// 获得该类对象的所有非继承方法
System.out.println("类的非继承方法:")
if (methods.length != 0) {
for (Method method : methods) {
System.out.println(method)// 输出非继承方法
}
} else {
System.out.println("\t空")
}
}
}
这个涉及到jvm虚拟机的类加载机制 ,static成员变量和方法在类加载过程的最后一步就已经用<clinit>()方法初始化了,a.test()? 虚拟机完全不会认为,因为test()是类方法,所以任何对象调用它的时候等同于直接test(),这个方法不属于任何对象私有,你的a=null是有点刁难它,但虚拟机更叼,它才不会理会你哪个对象调用它 ,这与它无关,因为它已经初始化了,无需对象引用,直接调用就是了。说得有点乱,望对楼主有帮助!
手速慢了 楼主已经采纳了!悲伤。。。。。