我使用以下代码来识别类中的函数数量。任何人都可以用类似的方式帮助我识别java程序中的函数数量。在我的程序中,我将输入文件作为一个类。引导我使用代码将输入作为java程序并查找其中声明的函数的数量。
import java.lang.reflect.*;
import java.io.*;
import java.lang.String.*;
public class Method1 {
private int f1(
Object p, int x) throws NullPointerException
{
if (p == null)
throw new NullPointerException();
return x;
}
public static void main(String args[])throws Exception
{
int Mcount=0,MthdLen=0;
try {
Class cls = Class.forName("Madhu");
int a;
Method methlist[]= cls.getDeclaredMethods();
for (int i = 0; i < methlist.length;i++)
{
Method m = methlist[i];
Mcount = Mcount + 1;
MthdLen=MthdLen+(m.getName().length());
}
}
catch (Throwable e) {
System.err.println(e);
}
System.out.println("Length = " + MthdLen);
System.out.println("Mcount = " + Mcount);
}
}
答案 0 :(得分:4)
首先,
Class cls = Class.forName("Madhu");
需要所需类的完全限定名称。例如Class.forName("java.lang.Thread")'
。
其次,
Method methlist[]= cls.getDeclaredMethods();
仅返回public
,protected
,private
和该特定类的默认方法(它排除了继承的方法)。
第三,
MthdLen=MthdLen+(m.getName().length());
总结方法名称的字符串长度。你需要这个什么?您可以按如下方式进行计数:
int MCount = cls.getDeclaredMethods().length; //If the "getDeclaredMethods()` doesn't return a null.
最后,如果你需要获得所有继承的公共&amp;你可以做那个类的受保护方法
Class<?> class2 = cls.getSuperClass();
//Get all methods using
Method[] methods2 = class2.getDeclaredMethods();
//Iterate through methods2 and retrieve all public, protected methods and add it to MCount.
希望这有帮助。
答案 1 :(得分:1)
在JDK6 +中,您可以使用JavaCompiler在运行时编译该文件,并使用旧代码查找方法数。
修改强>
额外奖励:用
System.out.println("Total number of methods: " +
java.beans.Introspector.getBeanInfo( //your class name here
).getMethodDescriptors().length);
答案 2 :(得分:1)
Java没有任何功能所以答案是0.;)
如果您正在寻找方法的数量,您必须问自己,您想要
e.g。
public class Main {
static class A {
public String toString() {
return super.toString();
}
}
static class B extends A {
public String toString() {
return super.toString();
}
}
public static void main(String args[]) {
for(Class clazz = B.class;clazz != null;clazz = clazz.getSuperclass()) {
for(Method m: clazz.getDeclaredMethods())
System.out.println(m);
}
}
}
打印
public java.lang.String Main$B.toString()
public java.lang.String Main$A.toString()
protected void java.lang.Object.finalize() throws java.lang.Throwable
public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
public final void java.lang.Object.wait() throws java.lang.InterruptedException
public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
public boolean java.lang.Object.equals(java.lang.Object)
public java.lang.String java.lang.Object.toString()
public native int java.lang.Object.hashCode()
public final native java.lang.Class java.lang.Object.getClass()
protected native java.lang.Object java.lang.Object.clone() throws java.lang.CloneNotSupportedException
private static native void java.lang.Object.registerNatives()
public final native void java.lang.Object.notify()
public final native void java.lang.Object.notifyAll()
答案 3 :(得分:1)
我使用此代码找出另一个类中一个类中方法的数量。
public class test1 {
public static void main(String[] args)
//if use in class
//Method[] s = getClass.getDeclaredMethods();
Method[] s = SmokeTestTests.class.getDeclaredMethods();
int methodCounter = 0;
for (Method method :
s) {
++methodCounter;
}
System.out.println(methodCounter);
}