2009-05-08 7 views
0

어떤 이유로 든 반환 형식 클래스 (SQLExecutionInfo 클래스)를 실행하는 것으로 보이는 일부 Java 코드를 이해하려고 시도하고 있으며 그 밖의 메서드는 없습니다. 는 아마도 이것은 자바가 어떻게 작동하는지 단순히Java 메소드의 접두사 반환 유형 만 실행되는 이유는 무엇입니까?

방법은 이렇게 시작된다 (즉 관계없이 메소드 본문 내에서 첫번째 ?? 실행 반환되는 클래스의 유형이 무엇인지의 여부) :

protected Query.SQLExecutionInfo compileSingleQDB(StatementExpression statement, boolean keyNeeded) throws StatementException, XMLDBCException { 

//body of method 
System.out.println("body of method"); 
} 



/*****THE REFERENCED SQLExecutionInfo class is a subclassed within Query.java***********/ 

public static class SQLExecutionInfo { 
    public SqlExpression sql = null; 
    public StatementInfo sInfo = null; 
    public Mapper mapper = null; 
    public List childrenQueries = null; 
    public int[] idPosition = null; 
    public int idCount = -1; 

    public SQLExecutionInfo() { 
    } 

    public SQLExecutionInfo(SqlExpression sql, Mapper mapper) { 
     System.out.println("POINT ALPHA2:"+ sql); 
     this.sql = sql; 
     this.mapper = mapper; 
    } 

들어 compileSingleQDB 메서드 (즉, 본문)의 일부 이유가 실행되지만 SQLExecutionInfo 클래스가 호출되고 System.out.println ("POINT ALPHA2 :"+ sql)이 호출됩니다.

누구나 설명해주세요. 이유가 무엇입니까?

감사합니다, 파블로

나 더 많은 정보를 제공하겠습니다 :

나를 당황이이 하나,

모든 코드 실행이 여기에서 시작 : 아직 어떻게 든

 System.out.println("POINT SQL:"+jdbcExecInfo.sql); // Returns null at this stage  
try { 
    System.out.println("POINT A"); 
    jdbcExecInfo = compileSingleQDB(((Variable) Qdb.get(0)).getExpression(), false); 
    System.out.println("POINT B"); 
    } catch (Exception e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 
System.out.println("POINT SQL:"+jdbcExecInfo.sql); // Somehow now has a value ???? 

가 포인트 B에 도달하고 내가 넣은 경우에도 : Thread.dumpStack(); and new Error().printStackTrace();

compileSingleQDB 메서드 내에서 아무것도 나타나지 않습니다.

protected Query.SQLExecutionInfo compileSingleQDB(StatementExpression statement, boolean keyNeeded) throws XQueryException, XMLDBCException { 

    return null; 
} 

jdbcExecInfo.sql 여전히 어떻게 든 값 내 이전의 대답은 후

+0

'(main 메소드의 유일한 문과 같이) 컨텍스트 외부에 (의미있는) 인수 (null 및 false)가없는'compileSingleQDB' 메서드를 호출하면 SQLExecutionInfo의 생성자가 호출됩니다. –

+1

이 코드를 컴파일하는 방법을 알지 못합니다. compileSingleQDB 메서드는 아무 것도 반환하지 않으며 내 서명에 필요합니다. – laz

답변

1

적용되지 않았다에게 얻는 문자열 : 나는 compileSingleQDB 방법의 내부를 꺼내서로 교체하는 경우에도 또한

질문이 편집되었습니다.

내 생각에이 샘플에는 관련 코드가 없습니다.

+0

제 편집이 코드를 변경하지 않았습니다. 미리 형식화 된 코드를 작성했습니다 ("such :"다음에 개행을 추가했습니다). –

3

게시 한 코드로 동작을 설명하기에 충분하지 않습니다. 그 타입이나 클래스는 "호출"되지 않습니다. print 문은 생성자에 있으므로 분명히 어딘가에 SQLExecutionInfo의 인스턴스가 만들어집니다 (Java에서는 자동으로 처리하지 않습니다). compileSingleQDB()의 끝 부분에있는 print 문이 실행되지 않는 동안 이런 일이 발생하는 경우 예외가 발생하거나, 멀티 스레딩 또는 단순히 잘못된 코드 등 여러 가지 원인이있을 수 있습니다.

문제가 발생했거나 문제를 재현 할 수있을 정도로 충분히 작을 때까지 문제를 찾아내는 코드를 줄여보십시오.

+0

Thrad.dumpStack(); 또는 새로운 Error(). printStackTrace(); 생성자 내부에서 호출 된 위치에 대한 정보를 제공합니다. –