java從0單排之複習與面試題回顧——01

第一章:java開發前奏

1.java是一種簡單易用,完全面向對象,有平臺無關性,安全可靠的主要面向internet的開發工具。

QA:平臺無關性啥東東?
     89:   這裏跨平臺的原理需要說到一個概念,java虛擬機(JVM),它是可運行java字節碼(.class文件)的假想計算機。
       原本c語言是首先windows下編譯程序編譯c源代碼(.c文件)成爲window下可執行的文件(.exe文件,這裏的可執行文件是通過編譯,彙編,鏈接生成的目標代碼,也就是二進制文件,然後cpu直接執行目標代碼,所以速度很快),window操作系統會執行exe可執行文件(從exe文件中取出一條條計算機指令,交給cpu去解釋執行)。所以不同的操作系統,需要不同的編譯程序去編譯源代碼成爲當前系統能夠執行的文件。所以你將在window下編譯的.exe文件放到linux系統下是無法執行的。
       而java編譯過程是:java源代碼(.java文件)通過java編譯程序預編譯爲字節碼文件(.class文件,這裏並不生成目標機器代碼,而是生成JVM能夠執行的字節碼文件,然後由JVM解釋程序執行,所以比起c++效率要低一些),然後交給JVM虛擬機去執行,JVM虛擬機會根據不同的OS去執行對應的java字節碼解釋程序(JVM會有事先寫好的對應os下的解釋程序,如果有一種os沒有其對應的java字節碼解釋程序,那麼java也就無法在此os上運行了)。然後交給cpu去執行。
       所以在不同os下編寫的.class文件,放到其他os上,只要有JVM也是可以運行的。從而實現跨平臺。(個人感覺相當於在可執行文件與os的cpu之間封裝了一下,提供了一個統一的對外接口,即:.class文件。你不需要知道JVM內部是如何與不同的OS進行交互的,只需要能夠生成JVM能夠識別的.class文件即可。這裏笨小蔥又想到了jdbc,你不需要知道我和不同的db是如何交互的,只需要調用我提供的統一的api接口就可以了
       
(這裏涉及到解釋器和編譯器,其區別可以查看笨小蔥轉載的博客:http://blog.csdn.net/sunshine920103/article/details/48391537


QA:計算機上安裝了多個java開發工具,怎麼知道在cmd中執行的java命令屬於哪個開發工具包中的呢?
   89: 執行   java -verbose

2.java中的程序必須以類(class)的形式存在,一個類要能被解釋器直接啓動運行,這類中必須有main函數,jvm運行時首先調用這個類中的main函數,main函數的寫法是固定的,必須是public static void main(String [] args).

QA:  如果寫成public static void main(String [] abc)   程序還能正常運行麼??
     89:可以正常運行。這裏需要確保public,static ,void 和String [] 不能變,至於字符串數組的名字可以自己設定。

QA:現在有一個test.java文件,裏面代碼如下:
       class cc
{
public static void main(String []abc)
{
System.out.println(abc[0]);
}
}

class abc
{
int a;
}
  問,現在使用javac test.java 編譯後,會產生什麼文件?然後如何使用java命令執行?
       89:編譯後會生成cc.class  ,  abc.class 2個對應的類文件。然後使用java cc  來運行有main函數的類。這裏java命令是啓動一個虛擬機,後面接的參數必須是帶有main函數的類名,不是文件名。
發佈了35 篇原創文章 · 獲贊 15 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章