2011-11-25 43 views
3

我們正在運行時得到NoSuchMethodError。我只想知道我們是否得到這個錯誤,因爲在服務器的類路徑中沒有找到父類,或者找到類但已過時。來自第三方父級的NoSuchMethodError

我問這個問題的原因是,JRE在ExpressionEvaluator的實例化過程中檢查JEP類的存在,還是隻在調用一個方法時才檢查,而該方法又調用超類方法?

import org.nfunk.jep.JEP; 

/** TODO Explain this class */ 
public class ExpressionEvaluator extends JEP { 

    public ExpressionEvaluator() { 
    } 
... 
... 

客戶機代碼

public static boolean checkExpressionValidity(String ruleExpression) { 
    ExpressionEvaluator evaluator = new ExpressionEvaluator(); // instantiation 
    if (!(ruleExpression.contains(">") || ruleExpression.contains("<") 
      || ruleExpression.contains("==") || ruleExpression.contains("!="))) { 
     return false; 
    } 

    String ruleExpressionForValidation = ruleExpression.replaceAll(
      REGEX_FUNCTION_FINDER, "1"); 
    evaluator.parseExpression(ruleExpressionForValidation); // super class method. 

回答

4

確實JRE接着檢查類JEP的的ExpressionEvaluator的實例化期間存在?

當然,因爲當JVM創建的ExpressionEvaluator的情況下,其執行父類的構造

+0

@aleroot不,這不是,看[這裏](http://java.sun.com/docs/books/jls/ third_edition/html/classes.html#8.8.7) – soulcheck

+0

@aleroot如果您的類正在擴展另一個類,並且在這兩個類中都有一個無參數構造方法,那就是自動調用! – r0ast3d