Java中的動態和靜態編譯實例詳解。本站提示廣大學習愛好者:(Java中的動態和靜態編譯實例詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是Java中的動態和靜態編譯實例詳解正文
Java中的動態和靜態編譯實例詳解
首先,我們來說說動態和靜態編譯的問題。
Q: java和javascript有什麼區別?
總結了一下:有以下幾點吧:
1.首先從運行環境來說java代碼是在JVM上編譯成class文件,而javascript則直接在浏覽器上加載運行。
2.由第一點可看出,java代碼需要編譯,而javascript不需要編譯。
3.從語言性質來說,java是一種高級編程語言,對變量檢查要求嚴格,javascript只是一個簡單的解釋性的腳本語言,對變量檢查及要求很弱。
4.javascript是一種動態的語言,java則是"半動態"的。
javascript是動態的,這無須質疑。為什麼java是半動態的?請看下列代碼:
public class Color{ public void changeColor(){ System.out.println("要改變的顏色是紅色"); } }
public class Frame{ public static void main(String args[]){ Color c=new Color(); c.changeColor(); } }
Frame類中通過直接new一個Color對象從而調用其方法,這是在編譯時確定對象,從而確定關系。我認為這是java語言靜態性的一個體現。而且如果編譯後的Color.class文件丟失,會報一個錯誤。
java.lang.NoClassDefFoundError........
如果通過以下代碼,我們則可以發現java的動態性:
public interface Color{ public void changeColor(); }
public class ColorImp implements Color{ public void changeColor(){ System.out.println("顏色改變為紅色"); } }
public class Frame{ public static void main(String args[])throws Exception{ System.out.println("請輸入您要輸入的類的名字"); //輸入一個類的名字 java.util.Scanner sc=new java.util.Scanner(System.in); String s=sc.next(); //加載這個類 Class c=Class.forName(s); //獲得這個類的實例化對象 Object obj=c.newInstance(); //強制轉型 Color color=(Color)obj; color.changeColor(); } }
注意Frame類,當我們編譯它的時候,只會出現兩個class文件--Frame.class和Color.class,然後我們運行這個程序,由於沒有編譯ColorImp,會拋出一個異常-- java.lang.ClassNotFoundException。
於是,我們打開另一個cmd進程,單獨編譯ColorImp類,再在上一個cmd對話框中輸入ColorImp,則程序會正常運行。
這樣我們可以在不停止程序運行的情況下,動態地加載一個類。我認為這體現出了Java的動態性。通過上面的例子,我認為java語言是一種“半動態”語言。
我們可以看出,上述例子使用了Color接口類。這裡不得不提我對接口的一點小小感觸。
在使用數據庫的時候,Java語言只是定義了一個數據庫接口,然後不同的數據庫來實現這個借口。這些包括了(以mysql數據庫為例)
加載數據庫驅動:
Class.forName("com.mysql.jdbc.Driver");
建立與數據庫的鏈接:
java.sql.Connection conn = java.sql.DriverManager.getConnection( url, user, password);
取得編譯對象和結果集對象等,這些都只是定義了接口,具體的實現則交給了數據庫開發商,只要實現了這個接口就行。這就體現了接口的擴展性和規范性。
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!