真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

java走代碼的流程 java操作流程

JAVA請求是走完代碼流程才算結(jié)束么

JAVA請求是走完代碼流程才算結(jié)束。

10年積累的成都做網(wǎng)站、成都網(wǎng)站建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站策劃后付款的網(wǎng)站建設(shè)流程,更有沅陵免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

這個問題其實(shí)分兩步:

第一步是用戶點(diǎn)擊頁面,并發(fā)送請求到服務(wù)器的步驟,這個步驟很復(fù)雜,涉及到網(wǎng)絡(luò)協(xié)議很多東西,我們暫且不講。

第二步就是服務(wù)器收到請求,我們代碼執(zhí)行的過程

擴(kuò)展資料:

有兩個請求并發(fā)訪問,也就是說有兩個線程同時準(zhǔn)備進(jìn)入方法printA()。那么問題來了

是線程1先進(jìn)入方法執(zhí)行完畢后再讓線程2進(jìn)入執(zhí)行嗎。

不是的,是兩個線程同時去執(zhí)行這一段代碼

那有同學(xué)可能會問了,如果兩個線程同時進(jìn)入這個方法,

線程1執(zhí)行到a = a + 10;此時a的值為11,

然后線程2進(jìn)入方法執(zhí)行int a = 1; 那線程1打印出來a是不是就變成1了。

不是的,線程1打印a還是為11,為什么呢,因?yàn)閍是定義在方法里面的,是局部變量。

然后每個線程是不是都有一個私有的本地內(nèi)存(Local Memory),這個私有本地內(nèi)存是不是存放這個局部變量的,答案是肯定的,既然賦值操作都是在我自己的地盤弄的,那肯定不會影響到別人。

解釋一下下面Java代碼的運(yùn)行過程?

你好,提問者:

首先此代碼編譯不通過,原因:main方法是靜態(tài)的,不能調(diào)用非靜態(tài)方法,因此

Coun c1=new Coun();//調(diào)Coun方法是報(bào)錯的。如圖1:

若Coun不是普通方法,那就是構(gòu)造方法,需要講類名跟構(gòu)造方法,書寫一致。如圖2:

public class Coun {

int s;

static ?int c;

public static void main(String[] args) {

Coun c1=new Coun();? ?//此處走往c:1,s:1

Coun c2=new Coun();? ?//此處走完c:2,s:2

System.out.println(c1.s);

System.out.println(c1.c);//故有問題的在此處,此處c1.c為2,是因?yàn)閏使用了static修飾

System.out.println(c2.s);

System.out.println(c2.c);

}

public Coun(){

System.out.println("1111111");

c++;

s = c;

}

int getS(){

return ?s;

}

int getC(){

return c;

}

}

結(jié)果:

1111111

1111111

1

2

2

2

若解決了你的問題,請采納,若有疑問,請?zhí)釂枺x謝!

java運(yùn)行的五個步驟?

Java程序從源文件創(chuàng)建到程序運(yùn)行要經(jīng)過兩大步驟:1、源文件由編譯器編譯成字節(jié)碼(ByteCode)

2、字節(jié)碼由java虛擬機(jī)解釋運(yùn)行。因?yàn)閖ava程序既要編譯同時也要經(jīng)過JVM的解釋運(yùn)行,所以說Java被稱為半解釋語言( "semi-interpreted" language)。

下面通過以下這個java程序,來說明java程序從編譯到最后運(yùn)行的整個流程。代碼如下:

//MainApp.java

public class MainApp {

public static void main(String[] args) {

Animal animal = new Animal("Puppy");

animal.printName();

}

}

//Animal.java

public class Animal {

public String name;

public Animal(String name) {

this.name = name;

}

public void printName() {

System.out.println("Animal ["+name+"]");

}

}

第一步(編譯): 創(chuàng)建完源文件之后,程序會先被編譯為.class文件。Java編譯一個類時,如果這個類所依賴的類還沒有被編譯,編譯器就會先編譯這個被依賴的類,然后引用,否則直接引用,這個有點(diǎn)象make。如果java編譯器在指定目錄下找不到該類所其依賴的類的.class文件或者.java源文件的話,編譯器話報(bào)“cant find symbol”的錯誤。

編譯后的字節(jié)碼文件格式主要分為兩部分:常量池和方法字節(jié)碼。常量池記錄的是代碼出現(xiàn)過的所有token(類名,成員變量名等等)以及符號引用(方法引用,成員變量引用等等);方法字節(jié)碼放的是類中各個方法的字節(jié)碼。下面是MainApp.class通過反匯編的結(jié)果,我們可以清楚看到.class文件的結(jié)構(gòu):

第二步(運(yùn)行):java類運(yùn)行的過程大概可分為兩個過程:1、類的加載 2、類的執(zhí)行。需要說明的是:JVM主要在程序第一次主動使用類的時候,才會去加載該類。也就是說,JVM并不是在一開始就把一個程序就所有的類都加載到內(nèi)存中,而是到不得不用的時候才把它加載進(jìn)來,而且只加載一次。

下面是程序運(yùn)行的詳細(xì)步驟:

在編譯好java程序得到MainApp.class文件后,在命令行上敲java AppMain。系統(tǒng)就會啟動一個jvm進(jìn)程,jvm進(jìn)程從classpath路徑中找到一個名為AppMain.class的二進(jìn)制文件,將MainApp的類信息加載到運(yùn)行時數(shù)據(jù)區(qū)的方法區(qū)內(nèi),這個過程叫做MainApp類的加載。

然后JVM找到AppMain的主函數(shù)入口,開始執(zhí)行main函數(shù)。

main函數(shù)的第一條命令是Animal animal = new Animal("Puppy");就是讓JVM創(chuàng)建一個Animal對象,但是這時候方法區(qū)中沒有Animal類的信息,所以JVM馬上加載Animal類,把Animal類的類型信息放到方法區(qū)中。

加載完Animal類之后,Java虛擬機(jī)做的第一件事情就是在堆區(qū)中為一個新的Animal實(shí)例分配內(nèi)存, 然后調(diào)用構(gòu)造函數(shù)初始化Animal實(shí)例,這個Animal實(shí)例持有著指向方法區(qū)的Animal類的類型信息(其中包含有方法表,java動態(tài)綁定的底層實(shí)現(xiàn))的引用。

當(dāng)使用animal.printName()的時候,JVM根據(jù)animal引用找到Animal對象,然后根據(jù)Animal對象持有的引用定位到方法區(qū)中Animal類的類型信息的方法表,獲得printName()函數(shù)的字節(jié)碼的地址。

開始運(yùn)行printName()函數(shù)。

特別說明:java類中所有public和protected的實(shí)例方法都采用動態(tài)綁定機(jī)制,所有私有方法、靜態(tài)方法、構(gòu)造器及初始化方法都是采用靜態(tài)綁定機(jī)制。而使用動態(tài)綁定機(jī)制的時候會用到方法表,靜態(tài)綁定時并不會用到。


當(dāng)前標(biāo)題:java走代碼的流程 java操作流程
當(dāng)前URL:http://weahome.cn/article/hghgjh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部