2011-11-25 42 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