2012-05-12 3 views
-2

나는 그 기능을 의미합니다. 죄송합니다!Java 메소드가 실행되는 순서는 무엇입니까?

다음 코드를 사용하면 별도의 작업을 수행하는 몇 가지 클래스가 있습니다. 그들은 결코 서로를 호출하지 않기 때문에 어떤 명령을 실행합니까?

동시에 실행합니까?

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 

public class Moving extends JPanel implements ActionListener { 
    int x, y; 
    Timer timer; 

    Moving() { 
     x = 0; 
     y = 0; 
     timer = new Timer(10, this); 
    } 

    public void actionPerformed(ActionEvent e) { 
     x += 1; 
     y += 1; 
     repaint(); 
    } 

    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     if (x > 1080 && y > 880) { 
      x = 0; 
      y = 0; 
     } else { 
      g.fillOval(x, y, 40, 40); 
     } 
    } 

    public static void main(String[] args) { 
     JFrame f = new JFrame("Moving"); 
     f.setBackground(Color.GREEN); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     Moving m = new Moving(); 
     f.add(m); 
     f.setSize(1100, 900); 
     f.setVisible(true); 
     m.timer.start(); 
    } 
} 
+7

........... huh? – dantuch

+2

질문은별로 의미가 없습니다. 예를 들어 클래스가 하나뿐입니다. 자세한 내용을 추가 할 수 있습니까? –

+0

** 나는 함수를 의미했다. 미안하다. ** – user1345415

답변

1

나는 방법이 아니라 수업을 의미한다고 가정합니다. 또한 조작 순서는 사용자가 호출하는 순서 (예 : main)에 따라 결정됩니다. 귀하의 예제에서는 Moving 생성자 만 호출하므로 클래스에서 실행될 유일한 "메서드"입니다. 다른 것은 정의되었지만 호출되지 않았기 때문에 실행되지 않습니다 (적어도 제공된 코드에는 포함되지 않음).

업데이트 (감사합니다 dacwe 및 cHao) : 죄송합니다. JPanel에 익숙하지 않아이 클래스 외부에서 호출되는 메서드를 인식하지 못했습니다. 이 경우 repaint() 메서드는 간접적으로 paintComponent()을 호출하고 타이머는 actionPerformed에 대한 호출을 설정합니다. This post은 더 자세히 설명해줍니다.

또한 메모로 - Java는 일반적으로 "동사"메소드를 호출합니다. 부분적으로 대부분의 OO 언어의 관습, 부분적으로 클래스에 묶여 있기 때문에 부분적으로 그 구별이 있습니다. 함수형 언어 인 Javascript는 동사를 "함수"라고 부릅니다.

+1

'paintComponent' 메소드가 EDT에 의해 호출되고 타이머는'actionaPerformed' 메소드를 실행합니다 ... – dacwe

+0

'actionPerformed'와 마찬가지로, 코드가 컴파일되고 실행된다고 가정합니다. 'main'은 타이머를 시작합니다. – cHao

+0

@GrailsGuy'actionPerformed'는'Timer'에 의해 10 밀리 초 간격으로 호출됩니다. – GETah

0

여러분의 프로그램은 다음과 같은 순서로 실행합니다

  1. main 진입 점
  2. Moving 생성자
  3. Timer 클래스
  4. Moving.actionPerformed(ActionEvent e)의 방법은 10 밀리 초마다
  5. 호출되는 생성자
  6. Timer.start()
  7. Timer
+0

3.5 :'paintComponent'는 main에서'setVisible'에 의해 실행됩니다.5a :'paintComponent'는'actionPerformed'에서'repaint'에 의해 트리거됩니다. – cHao

+0

@cHao 사실, 그 벌금 세부 사항에 들어가고 싶지 않았어 :) – GETah

관련 문제