⑴ 你知道java的運行原理是什麼嗎
Java這一語言的執行過程也遵循這樣的過程:源代碼--->機器碼。 但是,從源代碼到機器碼之間,究竟經過什麼樣的過程,則是Java獨一無二的了。寬泛地講,Java源代碼(.java)經過java編譯器(javac.exe)編譯之後,並沒有直接轉化為機器碼,而是轉化成一種中間格式,成為位元組碼(.class),位元組碼再經過java虛擬機轉化成特定CPU架構的機器碼。也正是因為這一中間物,java才有所謂的跨平台。在windows平台上編譯好的位元組碼,到linux平台後,經過為linux而設計的Java虛擬機解釋後即可執行。跨平台這一特徵,是通過位元組碼和JVM來實現的。
因此,想搞清楚java程序到底是如何運行的,重點在於弄明白位元組碼是如何被轉化成跟CPU架構相關的機器碼然後被執行的。也就是要理解JVM到底是如何工作的。在了解JVM之前,我們再跳出來一下,先看看什麼是虛擬機。所謂虛擬機,我是這么理解的:用軟體的方式模擬出跟硬體類似的環境,比如說寄存器、存儲器等等。當然,所有最終的工作還是由原來的CPU來完成。比如說VirtualBox這個虛擬機產品,它其實就是一個應用程序,用某種編程語言編寫的應用程序。當運行這個應用程序時,它會要求操作系統給它獨立施展手腳的空間:給我一些內存,給我一定的CPU時間片,然後不用管我了。你可能會問,寄存器是硬體啊,它怎麼能劃分啊,難道是時間劃分?不是的,像內存這樣的硬體,可以給虛擬機一塊獨立的內存塊,但是寄存器之後的,則需要用「模擬模擬」的方式來模擬。OK,回到Java虛擬機。到底什麼是Java虛擬機,很難有一個十分明確的定義,狹窄一點說,它就是一個應用程序,大部分用C++編寫的。寬泛地說,它就是執行位元組碼的一整個環境。
⑵ 誰有java游戲源碼,給我發過來『
注意:源代碼僅供個人作學習研究時的參考,不得在程序製作中直接抄錄。
源代碼一共兩個文件:Mine.java,MGame.java,另外還有一些圖片。
在JBuilder下建立一個新的工程,將兩個源文件復制到工程目錄下的src\mine目錄中,將所有圖片復制到src\images目錄中就可以了。
要點分析
數據結構
首先要說明一下用來存放地雷信息的數組grid。
grid是一個二維數組,第一位對應表格的行,第二位對應表格的列,比如grid[y][x]表示第y行第x列。每個位元組的含義分三段:0-9表示已經挖開;10-19表示仍然埋藏;20-29表示做了標記。每段中:0-8表示周圍的地雷數量;9表示是地雷。
newGame()函數
這是用於開始一個新游戲的。
由於每次地雷的埋放地是隨機的,應次開始新游戲之前先要生成新的地雷信息。
第一步是初始化grid,將所有內容都置成10,因為一開始所有格子都是埋藏的。
for(i=0;i<Height; i++)
{
for(j=0; j<Width; j++)
grid[j] = 10;
}
第二步是隨機產生地雷。當然了,已經產生過地雷的地方要避開。
for(i=0; i<MINECOUNT; i++)
{
while(true)
{
x = Math.abs(rand.nextInt()) % Width;
y = Math.abs(rand.nextInt()) % Height;
if (grid[y][x] != 19)
{
grid[y][x] = 19;
break;
}
}
}
最後就是無雷處計算周圍的雷數了。怎麼計算?一個一個加就是了。
挖雷與做標記
在看一下按鍵響應函數keyPressed(int kcode),按1鍵是挖開動作。
前半部分表示如果當前焦點在一個埋藏格(值介於10到19之間),那麼將其值減10,表示現在挖開。當然如果地下不是雷而且周圍沒有雷(值等於0)那麼需要自動展開,這里調用了Expand(),(selx,sely)是當前焦點的表格坐標。
後半部分表示如果當前焦點在一個已經挖開的格子上(值小於10),那麼就調用SafeExp()來自動挖開周圍未挖的格子。
按3鍵是做標記動作。如果當前格是埋藏格,就做上標記(值加10);如果當前格已經做了標記,那麼就去掉標記(值減10)。
自動展開
Expand()是一個嵌套函數,他的作用是將周圍不含地雷的格子周圍全部挖開,如果挖開的部分中也有周圍不含地雷的格子,那麼對那些格子也重復前面的操作,直到把相關的格子都挖開。挖的順序是左上、上、右上、左、右、左下、下、右下,如果遇到一個周圍不含地雷的格子(值為0)那麼馬上嵌套調用Expand()對那個格子進行處理。
SafeExp()是一個自動挖開周圍未挖格子的函數。當然要實現這個功能是有條件的,就是周圍做了標記的格子數量必須等於當前格所標的數字,也就是說玩家把周圍所有的地雷都標記了(不管是否標錯)。函數中第一個部分就是做以上條件的判斷。
第二部分是把周圍埋藏的格子挖開。但是由於玩家的錯誤可能標記了沒有地雷的格子,而把有地雷的格子漏標了,所以先要檢查一下沒做標而有地雷的格子和做錯標記的格子。如果沒有這些錯誤,那麼可以安全的翻開了,同時也要檢查是否挖到周圍不含雷的格子,有的話就要調用Expand()了。
SafeExp()的返回值表示是否引爆了地雷,就是標記錯誤,true表示是,false表示否。這主要用於判斷這次游戲是否要結束。
類介紹
圖像緩存 ExtendedImage
ExtendedImage是Siemens自己擴展的一個專用類,只在Siemens的Java中存在。
這個類主要是用做圖像的緩存。大家不知道還有沒有印象,以前在PC上編程的時候由於顯示的速度比較慢,往往會開一片顯示緩存,先把要現實的內容畫到這片緩存中,全部畫好後再一次性顯示出來,ExtendedImage類就起到了這個作用。其實Java本身的Image類也可以實現類似的功能,但是顯示速度好象不如人意,而且ExtendedImage更好用,所以我基本上都採用這個類。當然這對通用性是不利的。
ExtendImage的主要函數有:
void clear(byte color);
用給定的顏色填充整個圖形區域。
void blitToScreen(int x, int y);
將緩存內容貼到顯示屏上,(x,y)是屏幕左上角坐標。
Image getImage();
返回一個標準的Image類。可以通過ExtendImage.getImage().getGraphics()得到與其相關的Graphics對象,用來往ExtendImage上面畫圖。
⑶ 求java圖形界面樹類編程源碼舉例。類似windows資源管理器那樣的。如附圖,2層2項即可。
publicvoidinit(){
ContainercontentPane=null;
=newDefaultMutableTreeNode("我的電腦");
1=newDefaultMutableTreeNode("網路");
2=newDefaultMutableTreeNode("硬碟");
1_1=newDefaultMutableTreeNode("無限");
1_2=newDefaultMutableTreeNode("有限");
2_1=newDefaultMutableTreeNode("A");
2_2=newDefaultMutableTreeNode("B");
treeNode.add(treeNode1);
treeNode.add(treeNode2);
treeNode1.add(treeNode1_1);
treeNode1.add(treeNode1_2);
treeNode2.add(treeNode2_1);
treeNode2.add(treeNode2_2);
JTreetree=newJTree(treeNode);
contentPane=getContentPane();
JPaneljp=newJPanel();
jp.add(tree);
contentPane.add(jp);
this.setSize(300,250);
this.setLocation(400,300);
this.setVisible(true);
}
⑷ java源代碼如何用
java源代碼是用來關聯jar中的編譯代碼的。
應用場景:通常在打開eclipse中的jar的時候,發現class文件不能被打開,此時出現下面的界面,此時就需要通過「Attach Source」,之後找到對應的java源代碼來實現代碼關聯,即可正常的顯示class類中的內容。
備註:如果此處ava源代碼指的是源代碼文件(「.java」),是用來進行代碼維護和二次開發的必備東西。