導航:首頁 > 源碼編譯 > javag1源碼分析

javag1源碼分析

發布時間:2022-09-27 08:24:18

『壹』 求java小游戲源代碼

[最佳答案] 連連看java源代碼 import javax.swing.*; import java.awt.*; import java.awt.event.*; pu... int x0=0,y0=0,x=0,y=0,fristMsg=0,secondMsg=0,validateLV; //游戲按鈕的位...

『貳』 急求java代碼的詳解析 bt_9.setOnClickListener(new OnClickListener(){ public void onClick(View v){ str

Button19.setOnClickListener(new View.OnClickListener() {//添加一個OnClickListener介面的匿名實例/對象
public void onClick(View v) {//當click事件發生時會調用這個onclick方法
// TODO Auto-generated method stub
if (str_result!=""){//1:判斷字元串是否與空串常量的內存地址相同,凡是在源代碼中出現的"xxxxx",統統屬於全局靜態常量。字元串比較千萬別用「==」「!=」。
double b = Double.parseDouble(str_result);
//2:把str_result的字元串轉為double類型的數據
str_result = ""+b*b;
//3:把str_result設為b的平方。""+<數值型> ——〉轉為字元串類型
entry.setText(String.valueOf(str_result));
//4:把entry的顯示文字設為str_result,也即原來的輸入的數字的平方。String.valueOf用得有點多餘。
}
}
}

//以下的看來是對上面那段毛病代碼的修正。
if(str_oper.equals("*")){//對代碼1的修正,這才是判斷字元串內容是否相同。
g=Double.parseDouble(str_display.toString());//跟代碼2一個意思,只是轉換的對象是一個字元串緩沖區里的字元串。這里不明白為什麼要使用字元串緩沖區。
str_result=String.valueOf((b*g));
//等價於代碼3。兩者都對。
entry.setText(str_result);
//等價於代碼4。
str_display=new StringBuffer("");
//為str_display開辟一個新的字元串緩沖區。字元串緩沖區的作用是避免每一次字元串拼接修改都得new一個字元串對象。這里是干嗎用的,由於沒看到完整程序,不清楚。

『叄』 生產中 java 垃圾回收為什麼不用g1

垃圾回收是Java語言的一大特性,方便了編程,是以消耗性能為代價的,Java語言對內存的分配管理是通過JVM內部機制決定的。
Java虛擬機中有個稱之為垃圾回收器的東西,實際上這個東西也許真正不存在,或者是已經集成到JVM中了,但這無關緊要,仍然可以稱為為垃圾回收器。
垃圾回收器的作用是查找和回收(清理)無用的對象。以便讓JVM更有效的使用內存。
垃圾回收器的運行時間是不確定的,由JVM決定,在運行時是間歇執行的。雖然可以通過System.gc()來強制回收垃圾,但是這個命令下達後無法保證JVM會立即響應執行,但經驗表明,下達命令後,會在短期內執行你的請求。JVM通常會感到內存緊缺時候去執行垃圾回收操作。
垃圾回收過於頻繁會導致性能下降,過於稀疏會導致內存緊缺。這個JVM會將其控制到最好,不用程序員擔心。但有些程序在短期會吃掉大量內存,而這些恐怖的對象很快使用結束了,這時候也許有必要強制下達一條垃圾回命令,這是很有必要的,以便有更多可用的物理內存。
垃圾回收器僅僅能做的是盡可能保證可用內存的使用效率,讓可用內存得到高效的管理。程序員可以影響垃圾回收的執行,但不能控制。
總之,在Java語言中,判斷一塊內存空間是否符合垃圾收集器收集標準的標准只有兩個:
1.給對象賦予了空值null,以下再沒有調用過。
2.給對象賦予了新值,既重新分配了內存空間。

『肆』 跪求一個200行左右的JAVA源碼,最好是關於圖形用戶界面的,謝謝啦~

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
//=============================================
//Main Class
//=============================================
public class GreedSnake implements KeyListener
{
JFrame mainFrame;
Canvas paintCanvas;
JLabel labelScore;//計分牌
SnakeModel snakeModel=null;// 蛇
public static final int canvasWidth=200;
public static final int canvasHeight=300;
public static final int nodeWidth=10;
public static final int nodeHeight=10;
//----------------------------------------------------------------------
//GreedSnake():初始化游戲界面
//----------------------------------------------------------------------
public GreedSnake()
{
//設置界面元素
mainFrame=new JFrame("GreedSnake");
Container cp=mainFrame.getContentPane();
labelScore=new JLabel("Score:");
cp.add(labelScore,BorderLayout.NORTH);
paintCanvas=new Canvas();
paintCanvas.setSize(canvasWidth+1,canvasHeight+1);
paintCanvas.addKeyListener(this);
cp.add(paintCanvas,BorderLayout.CENTER);
JPanel panelButtom=new JPanel();
panelButtom.setLayout(new BorderLayout());
JLabel labelHelp;// 幫助信息
labelHelp=new JLabel("PageUp, PageDown for speed;",JLabel.CENTER);
panelButtom.add(labelHelp,BorderLayout.NORTH);
labelHelp=new JLabel("ENTER or R or S for start;",JLabel.CENTER);
panelButtom.add(labelHelp,BorderLayout.CENTER);
labelHelp=new JLabel("SPACE or P for pause",JLabel.CENTER);
panelButtom.add(labelHelp,BorderLayout.SOUTH);
cp.add(panelButtom,BorderLayout.SOUTH);
mainFrame.addKeyListener(this);
mainFrame.pack();
mainFrame.setResizable(false);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.setVisible(true);
begin();
}
//----------------------------------------------------------------------
//keyPressed():按鍵檢測
//----------------------------------------------------------------------
public void keyPressed(KeyEvent e)
{
int keyCode=e.getKeyCode();
if(snakeModel.running) switch(keyCode)
{
case KeyEvent.VK_UP:
snakeModel.changeDirection(SnakeModel.UP);
break;
case KeyEvent.VK_DOWN:
snakeModel.changeDirection(SnakeModel.DOWN);
break;
case KeyEvent.VK_LEFT:
snakeModel.changeDirection(SnakeModel.LEFT);
break;
case KeyEvent.VK_RIGHT:
snakeModel.changeDirection(SnakeModel.RIGHT);
break;
case KeyEvent.VK_ADD:
case KeyEvent.VK_PAGE_UP:
snakeModel.speedUp();// 加速
break;
case KeyEvent.VK_SUBTRACT:
case KeyEvent.VK_PAGE_DOWN:
snakeModel.speedDown();// 減速
break;
case KeyEvent.VK_SPACE:
case KeyEvent.VK_P:
snakeModel.changePauseState();// 暫停或繼續
break;
default:
}
//重新開始
if(keyCode==KeyEvent.VK_R || keyCode==KeyEvent.VK_S
|| keyCode==KeyEvent.VK_ENTER)
{
snakeModel.running=false;
begin();
}
}
//----------------------------------------------------------------------
//keyReleased():空函數
//----------------------------------------------------------------------
public void keyReleased(KeyEvent e)
{
}
//----------------------------------------------------------------------
//keyTyped():空函數
//----------------------------------------------------------------------
public void keyTyped(KeyEvent e)
{
}
//----------------------------------------------------------------------
//repaint():繪制游戲界面(包括蛇和食物)
//----------------------------------------------------------------------
void repaint()
{
Graphics g=paintCanvas.getGraphics();
//draw background
g.setColor(Color.WHITE);
g.fillRect(0,0,canvasWidth,canvasHeight);
//draw the snake
g.setColor(Color.BLACK);
LinkedList na=snakeModel.nodeArray;
Iterator it=na.iterator();
while(it.hasNext())
{
Node n=(Node)it.next();
drawNode(g,n);
}
// draw the food
g.setColor(Color.RED);
Node n=snakeModel.food;
drawNode(g,n);
updateScore();
}
//----------------------------------------------------------------------
//drawNode():繪畫某一結點(蛇身或食物)
//----------------------------------------------------------------------
private void drawNode(Graphics g,Node n)
{
g.fillRect(n.x*nodeWidth,n.y*nodeHeight,nodeWidth-1,nodeHeight-1);
}
//----------------------------------------------------------------------
//updateScore():改變計分牌
//----------------------------------------------------------------------
public void updateScore()
{
String s="Score: "+snakeModel.score;
labelScore.setText(s);
}
//----------------------------------------------------------------------
//begin():游戲開始,放置貪吃蛇
//----------------------------------------------------------------------
void begin()
{
if(snakeModel==null||!snakeModel.running)
{
snakeModel=new SnakeModel(this,canvasWidth/nodeWidth,
this.canvasHeight/nodeHeight);
(new Thread(snakeModel)).start();
}
}
//----------------------------------------------------------------------
//main():主函數
//----------------------------------------------------------------------
public static void main(String[] args)
{
GreedSnake gs=new GreedSnake();
}
}
/**************************************************************************
*文件名:SnakeModel.java
*作者:C.Jason
*要點分析:
*1)數據結構:matrix[][]用來存儲地圖上面的信息,如果什麼也沒有設置為false,
* 如果有食物或蛇,設置為true;nodeArray,一個LinkedList,用來保存蛇的每
* 一節;food用來保存食物的位置;而Node類是保存每個位置的信息。
*2)重要函數:
* changeDirection(int newDirection) ,用來改變蛇前進的方向,而且只是
* 保存頭部的前進方向,因為其他的前進方向已經用位置來指明了。 其中newDirection
* 必須和原來的direction不是相反方向,所以相反方向的值用了同樣的奇偶性。在測試
* 的時候使用了direction%2!=newDirection%2 進行判斷。
* moveOn(),用來更新蛇的位置,對於當前方向,把頭部位置進行相應改變。如果越界,
* 結束;否則,檢測是否遇到食物(加頭部)或身體(結束);如果什麼都沒有,加上頭部,
* 去掉尾部。由於用了LinkedList數據結構,省去了相當多的麻煩。
*************************************************************************/
import java.util.*;
import javax.swing.*;
//----------------------------------------------------------------------
//Node:結點類
//----------------------------------------------------------------------
class Node
{
int x;
int y;
Node(int x,int y)
{
this.x=x;
this.y=y;
}
}
//----------------------------------------------------------------------
//SnakeModel:貪吃蛇模型
//----------------------------------------------------------------------
class SnakeModel implements Runnable
{
GreedSnake gs;
boolean[][] matrix;// 界面數據保存在數組里
LinkedList nodeArray=new LinkedList();
Node food;
int maxX;//最大寬度
int maxY;//最大長度
int direction=2;//方向
boolean running=false;
int timeInterval=200;// 間隔時間(速度)
double speedChangeRate=0.75;// 速度改變程度
boolean paused=false;// 游戲狀態
int score=0;
int countMove=0;
// UP和DOWN是偶數,RIGHT和LEFT是奇數
public static final int UP=2;
public static final int DOWN=4;
public static final int LEFT=1;
public static final int RIGHT=3;
//----------------------------------------------------------------------
//GreedModel():初始化界面
//----------------------------------------------------------------------
public SnakeModel(GreedSnake gs,int maxX,int maxY)
{
this.gs=gs;
this.maxX=maxX;
this.maxY=maxY;
matrix=new boolean[maxX][];
for(int i=0;i<maxX;++i)
{
matrix[i]=new boolean[maxY];
Arrays.fill(matrix[i],false);// 沒有蛇和食物的地區置false
}
//初始化貪吃蛇
int initArrayLength=maxX>20 ? 10 : maxX/2;
for(int i=0;i<initArrayLength;++i)
{
int x=maxX/2+i;
int y=maxY/2;
nodeArray.addLast(new Node(x,y));
matrix[x][y]=true;// 蛇身處置true
}
food=createFood();
matrix[food.x][food.y]=true;// 食物處置true
}
//----------------------------------------------------------------------
//changeDirection():改變運動方向
//----------------------------------------------------------------------
public void changeDirection(int newDirection)
{
if(direction%2!=newDirection%2)// 避免沖突
{
direction=newDirection;
}
}
//----------------------------------------------------------------------
//moveOn():貪吃蛇運動函數
//----------------------------------------------------------------------
public boolean moveOn()
{
Node n=(Node)nodeArray.getFirst();
int x=n.x;
int y=n.y;
switch(direction)
{
case UP:
y--;
break;
case DOWN:
y++;
break;
case LEFT:
x--;
break;
case RIGHT:
x++;
break;
}
if((0<=x&&x<maxX)&&(0<=y&&y<maxY))
{
if(matrix[x][y])// 吃到食物或者撞到身體
{
if(x==food.x&&y==food.y)// 吃到食物
{
nodeArray.addFirst(food);// 在頭部加上一結點
//計分規則與移動長度和速度有關
int scoreGet=(10000-200*countMove)/timeInterval;
score+=scoreGet>0 ? scoreGet : 10;
countMove=0;
food=createFood();
matrix[food.x][food.y]=true;
return true;
}
else return false;// 撞到身體
}
else//什麼都沒有碰到
{
nodeArray.addFirst(new Node(x,y));// 加上頭部
matrix[x][y]=true;
n=(Node)nodeArray.removeLast();// 去掉尾部
matrix[n.x][n.y]=false;
countMove++;
return true;
}
}
return false;//越界(撞到牆壁)
}
//----------------------------------------------------------------------
//run():貪吃蛇運動線程
//----------------------------------------------------------------------
public void run()
{
running=true;
while(running)
{
try
{
Thread.sleep(timeInterval);
}catch(Exception e)
{
break;
}
if(!paused)
{
if(moveOn())// 未結束
{
gs.repaint();
}
else//游戲結束
{
JOptionPane.showMessageDialog(null,"GAME OVER",
"Game Over",JOptionPane.INFORMATION_MESSAGE);
break;
}
}
}
running=false;
}
//----------------------------------------------------------------------
//createFood():生成食物及放置地點
//----------------------------------------------------------------------
private Node createFood()
{
int x=0;
int y=0;
do
{
Random r=new Random();
x=r.nextInt(maxX);
y=r.nextInt(maxY);
}while(matrix[x][y]);
return new Node(x,y);
}
//----------------------------------------------------------------------
//speedUp():加快蛇運動速度
//----------------------------------------------------------------------
public void speedUp()
{
timeInterval*=speedChangeRate;
}
//----------------------------------------------------------------------
//speedDown():放慢蛇運動速度
//----------------------------------------------------------------------
public void speedDown()
{
timeInterval/=speedChangeRate;
}
//----------------------------------------------------------------------
//changePauseState(): 改變游戲狀態(暫停或繼續)
//----------------------------------------------------------------------
public void changePauseState()
{
paused=!paused;
}
}

『伍』 java中如何解析文件目錄結構類似的數據

20世紀90年代,硬體領域出現了單片式計算機系統,這種價格低廉的系統一出現就立即引起了自
由於C++所具有的優勢,該項目組的研究人員首先考慮採用C++來編寫程序。但對於硬體資源極其匱乏的單片式系統來說,C++程序過於復雜和龐大。另外由於消費電子產品所採用的嵌入式處理器晶元的種類繁雜,如何讓編寫的程序跨平台運行也是個難題。為了解決困難,他們首先著眼於語言的開發,假設了一種結構簡單、符合嵌入式應用需要的硬體平台體系結構並為其制定了相應的規范,其中就定義了這種硬體平台的二進制機器碼指令系統(即後來成為"位元組碼"的指令系統),以待語言開發成功後,能有半導體晶元生產商開發和生產這種硬體平台。對於新語言的設計,Sun公司研發人員並沒有開發一種全新的語言,而是根據嵌入式軟體的要求,對C++進行了改造,去除了留在C++的一些不太實用及影響安全的成分,並結合嵌入式系統的實時性要求,開發了一種稱為Oak的面向對象語言。

1994年6、7月間,在經歷了一場歷時三天的討論之後,團隊決定再一次改變了努力的目標,這次他們決定將該技術應用於萬維網。他們認為隨著Mosaic瀏覽器的到來,網際網路正在向同樣的高度互動的遠景演變,而這一遠景正是他們在有線電視網中看到的。作為原型,帕特里克·諾頓寫了一個小型萬維網瀏覽器WebRunner。

1995年,互聯網的蓬勃發展給了Oak機會。業界為了使死板、單調的靜態網頁能夠"靈活"起來,急需一種軟體技術來開發一種程序,這種程序可以通過網路傳播並且能夠跨平台運行。於是,世界各大IT企業為此紛紛投入了大量的人力、物力和財力。這個時候,Sun公司想起了那個被擱置起來很久的Oak,並且重新審視了那個用軟體編寫的試驗平台,由於它是按照嵌入式系統硬體平台體系結構進行編寫的,所以非常小,特別適用於網路上的傳輸系統,而Oak也是一種精簡的語言,程序非常小,適合在網路上傳輸。Sun公司首先推出了可以嵌入網頁並且可以隨同網頁在網路上傳輸的Applet(Applet是一種將小程序嵌入到網頁中進行執行的技術),並將Oak更名為Java(在申請注冊商標時,發現Oak已經被人使用了,再想了一系列名字之後,最終,使用了提議者在喝一杯Java咖啡時無意提到的Java詞語)。5月23日,Sun公司在Sun world會議上正式發布Java和HotJava瀏覽器。IBM、Apple、DEC、Adobe、HP、Oracle、Netscape和微軟等各大公司都紛紛停止了自己的相關開發項目,競相購買了Java使用許可證,並為自己的產品開發了相應的Java平台。

1996年1月,Sun公司發布了Java的第一個開發工具包(JDK 1.0),這是Java發展歷程中的重要里程碑,標志著Java成為一種獨立的開發工具。9月,約8.3萬個網頁應用了Java技術來製作。10月,Sun公司發布了Java平台的第一個即時(JIT)編譯器。

1997年2月,JDK 1.1面世,在隨後的3周時間里,達到了22萬次的下載量。4月2日,Java One會議召開,參會者逾一萬人,創當時全球同類會議規模之紀錄。9月,Java Developer Connection社區成員超過10萬。

1998年12月8日,第二代Java平台的企業版J2EE發布。1999年6月,Sun公司發布了第二代Java平台(簡稱為Java2)的3個版本:J2ME(Java2 Micro Edition,Java2平台的微型版),應用於移動、無線及有限資源的環境;J2SE(Java 2 Standard Edition,Java 2平台的標准版),應用於桌面環境;J2EE(Java 2Enterprise Edition,Java 2平台的企業版),應用於基於Java的應用伺服器。Java 2平台的發布,是Java發展過程中最重要的一個里程碑,標志著Java的應用開始普及。

1999年4月27日,HotSpot虛擬機發布。HotSpot虛擬機發布時是作為JDK 1.2的附加程序提供的,後來它成為了JDK 1.3及之後所有版本的Sun JDK的默認虛擬機 。

2000年5月,JDK1.3、JDK1.4和J2SE1.3相繼發布,幾周後其獲得了Apple公司Mac OS X的工業標準的支持。2001年9月24日,J2EE1.3發布。2002年2月26日,J2SE1.4發布。自此Java的計算能力有了大幅提升,與J2SE1.3相比,其多了近62%的類和介面。在這些新特性當中,還提供了廣泛的XML支持、安全套接字(Socket)支持(通過SSL與TLS協議)、全新的I/OAPI、正則表達式、日誌與斷言。2004年9月30日,J2SE1.5發布,成為Java語言發展史上的又一里程碑。為了表示該版本的重要性,J2SE 1.5更名為Java SE 5.0(內部版本號1.5.0),代號為"Tiger",Tiger包含了從1996年發布1.0版本以來的最重大的更新,其中包括泛型支持、基本類型的自動裝箱、改進的循環、枚舉類型、格式化I/O及可變參數。

2005年6月,在Java One大會上,Sun公司發布了Java SE 6。此時,Java的各種版本已經更名,已取消其中的數字2,如J2EE更名為JavaEE,J2SE更名為JavaSE,J2ME更名為JavaME。

2006年11月13日,Java技術的發明者Sun公司宣布,將Java技術作為免費軟體對外發布。Sun公司正式發布的有關Java平台標准版的第一批源代碼,以及Java迷你版的可執行源代碼。從2007年3月起,全世界所有的開發人員均可對Java源代碼進行修改 。

2009年,甲骨文公司宣布收購Sun 。2010年,Java編程語言的共同創始人之一詹姆斯·高斯林從Oracle公司辭職。2011年,甲骨文公司舉行了全球性的活動,以慶祝Java7的推出,隨後Java7正式發布。2014年,甲骨文公司發布了Java8正式版 。

『陸』 java反編譯

如今JAVA語言在全世界范圍正如火如荼般的流行,它廣范地應用在INTERNET的資料庫、多媒體、CGI、及動態網頁的製作方面。1999年在美國對JAVA程序員的需求量首次超過C++!

作者因最近分析一些JAVA程序,對JAVA的反編譯進行了一番了解,下面將我所了解的情況作以下介紹,希望對JAVA愛好者有所幫助。

JAVA是採用一種稱做「位元組編碼」的程序結構,分為小程序(嵌入到HTML文件中)和應用程序(直接在命令狀態下執行)兩種類型。無論哪種結構,一旦用JAVAC 命令編譯後,均變成後綴為CLASS的同名可執行文件。這種文件是不可閱讀的代碼。

經查閱了SUN公司的JDK(JDK1.1.3)文檔資料後,我找到了一個據稱是可反編譯JAVA的JAVAP文件(EXE),這個文件位於\JDK\BIN\ 下面,經按說明使用後,感到失望,原來這個「反編譯」僅可反編譯出JAVA程序的數據區(定義)、若干方法和類的引用等。

這里我用了一個簡單例子來說明問題。

JAVA的源程序hello_java.java如下:

import java.applet.*;
import java.awt.*;
public class hello_java extends Applet
{
public void paint(Graphics g)
{
g.drawString("Hello Java!\n",20,20);
}
}

經用反編譯命令:javap -c -package -public -private hello_java hello.java

得到的反編譯結果(hello.java)如下:(有關javap命令的選擇參數請見其使用說明,這里-c表示選擇了反編譯)

Compiled from hello_java.java
public synchronized class hello_java extends java.applet.Applet
/* ACC_SUPER bit set */
{
public void paint(java.awt.Graphics);
public hello_java();
Method void paint(java.awt.Graphics)
0 aload_1
1 ldc #1
3 bipush 20
5 bipush 20
7 invokevirtual #6
10 return
Method hello_java()
0 aload_0
1 invokespecial #5 ()V>
4 return
}

『柒』 如何正確掌握Java的學習方法

作為掌握了JAVA技術,將來准備成為Java軟體工程師的人來說,要想成為JAVA工程師肯定要學習JAVA。一般的程序員或許只需知道一些JAVA的語法結構就可以應付了。但要成為高級JAVA工程師,我們需要對JAVA做比較深入的研究。為大家總結了以下三個方面的學習方法:
一、軟體開發學習路線。兩千多年的儒家思想孔孟之道,中庸的思想透入骨髓,既不冒進也不保守並非中庸之道,而是找尋學習軟體開發的正確路線與規律。從軟體開發人員的生涯規劃來講,我們可以大致分為三個階段,軟體工程師→軟體設計師→架構設計師或項目管理師。不想當元帥的士兵不是好士兵,不想當架構設計師或項目管理師的程序員也不是好的程序員。我們應該努力往上走。讓我們先整理一下開發應用軟體需要學習的主要技術。
A.基礎理論知識,如操作系統、編譯原理、數據結構與演算法、計算機原理等,它們並非不重要。如不想成為計算機科學家的話,可以採取「用到的時候再來學」的原則。
B.一門編程語言,現在基本上都是面向對象的語言,JAVA/C++/C#等等。如果做WEB開發的話還要學習HTML/Jav**ript等等。
C.一種方法學或者說思想,現在基本都是面向對象思想(OOA/OOD/設計模式)。由此而衍生的基於組件開發CBD/面向方面編程AOP等等。
D.一種關系型資料庫,ORACLE/SqlServer/DB2/MySQL等等。
E.一種提高生產率的IDE集成開發環境JBuilder/Eclipse/VS.NET等。
F.一種UML建模工具,用ROSE/VISIO/鋼筆進行建模。
G.一種軟體過程,RUP/XP/CMM等等,通過軟體過程來組織軟體開發的眾多活動,使開發流程專業化規范化。當然還有其他的一些軟體工程知識。
H.項目管理、體系結構、框架知識。
正確的路線應該是:B→C→E→F→G→H。
還需要補充幾點:
1、對於A與C要補充的是,我們應該在實踐中逐步領悟編程理論與編程思想。新技術雖然不斷涌現,更新速度令人眼花燎亂霧里看花;但萬變不離其宗,編程理論與編程思想的變化卻很慢。掌握了編程理論與編程思想你就會有撥雲見日之感。面向對象的思想在目前來講是相當關鍵的,是強勢技術之一,在上面需要多投入時間,給你的回報也會讓你驚喜。
2、對於資料庫來說是獨立學習的,這個時機就由你來決定吧。
3、編程語言作為學習軟體開發的主線,而其餘的作為輔線。
4、軟體工程師著重於B、C、E、D;軟體設計師著重於B、C、E、D、F;架構設計師著重於C、F、H。
二、JAVA學習路線。
1、基礎語法及JAVA原理。基礎語法和JAVA原理是地基,地基不牢靠,猶如沙地上建摩天大廈,是相當危險的。學習JAVA也是如此,必須要有扎實的基礎,你才能在J2EE、J2ME領域游刃有餘。參加SCJP(SUN公司認證的JAVA程序員)考試不失為一個好方法,原因之一是為了對得起你交的1200大洋考試費,你會更努力學習,原因之二是SCJP考試能夠讓你把基礎打得很牢靠,它要求你跟JDK一樣熟悉JAVA基礎知識;但是你千萬不要認為考過了SCJP就有多了不起,就能夠獲得軟體公司的青睞,就能夠獲取高薪,這樣的想法也是很危險的。獲得「真正」的SCJP只能證明你的基礎還過得去,但離實際開發還有很長的一段路要走。
2、特定API的學習。JAVA介入的領域很廣泛,不同的領域有不同的API,沒有人熟悉所有的API,對一般人而言只是熟悉工作中要用到的API。如果你做界面開發,那麼你需要學習Swing/AWT/SWT等API;如果你進行網路游戲開發,你需要深入了解網路API/多媒體API/2D3D等;如果你做WEB開發,就需要熟悉Servlet等API啦。總之,需要根據工作的需要或你的興趣發展方向去選擇學習特定的API。
3、開發工具的用法。在學習基礎語法與基本的面向對象概念時,從鍛煉語言熟練程度的角度考慮,我們推薦使用的工具是Editplus/JCreator+JDK,這時候不要急於上手JBuilder/Eclipse等集成開發環境,以免過於關注IDE的強大功能而分散對JAVA技術本身的注意力。過了這一階段你就可以開始熟悉IDE了。
4、OO思想的領悟。掌握了基礎語法和JAVA程序運行原理後,我們就可以用JAVA語言實現面向對象的思想了。面向對象,是一種方法學;是獨立於語言之外的編程思想;是CBD基於組件開發的基礎;屬於強勢技術之一。當以後因工作需要轉到別的面向對象語言的時候,你會感到特別的熟悉親切,學起來像喝涼水這么簡單。
使用面向對象的思想進行開發的基本過程是:
(1)調查收集需求。
(2)建立用例模型。
(3)從用例模型中識別分析類及類與類之間的靜態動態關系,從而建立分析模型。
(4)細化分析模型到設計模型。
(5)用具體的技術去實現。
(6)測試、部署、總結。

5、學習軟體工程。對小型項目而言,你可能認為軟體工程沒太大的必要。隨著項目的復雜性越來越高,軟體工程的必要性才會體現出來。
6、基本API的學習。進行軟體開發的時候,並不是什麼功能都需要我們去實現,也就是經典名言所說的「不需要重新發明輪子」。我們可以利用現成的類、組件、框架來搭建我們的應用,如SUN公司編寫好了眾多類實現一些底層功能,以及我們下載過來的JAR文件中包含的類,我們可以調用類中的方法來完成某些功能或繼承它。那麼這些類中究竟提供了哪些方法給我們使用?方法的參數個數及類型是?類的構造器需不需要參數?總不可能SUN公司的工程師打國際長途甚至飄洋過海來告訴你他編寫的類該如何使用吧。他們只能提供文檔給我們查看,JAVADOC文檔(參考文獻4.4)就是這樣的文檔,它可以說是程序員與程序員交流的文檔。
基本API指的是實現了一些底層功能的類,通用性較強的API,如字元串處理/輸入輸出等等。我們又把它成為類庫。熟悉API的方法一是多查JAVADOC文檔,二是使用JBuilder/Eclipse等IDE的代碼提示功能。
程序員日常工作包括很多活動,編輯、編譯及構建、調試、單元測試、版本控制、維持模型與代碼同步、文檔的更新等等,幾乎每一項活動都有專門的工具,如果獨立使用這些工具的話,你將會很痛苦,你需要在堆滿工具的任務欄上不斷的切換,效率很低下,也很容易出錯。在JBuilder、Eclipse等IDE中已經自動集成編輯器、編譯器、調試器、單元測試工具JUnit、自動構建工具ANT、版本控制工具CVS、DOC文檔生成與更新等等,甚至可以把UML建模工具也集成進去,又提供了豐富的向導幫助生成框架代碼,讓我們的開發變得更輕松。應該說IDE發展的趨勢就是集成軟體開發中要用到的幾乎所有工具。從開發效率的角度考慮,使用IDE是必經之路,也是從一個學生到一個職業程序員轉變的里程碑。

JAVA開發使用的IDE主要有Eclipse、JBuilder、JDeveloper、NetBeans等幾種;而Eclipse、JBuilder佔有的市場份額是最大的。JBuilder在近幾年來一直是JAVA集成開發環境中的霸主,它是由備受程序員尊敬的Borland公司開發,在硝煙彌漫的JAVAIDE大戰中,以其快速的版本更新擊敗IBM的VisualAgeforJAVA等而成就一番偉業。IBM在VisualAgeforJAVA上已經無利可圖之下,乾脆將之貢獻給開源社區,成為Eclipse的前身,真所謂「柳暗花明又一村」。浴火重生的Eclipse以其開放式的插件擴展機制、免費開源獲得廣大程序員(包括幾乎所有的骨灰級程序員)的青睞,極具發展潛力。
最後一點,成為一名優秀的JAVA工程師,我們需要掌握的專業知識和技能包括:熟悉java語言,理解面向對象的思想與設計模式,至少熟悉j2ee、j2me、j2se等開發體系中的一種;熟練使用Eclipse或Jbuilder等開發工具,理解MVC模式及實際應用;至少熟悉一種資料庫的開發和設計;具有一定的程序測試和設計分析能力。除此之外,良好的學習能力、團隊合作精神、強烈的責任心以及溝通能力也是必不可少的。

如果以上幾點你都能很好的做到了,那麼你就是一位優秀的JAVA工程師了

『捌』 深入理解Java虛擬機的目錄

前言
致謝
第一部分 走近Java
第1章 走近Java / 2
1.1 概述 / 2
1.2 Java技術體系 / 3
1.3 Java發展史 / 5
1.4 展望Java技術的未來 / 9
1.4.1 模塊化 / 9
1.4.2 混合語言 / 9
1.4.3 多核並行 / 11
1.4.4 進一步豐富語法 / 12
1.4.5 64位虛擬機 / 13
1.5 實戰:自己編譯JDK / 13
1.5.1 獲取JDK源碼 / 13
1.5.2 系統需求 / 14
1.5.3 構建編譯環境 / 15
1.5.4 准備依賴項 / 17
1.5.5 進行編譯 / 18
1.6 本章小結 / 21
第二部分 自動內存管理機制
第2章 Java內存區域與內存溢出異常 / 24
2.1 概述 / 24
2.2 運行時數據區域 / 25
2.2.1 程序計數器 / 25
2.2.2 Java虛擬機棧 / 26
2.2.3 本地方法棧 / 27
2.2.4 Java堆 / 27
2.2.5 方法區 / 28
2.2.6 運行時常量池 / 29
2.2.7 直接內存 / 29
2.3 對象訪問 / 30
2.4 實戰:OutOfMemoryError異常 / 32
2.4.1 Java堆溢出 / 32
2.4.2 虛擬機棧和本地方法棧溢出 / 35
2.4.3 運行時常量池溢出 / 38
2.4.4 方法區溢出 / 39
2.4.5 本機直接內存溢出 / 41
2.5 本章小結 / 42
第3章 垃圾收集器與內存分配策略 / 43
3.1 概述 / 43
3.2 對象已死? / 44
3.2.1 引用計數演算法 / 44
3.2.2 根搜索演算法 / 46
3.2.3 再談引用 / 47
3.2.4 生存還是死亡? / 48
3.2.5 回收方法區 / 50
3.3 垃圾收集演算法 / 51
3.3.1 標記 -清除演算法 / 51
3.3.2 復制演算法 / 52
3.3.3 標記-整理演算法 / 54
3.3.4 分代收集演算法 / 54
3.4 垃圾收集器 / 55
3.4.1 Serial收集器 / 56
3.4.2 ParNew收集器 / 57
3.4.3 Parallel Scavenge收集器 / 59
3.4.4 Serial Old收集器 / 60
3.4.5 Parallel Old收集器 / 61
3.4.6 CMS收集器 / 61
3.4.7 G1收集器 / 64
3.4.8 垃圾收集器參數總結 / 64
3.5 內存分配與回收策略 / 65
3.5.1 對象優先在Eden分配 / 66
3.5.2 大對象直接進入老年代 / 68
3.5.3 長期存活的對象將進入老年代 / 69
3.5.4 動態對象年齡判定 / 71
3.5.5 空間分配擔保 / 73
3.6 本章小結 / 75
第4章 虛擬機性能監控與故障處理工具 / 76
4.1 概述 / 76
4.2 JDK的命令行工具 / 76
4.2.1 jps:虛擬機進程狀況工具 / 79
4.2.2 jstat:虛擬機統計信息監視工具 / 80
4.2.3 jinfo:Java配置信息工具 / 82
4.2.4 jmap:Java內存映像工具 / 82
4.2.5 jhat:虛擬機堆轉儲快照分析工具 / 84
4.2.6 jstack:Java堆棧跟蹤工具 / 85
4.3 JDK的可視化工具 / 87
4.3.1 JConsole:Java監視與管理控制台 / 88
4.3.2 VisualVM:多合一故障處理工具 / 96
4.4 本章小結 / 105
第5章 調優案例分析與實戰 / 106
5.1 概述 / 106
5.2 案例分析 / 106
5.2.1 高性能硬體上的程序部署策略 / 106
5.2.2 集群間同步導致的內存溢出 / 109
5.2.3 堆外內存導致的溢出錯誤 / 110
5.2.4 外部命令導致系統緩慢 / 112
5.2.5 伺服器JVM進程崩潰 / 113
5.3 實戰:Eclipse運行速度調優 / 114
5.3.1 調優前的程序運行狀態 / 114
5.3.2 升級JDK 1.6的性能變化及兼容問題 / 117
5.3.3 編譯時間和類載入時間的優化 / 122
5.3.4 調整內存設置控制垃圾收集頻率 / 126
5.3.5 選擇收集器降低延遲 / 130
5.4 本章小結 / 133
第三部分 虛擬機執行子系統
第6章 類文件結構 / 136
6.1 概述 / 136
6.2 無關性的基石 / 136
6.3 Class類文件的結構 / 138
6.3.1 魔數與Class文件的版本 / 139
6.3.2 常量池 / 141
6.3.3 訪問標志 / 147
6.3.4 類索引、父類索引與介面索引集合 / 148
6.3.5 欄位表集合 / 149
6.3.6 方法表集合 / 153
6.3.7 屬性表集合 / 155
6.4 Class文件結構的發展 / 168
6.5 本章小結 / 170
第7章 虛擬機類載入機制 / 171
7.1 概述 / 171
7.2 類載入的時機 / 172
7.3 類載入的過程 / 176
7.3.1 載入 / 176
7.3.2 驗證 / 178
7.3.3 准備 / 181
7.3.4 解析 / 182
7.3.5 初始化 / 186
7.4 類載入器 / 189
7.4.1 類與類載入器 / 189
7.4.2 雙親委派模型 / 191
7.4.3 破壞雙親委派模型 / 194
7.5 本章小結 / 197
第8章 虛擬機位元組碼執行引擎 / 198
8.1 概述 / 198
8.2 運行時棧幀結構 / 199
8.2.1 局部變數表 / 199
8.2.2 操作數棧 / 204
8.2.3 動態連接 / 206
8.2.4 方法返回地址 / 206
8.2.5 附加信息 / 207
8.3 方法調用 / 207
8.3.1 解析 / 207
8.3.2 分派 / 209
8.4 基於棧的位元組碼解釋執行引擎 / 221
8.4.1 解釋執行 / 221
8.4.2 基於棧的指令集與基於寄存器的指令集 / 223
8.4.3 基於棧的解釋器執行過程 / 224
8.5 本章小結 / 230
第9章 類載入及執行子系統的案例與實戰 / 231
9.1 概述 / 231
9.2 案例分析 / 231
9.2.1 Tomcat:正統的類載入器架構 / 232
9.2.2 OSGi:靈活的類載入器架構 / 235
9.2.3 位元組碼生成技術與動態代理的實現 / 238
9.2.4 Retrotranslator:跨越JDK版本 / 242
9.3 實戰:自己動手實現遠程執行功能 / 246
9.3.1 目標 / 246
9.3.2 思路 / 247
9.3.3 實現 / 248
9.3.4 驗證 / 255
9.4 本章小結 / 256
第四部分 程序編譯與代碼優化
第10章 早期(編譯期)優化 / 258
10.1 概述 / 258
10.2 Javac編譯器 / 259
10.2.1 Javac的源碼與調試 / 259
10.2.2 解析與填充符號表 / 262
10.2.3 註解處理器 / 264
10.2.4 語義分析與位元組碼生成 / 264
10.3 Java語法糖的味道 / 268
10.3.1 泛型與類型擦除 / 268
10.3.2 自動裝箱、拆箱與遍歷循環 / 273
10.3.3 條件編譯 / 275
10.4 實戰:插入式註解處理器 / 276
10.4.1 實戰目標 / 276
10.4.2 代碼實現 / 277
10.4.3 運行與測試 / 284
10.4.4 其他應用案例 / 286
10.5 本章小結 / 286
第11章 晚期(運行期)優化 / 287
11.1 概述 / 287
11.2 HotSpot虛擬機內的即時編譯器 / 288
11.2.1 解釋器與編譯器 / 288
11.2.2 編譯對象與觸發條件 / 291
11.2.3 編譯過程 / 294
11.2.4 查看與分析即時編譯結果 / 297
11.3 編譯優化技術 / 301
11.3.1 優化技術概覽 / 301
11.3.2 公共子表達式消除 / 305
11.3.3 數組邊界檢查消除 / 307
11.3.4 方法內聯 / 307
11.3.5 逃逸分析 / 309
11.4 Java與C/C++的編譯器對比 / 311
11.5 本章小結 / 313
第五部分 高效並發
第12章 Java內存模型與線程 / 316
12.1 概述 / 316
12.2 硬體的效率與一致性 / 317
12.3 Java內存模型 / 318
12.3.1 主內存與工作內存 / 319
12.3.2 內存間交互操作 / 320
12.3.3 對於volatile型變數的特殊規則 / 322
12.3.4 對於long和double型變數的特殊規則 / 327
12.3.5 原子性、可見性與有序性 / 328
12.3.6 先行發生原則 / 330
12.4 Java與線程 / 333
12.4.1 線程的實現 / 333
12.4.2 Java線程調度 / 337
12.4.3 狀態轉換 / 339
12.5 本章小結 / 341
第13章 線程安全與鎖優化 / 342
13.1 概述 / 342
13.2 線程安全 / 343
13.2.1 Java語言中的線程安全 / 343
13.2.2 線程安全的實現方法 / 348
13.3 鎖優化 / 356
13.3.1 自旋鎖與自適應自旋 / 356
13.3.2 鎖消除 / 357
13.3.3 鎖粗化 / 358
13.3.4 輕量級鎖 / 358
13.3.5 偏向鎖 / 361
13.4 本章小結 / 362
附錄A Java虛擬機家族 / 363
附錄B 虛擬機位元組碼指令表 / 366
附錄C HotSpot虛擬機主要參數表 / 372
附錄D 對象查詢語言(OQL)簡介 / 376
附錄E JDK歷史版本軌跡 / 383

『玖』 JAVA高手來幫個忙

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Label;
import java.awt.TextField;
import java.awt.event.TextEvent;
import java.awt.event.TextListener;

public class Myjava1 {

class MyFrame extends Frame implements TextListener {
String title = "My JAVA";
TextField t1 = new TextField("0", 3);
TextField t2 = new TextField("0", 3);
TextField t3 = new TextField("0", 3);
Color c = Color.black;
Font f = new Font("宋體", Font.PLAIN, 40);

public void textValueChanged(TextEvent e) {
int r, g, b;
if (t1.getText() != null) {
String r1 = t1.getText();
r = Integer.parseInt(r1);
} else
r = 0;
if (t2.getText() != null) {
String g1 = t2.getText();
g = Integer.parseInt(g1);
} else
g = 0;
if (t3.getText() != null) {
String b1 = t3.getText();
b = Integer.parseInt(b1);
} else
b = 0;
c = new Color(r, g, b);
repaint();
}

public MyFrame() {
this.setTitle(title);
this.setSize(500, 500);
this.setLayout(new FlowLayout());

Label color = new Label("Color(RGB):", Label.RIGHT);

this.add(color);
color.setBounds(10, 175, 65, 15);
add(t1);
t1.setBounds(75, 173, 35, 20);
t1.addTextListener(this);
add(t2);
t2.setBounds(115, 173, 35, 20);
t2.addTextListener(this);
add(t3);
t3.setBounds(155, 173, 35, 20);
t3.addTextListener(this);
}

public void paint(Graphics g) {
g.setColor(c);
g.setFont(f);
g.drawString(title, 100, 100);
System.out.println("paint");
}
}

public static void main(String args[]) {
Myjava1 my = new Myjava1();
MyFrame frame = my.new MyFrame();
frame.setVisible(true);
}
}

『拾』 求《JVMG1源碼分析和調優豆瓣》全文免費下載百度網盤資源,謝謝~

《JVM G1源碼分析和調優豆瓣》網路網盤pdf最新全集下載:
鏈接: https://pan..com/s/1i8sXLpI7Ey-07u7mGCq2WA

?pwd=c29u 提取碼: c29u
簡介:G1作為JVM中成熟的垃圾回收器,已經廣泛應用在眾多公司的生產環境中。本書詳細介紹G1涉及的基本概念和運行原理,以及調優方法。

閱讀全文

與javag1源碼分析相關的資料

熱點內容
收磚機石獅編程培訓廠家 瀏覽:761
吉里吉里2安卓模擬器怎麼用 瀏覽:818
編譯器將匯編代碼 瀏覽:681
電路板加密錯誤 瀏覽:21
java自動機 瀏覽:363
相機連拍解壓 瀏覽:31
linuxssh服務重啟命令 瀏覽:330
茂名氫氣隔膜壓縮機 瀏覽:47
程序員地鐵寫程序 瀏覽:330
java的switchenum 瀏覽:329
pdf瓷器 瀏覽:905
怎樣用adb命令刷機 瀏覽:962
蘋果手機怎麼買app 瀏覽:303
如何找到伺服器連接地址 瀏覽:776
重慶百望伺服器地址 瀏覽:227
python中range後的結果 瀏覽:101
編譯器管理的存儲有哪些 瀏覽:956
顯控觸摸屏與單片機通信 瀏覽:426
宅之便利店app怎麼使用輕應用 瀏覽:320
去外國怎麼下載外國app 瀏覽:269