java軟件源代碼分析 java的源碼要看哪些

Java分析以下源代碼,并在表格中填寫分析過程

1,0,進入循環(huán)初始值為1

成都創(chuàng)新互聯(lián)公司是專業(yè)的涼山州網(wǎng)站建設(shè)公司,涼山州接單;提供網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè),網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進行涼山州網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!

2,1,,進入循環(huán)初始值為2

3,2,進入循環(huán)初始值為3

4,3,進入循環(huán)初始值為4

5,4,跳出循環(huán)X=5

求解答以下的java源代碼,詳細(xì)點,說明這個程序的設(shè)計思路,還有比如運用了多線程的話運用了多線程的什么

import java.awt.*;

import java.awt.event.*;

import java.util.Random;

import javax.swing.Timer;

public class PinBall

{

private final int TABLE_WIDTH = 300;//桌面寬度

private final int TABLE_HEIGHT = 400;//桌面高度

private final int RACKET_Y = 340;//球拍的垂直位置

private final int RACKET_HEIGHT = 20;//球拍高度

private final int RACKET_WIDTH = 60;//球拍寬度

private final int BALL_SIZE = 16;//球的大小

private Frame f = new Frame("彈球游戲");//實例化一個窗口

Random rand = new Random();//實例化一個隨機數(shù)生成器

private int ySpeed = 10;//小球的縱向運動數(shù)度、

private double xyRate = rand.nextDouble() - 0.5;//返回一個-0.5到0.5之間的比率用控制小球運動方向

private int xSpeed = (int)(ySpeed*xyRate*2);//這個橫向速度在-10到10之間,產(chǎn)生左右擺動運動效果

private int ballX = rand.nextInt(200)+20;//小球開始的橫坐標(biāo)位置,200表示產(chǎn)生0到100之間的隨機數(shù)

private int ballY = rand.nextInt(10)+20;//小球開始的縱坐標(biāo)位置

private int racketX = rand.nextInt(200);//球拍開始時的橫坐標(biāo)位置

private MyCanvas tableArea = new MyCanvas();//實力化一個畫布工具,集成Canvas類

private String shape = "";//保存需要繪制圖形的字符串屬性

Timer timer;//聲明一個時間變量

private boolean isLose = false;//表示游戲是否結(jié)束

public void init()

{

tableArea.setPreferredSize(new Dimension(TABLE_WIDTH,TABLE_HEIGHT));//定義畫布大小

f.add(tableArea);//添加畫布到窗口

KeyAdapter keyProcessor = new KeyAdapter()//實例化一個鍵盤監(jiān)聽事件適配器

{

public void keyPressed(KeyEvent ke)//重寫適配器里面的按下某鍵盤方法

{

if(ke.getKeyCode()==KeyEvent.VK_LEFT)//按下鍵盤左鍵時

{

if(racketX 0)//球拍左邊框不能出畫布的左邊框

racketX -=10;//按一左鍵次向左移動10個像素

}

if(ke.getKeyCode()==KeyEvent.VK_RIGHT)//按下鍵盤右鍵時

{

if(racketX TABLE_WIDTH - RACKET_WIDTH)//球拍右邊框不能出畫布的右邊框

racketX +=10;//按一次右鍵移動向右移動10個像素

}

}

};

f.addKeyListener(keyProcessor);//給窗口添加鍵盤監(jiān)聽器

tableArea.addKeyListener(keyProcessor);//給畫布添加鍵盤監(jiān)聽器

ActionListener taskPerformer = new ActionListener()//這里是實例化了一個監(jiān)聽接口,這個接口里面只有一個方法

{

public void actionPerformed(ActionEvent evt)//重寫這個接口里面的方法,判斷小球的位置

{

if(ballX=0 || ballX=TABLE_WIDTH-BALL_SIZE)//保證小球橫向上在畫布之內(nèi)運動

{

xSpeed = -xSpeed;//觸發(fā)反方向運動

}

if(ballY=RACKET_Y-BALL_SIZE(ballXracketX||ballXracketX+RACKET_WIDTH))//出了球拍的可擊打范圍

{

timer.stop();//停止對監(jiān)聽器的觸發(fā)

isLose=true;//將標(biāo)志isLose變量置為true

tableArea.repaint();//調(diào)用畫布的重繪方法

}

else if(ballY=0||(ballY=RACKET_Y-BALL_SIZEballYracketXballX=racketX+RACKET_WIDTH))//小球在球拍之內(nèi),而其到達(dá)球拍的高度

{

ySpeed=-ySpeed;//上下方向改變,小球反彈

}

ballY+=ySpeed;//小球的坐標(biāo)在縱向上增加

ballX+=xSpeed;//小球的坐標(biāo)在橫向上的增加

tableArea.repaint();//調(diào)用畫布的重繪方法3

}

};

timer = new Timer(100,taskPerformer);//每隔0.1秒運行一次監(jiān)聽器

timer.start();//計時器開始運行

f.addWindowListener(new MyListener());//關(guān)閉窗口事件

f.pack();//設(shè)置窗口最佳大小

f.setVisible(true);//顯示窗口

}

class MyListener extends WindowAdapter//關(guān)閉窗口的類

{

public void windowClosing(WindowEvent e)

{

System.exit(0);

}

}

public static void main(String[] args)//程序入口

{

new PinBall().init();//調(diào)用PinBall類里面的init()方法

}

class MyCanvas extends Canvas//建一個集成Canvas類的類

{

public void paint(Graphics g)//重寫父類的繪圖方法

{

if(isLose)//如果isLose為真,則在畫布里打印“游戲已結(jié)束”

{

g.setColor(new Color(255,0,0));//當(dāng)前顏色

g.setFont(new Font("黑體",Font.BOLD,30));//字體名稱,樣式,大小

g.drawString("游戲已結(jié)束!",50,200);//按坐標(biāo)繪制文字圖形

}

else//負(fù)責(zé)

{

g.setColor(new Color(240,240,80));//當(dāng)前顏色

g.fillOval(ballX,ballY,BALL_SIZE,BALL_SIZE);//填充顏色,根據(jù)坐標(biāo)和長寬填充圓形

g.setColor(new Color(80,80,200));//當(dāng)前顏色

g.fillRect(racketX,RACKET_Y,RACKET_WIDTH,RACKET_HEIGHT);//填充顏色,根據(jù)坐標(biāo)和長寬填充矩形

}

}

}

}

什么是Java代碼的編譯與反編譯?

Java代碼的編譯與反編譯

2017-02-21Hollis數(shù)盟

一、什么是編譯

1、利用編譯程序從源語言編寫的源程序產(chǎn)生目標(biāo)程序的過程。

2、用編譯程序產(chǎn)生目標(biāo)程序的動作。編譯就是把高級語言變成計算機可以識別的2進制語言,計算機只認(rèn)識1和0,編譯程序把人們熟悉的語言換成2進制的。編譯程序把一個源程序翻譯成目標(biāo)程序的工作過程分為五個階段:詞法分析;語法分析;語義檢查和中間代碼生成;代碼優(yōu)化;目標(biāo)代碼生成。主要是進行詞法分析和語法分析,又稱為源程序分析,分析過程中發(fā)現(xiàn)有語法錯誤,給出提示信息。

二、什么是反編譯

計算機軟件反向工程(Reverseengineering)也稱為計算機軟件還原工程,是指通過對他人軟件的目標(biāo)程序(可執(zhí)行程序)進行“逆向分析、研究”工作,以推導(dǎo)出他人的軟件產(chǎn)品所使用的思路、原理、結(jié)構(gòu)、算法、處理過程、運行方法等設(shè)計要素,某些特定情況下可能推導(dǎo)出源代碼。反編譯作為自己開發(fā)軟件時的參考,或者直接用于自己的軟件產(chǎn)品中。

三、Java類的編譯與反編譯

我們在最初學(xué)習(xí)Java的時候,會接觸到兩個命令:javac和java,那個時候我們就知道,javac是用來編譯Java類的,就是將我們寫好的helloworld.java文件編譯成helloworld.class文件。

class文件打破了C或者C++等語言所遵循的傳統(tǒng),使用這些傳統(tǒng)語言寫的程序通常首先被編譯,然后被連接成單獨的、專門支持特定硬件平臺和操作系統(tǒng)的二進制文件。通常情況下,一個平臺上的二進制可執(zhí)行文件不能在其他平臺上工作。而Javaclass文件是可以運行在任何支持Java虛擬機的硬件平臺和操作系統(tǒng)上的二進制文件。

那么反編譯呢,就是通過helloworld.class文件得到j(luò)ava文件(或者說是程序員能看懂的Java文件)

四、什么時候會用到反編譯

1、我們只有一個類的class文件,但是我們又看不懂Java的class文件,那么我們可以把它反編譯成我們可以看得懂的文件。

2、學(xué)習(xí)Java過程中,JDK的每個版本都會加入越來越多的語法糖,有些時候我們想知道Java一些實現(xiàn)細(xì)節(jié),我們可以借助反編譯。

五、反編譯工具

1、javap

2、Jad:官網(wǎng)(墻裂推薦)

客戶端:

可以在官網(wǎng)下載可執(zhí)行文件,找到對應(yīng)的操作系統(tǒng)的對應(yīng)版本,然后進行安裝使用。

因為我使用的是linux操作系統(tǒng),所以我下載的是Linux版本的工具,這個工具下載好之后會有一個執(zhí)行文件,只要在執(zhí)行文件所在目錄執(zhí)行./jadhelloworld.class就會在當(dāng)前目錄下生成helloworld.jad文件,該文件里就是我們很熟悉的Java代碼

Eclipse插件:

下載地址在官網(wǎng)下載插件的jar包,然后將jar包放到eclipse的plugins目錄下‘在打開Eclipse,Eclipse-Window-Preferences-Java,此時你會發(fā)現(xiàn)會比原來多了一個JadClipse的選項,單擊,在Pathtodecompiler中輸入你剛才放置jad.exe的位置,也可以制定臨時文件的目錄。當(dāng)然在JadClipse下還有一些子選項,如Debug,Directives等,按照默認(rèn)配置即可?;九渲猛戤吅螅覀兛梢圆榭匆幌耤lass文件的默認(rèn)打開方式,Eclipse-Window-Preferences-General-Editors-FileAssociations我們可以看到class文件的打開方式有兩個,JadClipse和Eclipse自帶的ClassFileViewer,而JadClipse是默認(rèn)的。全部配置完成,下面我們可以查看源碼了,選擇需要查看的類,按F3即可查看源碼

新聞名稱:java軟件源代碼分析 java的源碼要看哪些
文章位置:http://muchs.cn/article38/doescpp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、網(wǎng)站建設(shè)關(guān)鍵詞優(yōu)化、網(wǎng)站收錄做網(wǎng)站、網(wǎng)站營銷

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化