昭宇 發問時間: 電腦與網際網路程式設計 · 1 0 年前

請教JAVA編譯時的注意訊息和程式流程

以下程式在compiler時出現以下訊息

我看不太懂,看的懂人請說明一下

Note: C:\\test.java uses or overrides a deprecated API.

Note: Recompile with -Xlint:deprecation for details.

然後我想問以下程式的執行順序:

main方法應該是程式的進入點,

但是後來我唸到建構子又說會先執行

我的觀念上有點亂,尤其是在有一樣的名字上(test)

以下我分為三部份,請告訴我程式執行時的順序

並說明一下觀念,感謝! 

import java.awt.*;

class test extends Frame {

//第一部份

CheckboxGroup optGroup;

Checkbox option1,option2;

Checkbox chkbox1,chkbox2,chkbox3;

//第二部份

public test() {

setLayout(null);

setSize(300,300);

optGroup = new CheckboxGroup();

option1 = new Checkbox(\"初級\",optGroup,false);

option2 = new Checkbox(\"進階\",optGroup,true);

option1.setBounds(80,80,50,30);

option2.setBounds(140,80,50,30);

add(option1);

add(option2);

chkbox1 = new Checkbox(\"Java\",true);

chkbox2 = new Checkbox(\"Visual BASIC\");

chkbox3 = new Checkbox(\"Visual C++\");

chkbox1.setBounds(120,120,50,30);

chkbox2.setBounds(120,150,50,30);

chkbox3.setBounds(120,180,50,30);

add(chkbox1);

add(chkbox2);

add(chkbox3);

show();

}

//第三部份

public static void main(String args[]) {

new test();

}

}

已更新項目:

所以照您所說,程式執行是先第三部分→第一部分→第二部份,主程式的new test();呼叫test類別做宣告,再跑test方法,對嗎?

2 個已更新項目:

我用您的方法將第三部份主程式移出來另外用一個class包住,但是JVM仍然不贊成,請問問題是出在哪邊?我應該要怎麼改會比較好,想請您再說仔細一些,感謝

3 個解答

評分
  • 1 0 年前
    最佳解答

    Question 1: 請問以下文字的意義

    Note: C:\test.java uses or overrides a deprecated API.

    Note: Recompile with -Xlint:deprecation for details.

    Question 2:請問程式執行的順序

    以下略...

    Ans 1 : Java的編譯程式有許多的版本,最新的是5.0 update 7,

    在版本演進的過程中,有一些Class or Class的方法會被取代,可能是因為

    不安全或是有其他更好的替代方式之類的,但是之前已經用舊方法寫

    好的程式不能因為用新的Compiler就變成不能過啦~所以舊方法還是

    保留了下來,只是再編譯時,編譯器會告訴你此方法不贊成(Deprecated)

    這只是警告,Compiler還是會過

    給個例子,您可以看看 OnLine API

    http://java.sun.com/j2se/1.5.0/docs/api/java/sql/D...

    Date類別有很多方法都不建議了...所以程式有用到這些方法時,

    Compiler都會說''deprecated"!!

    Ans2:

    Main()是程式的進入點沒錯,您在Main中呼叫了

    new test();這時才去呼叫類別 test 的建構子

    第一部分祇是類別的宣告而已,一般都會在建構子中

    給值作一些初始的動作

    Class就是物件,物件是物件,Main function 只是去呼叫

    使用Class.當你有很多Class互相運作時,其中只能有一個

    Class有Main function,這是告訴OS要執行哪一個Class,

    不然這麼多Class,OS哪知道要要從哪個開始執行,至於每一個

    Class出生時,則是要從建構子開始執行

    我的習慣是另外寫一個Class Runner,只有Main function,

    專門用來使用其他類別而已,這樣就很清楚明瞭

    public Class Toyota(){...}

    public Class Yamaha(){...}

    public Class Factory()

    {

    private Toyota car1;

    private Yamaha car2;

    public makeCars()

    { car1 = new Toyata(); car2 = new Yamaha();}

    }

    public Class Runner()

    {

    //程式從這裡執行

    public static void main(String[] argc)

    {

    Factory f = new Factory();

    f.makeCars();

    }

    }

    救醬!!有解答到您的問題ㄇ ?

    參考資料: 小弟本人在下我
  • 匿名使用者
    5 年前

    【亞洲36588合法彩券公司直營 官網: A36588.NET 】

    【 最新活動→迎接新會員,首存狂送20% 】

    【運動→電子→對戰→現場→彩球 】

    【免費服務 →電影區、討論區、KTV歡唱、運動轉播、即時比分、24H客服 】

    【亞洲36588合法彩券公司直營 官網: A36588.NET 】

  • Note: C:\test.java uses or overrides a deprecated API.

    Note: Recompile with -Xlint:deprecation for details.

    see

    http://java.sun.com/j2se/1.5.0/docs/api/java/awt/C...

    Deprecated. As of JDK version 1.1, replaced by setVisible(boolean).

還有問題?馬上發問,尋求解答。