2014-07-26 39 views

回答

5

實際的主要方法是在別的地方。例如,在the KarelRunner class。當java執行程序時,它實際上是在runner類中執行main方法。您自己的運行方法是從該運行程序代碼中調用的。

0

當您閱讀所有這些說明時,您會發現卡雷爾運行的程序只是較大系統的一小部分 - 較大的系統涉及繪製地圖,發現邏輯錯誤等。 run(),那麼您使用其中一個實際運行整個系統的類,其中一個在您的程序上調用run()。祝你好運。

0

的關鍵,這是很簡單:extends Karel

Karel類是一個實現Runnable,並在其內具有相當多的方法。

沒有試圖去將詳細介紹什麼都這樣做,看起來是這樣的:

public class Karel implements java.lang.Runnable { 
    private static final int NORTH = 0; 
    private static final int EAST = 1; 
    private static final int SOUTH = 2; 
    private static final int WEST = 3; 
    private static final int INFINITE = 99999999; 
    private stanford.karel.KarelWorld world; 
    private int x; 
    private int y; 
    private int dir; 
    private int beepers; 

    public Karel() { /* compiled code */ } 
    public void run() { /* compiled code */ } 
    public void move() { /* compiled code */ } 
    public void turnLeft() { /* compiled code */ } 
    public boolean beepersPresent() { /* compiled code */ } 
    public boolean noBeepersPresent() { /* compiled code */ } 
    public boolean beepersInBag() { /* compiled code */ } 
    public boolean noBeepersInBag() { /* compiled code */ } 
    public boolean facingNorth() { /* compiled code */ } 
    public boolean facingEast() { /* compiled code */ } 
    public boolean facingSouth() { /* compiled code */ } 
    public boolean facingWest() { /* compiled code */ } 

    public static void main(java.lang.String[] args) { /* compiled code */ } 
    protected void start() { /* compiled code */ } 
    protected void start(java.lang.String[] args) { /* compiled code */ } 

    ... 
} 

我從那裏,因爲它的東西很長的列表,它定義拿出相當多的方法。

但最後一個,我留在那裏的礦石...... protected void start(java.lang.String[] args)(或至少,這是我的圖書館檢查員如何解釋它)。 深入研究這段代碼,看起來這調用了KarelProgram中的main(),但大多數情況下,這不是在這裏,也不是在那裏。

因此你有繼承。您正在繼承代碼正在使用的許多其他方法。您在該代碼中使用move();但未對其進行定義應該比定義main(java.lang.String[] args)更令人驚訝。

它只需要在IDE中的jar中打開該類。

+0

什麼是公共內部static void main(java.lang.String [] args){/ *編譯代碼* /}? – user3276091

+0

不知道,我對該方法的觀點是編碼字節碼,並且裏面有一個'invokestatic'。我真的沒有打擾太深,並且源文件沒有附加在.jar文件中。 –

1

沒有什麼奇怪的。 CollectNewspaperKarel課程只是擴展了卡雷爾的行爲。 它不需要有main方法。

,這將是該程序的入口點的類確實需要main方法和創建CollectNewspaperKarel一個實例,如:

public class MyProgram { 

    public static void main(String[] args) { 
     CollectNewspaperKarel cnpk = new CollectNewspaperKarel(); 
     cnpk.run(); 
    } 
} 

或者CollectNewspaperKarel的實例可以是靜態的現場:

public class MyProgram { 
    private static CollectNewspaperKarel cnpk = new CollectNewspaperKarel(); 
    public static void main(String[] args) { 
     cnpk.run(); 
    } 
} 

卡雷爾是不是一個應用程序,它是一個API。你製作應用程序。

2

「主」方法是每個java程序的出發點。這個類正在發生的事情是,它不是一個java程序本身,而是在某種類型的框架(在這種情況下是karel robot java實現)中執行的,這個框架偏離了過程的「主要」方法,而不是這個類,框架知道如何加載這個類並執行他的運行方法。這個「程序」是設計用於執行特定類型程序的框架,我不知道這個「karel框架」,但是例如,當你編寫一個java web應用程序時,你寫了一個「servlet」,但是你不用寫一個「主要」方法。有一些程序稱爲「應用程序服務器」,當然有一個「主要」方法,並採用此servlet類並執行以響應某些http消息。

相關問題