2011-03-28 36 views
2

我使用下面的代碼來確定一個類中函數的數量。類似的方法可以幫助我確定Java程序中的函數數量。在我的程序中,我將輸入文件作爲一個類。指導我使用代碼將輸入作爲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); 
     } 
    } 
+2

會出現這種情況是功課? – 2011-03-28 15:21:29

+0

「將輸入作爲Java程序」是什麼意思?你想要計算什麼? – 2011-03-28 15:38:44

回答

1

在JDK6 +,你可以在編譯使用JavaCompiler運行該文件,並使用舊代碼,找到的方法數。

編輯:
獎勵:與

System.out.println("Total number of methods: " + 
       java.beans.Introspector.getBeanInfo(//your class name here 
              ).getMethodDescriptors().length); 
2

首先更換相應的代碼,

Class cls = Class.forName("Madhu"); 

需要所需類的完全限定名。例如Class.forName("java.lang.Thread")'

其次,

Method methlist[]= cls.getDeclaredMethods(); 

返回publicprotectedprivate和該特定類只(它不包括繼承的方法)的默認方法。

第三,

MthdLen=MthdLen+(m.getName().length()); 

總結了方法名的字符串長度。你需要做什麼?你可以簡單地做一個數如下:

int MCount = cls.getDeclaredMethods().length; //If the "getDeclaredMethods()` doesn't return a null. 

最後,如果你需要獲得類的所有繼承的公共&保護的方法,你會做

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

Java沒有任何功能,所以答案是0;)

如果你正在尋找的方法數,你要問自己,你想

  • 包括繼承的方法。
  • 重複計數一次或多次。
  • 包含Object中的所有方法。

例如

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()