国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java基礎(chǔ)知識儲備一:Java的值傳遞和引用傳遞

frontoldman / 1414人閱讀

摘要:每個棧幀中包括局部變量表用來存儲方法中的局部變量非靜態(tài)變量函數(shù)形參。操作數(shù)棧虛擬機的解釋執(zhí)行引擎被稱為基于棧的執(zhí)行引擎,其中所指的棧就是指操作數(shù)棧。指向運行時常量池的引用存儲程序執(zhí)行時可能用到常量的引用。

本篇文章轉(zhuǎn)自微信公眾號:Java后端技術(shù)

學(xué)過Java基礎(chǔ)的人都知道:值傳遞和引用傳遞是初次接觸Java時的一個難點,有時候記得了語法卻記不得怎么實際運用,有時候會的了運用卻解釋不出原理,而且坊間討論的話題又是充滿爭議:有的論壇帖子說Java只有值傳遞,有的博客說兩者皆有;這讓人有點摸不著頭腦,下面我們就這個話題做一些探討,對書籍、對論壇博客的說法,做一次考證,以得出信得過的答案。

其實,對于值傳遞和引用傳遞的語法和運用,百度一下,就能出來可觀的解釋和例子數(shù)目,或許你看一下例子好像就懂,但是當你參加面試,做一道這個知識點的筆試題時感覺自己會,胸有成熟的寫了答案,卻發(fā)現(xiàn)是錯的,或者是你根本不會做。

是什么原因?

那是因為你對知識點沒有了解透徹,只知道其皮毛。要熟讀一個語法很簡單,要理解一行代碼也不難,但是能把學(xué)過的知識融會貫通,串聯(lián)起來理解,那就是非常難了,在此,關(guān)于值傳遞和引用傳遞,小編會從以前學(xué)過的基礎(chǔ)知識開始,從內(nèi)存模型開始,一步步的引出值傳遞和引用傳遞的本質(zhì)原理,故篇幅較長,知識點較多,望讀者多有包涵。

1. 形參與實參

我們先來重溫一組語法:

形參:方法被調(diào)用時需要傳遞進來的參數(shù),如:func(inta)中的a,它只有在func被調(diào)用期間a才有意義,也就是會被分配內(nèi)存空間,在方法func執(zhí)行完成后,a就會被銷毀釋放空間,也就是不存在了實參:方法被調(diào)用時是傳入的實際值,它在方法被調(diào)用前就已經(jīng)被初始化并且在方法被調(diào)用時傳入。

舉個栗子:

1    public static void func(int a){
2      a=20;
3      System.out.println(a);
4    }
5    public static void main(String[] args) {
6      int a=10;//變量
7      func(a);
8    }

例子中
int a=10;中的a在被調(diào)用之前就已經(jīng)創(chuàng)建并初始化,在調(diào)用func方法時,他被當做參數(shù)傳入,所以這個a是實參。
而func(int a)中的a只有在func被調(diào)用時它的生命周期才開始,而在func調(diào)用結(jié)束之后,它也隨之被JVM釋放掉,,所以這個a是形參。

2. Java的數(shù)據(jù)類型

所謂數(shù)據(jù)類型,是編程語言中對內(nèi)存的一種抽象表達方式,我們知道程序是由代碼文件和靜態(tài)資源組成,在程序被運行前,這些代碼存在在硬盤里,程序開始運行,這些代碼會被轉(zhuǎn)成計算機能識別的內(nèi)容放到內(nèi)存中被執(zhí)行。
因此

數(shù)據(jù)類型實質(zhì)上是用來定義編程語言中相同類型的數(shù)據(jù)的存儲形式,也就是決定了如何將代表這些值的位存儲到計算機的內(nèi)存中。

所以,數(shù)據(jù)在內(nèi)存中的存儲,是根據(jù)數(shù)據(jù)類型來劃定存儲形式和存儲位置的。
那么
Java的數(shù)據(jù)類型有哪些?

基本類型:編程語言中內(nèi)置的最小粒度的數(shù)據(jù)類型。它包括四大類八種類型:

4種整數(shù)類型:byte、short、int、long
2種浮點數(shù)類型:float、double
1種字符類型:char
1種布爾類型:boolean

引用類型:引用也叫句柄,引用類型,是編程語言中定義的在句柄中存放著實際內(nèi)容所在地址的地址值的一種數(shù)據(jù)形式。它主要包括:


接口
數(shù)組

有了數(shù)據(jù)類型,JVM對程序數(shù)據(jù)的管理就規(guī)范化了,不同的數(shù)據(jù)類型,它的存儲形式和位置是不一樣的,要想知道JVM是怎么存儲各種類型的數(shù)據(jù),就得先了解JVM的內(nèi)存劃分以及每部分的職能。

3.JVM內(nèi)存的劃分及職能

Java語言本身是不能操作內(nèi)存的,它的一切都是交給JVM來管理和控制的,因此Java內(nèi)存區(qū)域的劃分也就是JVM的區(qū)域劃分,在說JVM的內(nèi)存劃分之前,我們先來看一下Java程序的執(zhí)行過程,如下圖:

有圖可以看出:Java代碼被編譯器編譯成字節(jié)碼之后,JVM開辟一片內(nèi)存空間(也叫運行時數(shù)據(jù)區(qū)),通過類加載器加到到運行時數(shù)據(jù)區(qū)來存儲程序執(zhí)行期間需要用到的數(shù)據(jù)和相關(guān)信息,在這個數(shù)據(jù)區(qū)中,它由以下幾部分組成:

虛擬機棧

程序計數(shù)器

方法區(qū)

本地方法棧

我們接著來了解一下每部分的原理以及具體用來存儲程序執(zhí)行過程中的哪些數(shù)據(jù)。

1. 虛擬機棧

虛擬機棧是Java方法執(zhí)行的內(nèi)存模型,棧中存放著棧幀,每個棧幀分別對應(yīng)一個被調(diào)用的方法,方法的調(diào)用過程對應(yīng)棧幀在虛擬機中入棧到出棧的過程。

棧是線程私有的,也就是線程之間的棧是隔離的;當程序中某個線程開始執(zhí)行一個方法時就會相應(yīng)的創(chuàng)建一個棧幀并且入棧(位于棧頂),在方法結(jié)束后,棧幀出棧。

下圖表示了一個Java棧的模型以及棧幀的組成:

棧幀:是用于支持虛擬機進行方法調(diào)用和方法執(zhí)行的數(shù)據(jù)結(jié)構(gòu),它是虛擬機運行時數(shù)據(jù)區(qū)中的虛擬機棧的棧元素。

每個棧幀中包括:

1,局部變量表:用來存儲方法中的局部變量(非靜態(tài)變量、函數(shù)形參)。當變量為基本數(shù)據(jù)類型時,直接存儲值,當變量為引用類型時,存儲的是指向具體對象的引用。
2,操作數(shù)棧:Java虛擬機的解釋執(zhí)行引擎被稱為"基于棧的執(zhí)行引擎",其中所指的棧就是指操作數(shù)棧。
3,指向運行時常量池的引用:存儲程序執(zhí)行時可能用到常量的引用。
4,方法返回地址:存儲方法執(zhí)行完成后的返回地址。

2. 堆:

堆是用來存儲對象本身和數(shù)組的,在JVM中只有一個堆,因此,堆是被所有線程共享的。

3. 方法區(qū):

方法區(qū)是一塊所有線程共享的內(nèi)存邏輯區(qū)域,在JVM中只有一個方法區(qū),用來存儲一些線程可共享的內(nèi)容,它是線程安全的,多個線程同時訪問方法區(qū)中同一個內(nèi)容時,只能有一個線程裝載該數(shù)據(jù),其它線程只能等待。

方法區(qū)可存儲的內(nèi)容有:類的全路徑名、類的直接超類的權(quán)全限定名、類的訪問修飾符、類的類型(類或接口)、類的直接接口全限定名的有序列表、常量池(字段,方法信息,靜態(tài)變量,類型引用(class))等。

4. 本地方法棧:

本地方法棧的功能和虛擬機棧是基本一致的,并且也是線程私有的,它們的區(qū)別在于虛擬機棧是為執(zhí)行Java方法服務(wù)的,而本地方法棧是為執(zhí)行本地方法服務(wù)的。

有人會疑惑:什么是本地方法?為什么Java還要調(diào)用本地方法?

5. 程序計數(shù)器:

線程私有的。
記錄著當前線程所執(zhí)行的字節(jié)碼的行號指示器,在程序運行過程中,字節(jié)碼解釋器工作時就是通過改變這個計數(shù)器的值來選取下一條需要執(zhí)行的字節(jié)碼指令,分支、循環(huán)、異常處理、線程恢復(fù)等基礎(chǔ)功能都需要依賴計數(shù)器完成。

4. 數(shù)據(jù)如何在內(nèi)存中存儲?

從上面程序運行圖我們可以看到,JVM在程序運行時的內(nèi)存分配有三個地方:

堆 棧 靜態(tài)方法區(qū) 常量區(qū)

相應(yīng)地,每個存儲區(qū)域都有自己的內(nèi)存分配策略:

堆式: 棧式 靜態(tài)

我們已經(jīng)知道:Java中的數(shù)據(jù)類型有基本數(shù)據(jù)類型和引用數(shù)據(jù)類型,那么這些數(shù)據(jù)的存儲都使用哪一種策略呢?
這里要分以下的情況進行探究:

1. 基本數(shù)據(jù)類型的存儲

我們分別來研究一下:

A.基本數(shù)據(jù)類型的局部變量

定義基本數(shù)據(jù)類型的局部變量以及數(shù)據(jù)都是直接存儲在內(nèi)存中的棧上,也就是前面說到的“虛擬機棧”,數(shù)據(jù)本身的值就是存儲在棧空間里面。

如上圖,在方法內(nèi)定義的變量直接存儲在棧中,如

int age=50;
int weight=50;
int grade=6;

當我們寫“int age=50;”,其實是分為兩步的:

int age;//定義變量
age=50;//賦值

首先JVM創(chuàng)建一個名為age的變量,存于局部變量表中,然后去棧中查找是否存在有字面量值為50的內(nèi)容,如果有就直接把age指向這個地址,如果沒有,JVM會在棧中開辟一塊空間來存儲“50”這個內(nèi)容,并且把age指向這個地址。因此我們可以知道:
我們聲明并初始化基本數(shù)據(jù)類型的局部變量時,變量名以及字面量值都是存儲在棧中,而且是真實的內(nèi)容。

我們再來看“int weight=50;”,按照剛才的思路:字面量為50的內(nèi)容在棧中已經(jīng)存在,因此weight是直接指向這個地址的。由此可見:棧中的數(shù)據(jù)在當前線程下是共享的。

那么如果再執(zhí)行下面的代碼呢?

weight=40;
當代碼中重新給weight變量進行賦值時,JVM會去棧中尋找字面量為40的內(nèi)容,發(fā)現(xiàn)沒有,就會開辟一塊內(nèi)存空間存儲40這個內(nèi)容,并且把weight指向這個地址。由此可知:

基本數(shù)據(jù)類型的數(shù)據(jù)本身是不會改變的,當局部變量重新賦值時,并不是在內(nèi)存中改變字面量內(nèi)容,而是重新在棧中尋找已存在的相同的數(shù)據(jù),若棧中不存在,則重新開辟內(nèi)存存新數(shù)據(jù),并且把要重新賦值的局部變量的引用指向新數(shù)據(jù)所在地址。

B. 基本數(shù)據(jù)類型的成員變量

成員變量:顧名思義,就是在類體中定義的變量。
看下圖:

我們看per的地址指向的是堆內(nèi)存中的一塊區(qū)域,我們來還原一下代碼:

 public class Person{
   private int age;
   private String name;
   private int grade;
 //篇幅較長,省略setter getter方法
   static void run(){
      System.out.println("run...."); 
    };
 }
//調(diào)用
Person per=new Person();

同樣是局部變量的age、name、grade卻被存儲到了堆中為per對象開辟的一塊空間中。因此可知:基本數(shù)據(jù)類型的成員變量名和值都存儲于堆中,其生命周期和對象的是一致的。

C. 基本數(shù)據(jù)類型的靜態(tài)變量

前面提到方法區(qū)用來存儲一些共享數(shù)據(jù),因此基本數(shù)據(jù)類型的靜態(tài)變量名以及值存儲于方法區(qū)的運行時常量池中,靜態(tài)變量隨類加載而加載,隨類消失而消失

2. 引用數(shù)據(jù)類型的存儲:

上面提到:堆是用來存儲對象本身和數(shù)組,而引用(句柄)存放的是實際內(nèi)容的地址值,因此通過上面的程序運行圖,也可以看出,當我們定義一個對象時

Person per=new Person();
實際上,它也是有兩個過程:

Person per;//定義變量
per=new Person();//賦值

在執(zhí)行Person per;時,JVM先在虛擬機棧中的變量表中開辟一塊內(nèi)存存放per變量,在執(zhí)行per=new Person()時,JVM會創(chuàng)建一個Person類的實例對象并在堆中開辟一塊內(nèi)存存儲這個實例,同時把實例的地址值賦值給per變量。因此可見:
對于引用數(shù)據(jù)類型的對象/數(shù)組,變量名存在棧中,變量值存儲的是對象的地址,并不是對象的實際內(nèi)容。

6. 值傳遞和引用傳遞

前面已經(jīng)介紹過形參和實參,也介紹了數(shù)據(jù)類型以及數(shù)據(jù)在內(nèi)存中的存儲形式,接下來,就是文章的主題:值傳遞和引用的傳遞。

值傳遞:
在方法被調(diào)用時,實參通過形參把它的內(nèi)容副本傳入方法內(nèi)部,此時形參接收到的內(nèi)容是實參值的一個拷貝,因此在方法內(nèi)對形參的任何操作,都僅僅是對這個副本的操作,不影響原始值的內(nèi)容。

來看個例子:

 1public static void valueCrossTest(int age,float weight){
 2    System.out.println("傳入的age:"+age);
 3    System.out.println("傳入的weight:"+weight);
 4    age=33;
 5    weight=89.5f;
 6    System.out.println("方法內(nèi)重新賦值后的age:"+age);
 7    System.out.println("方法內(nèi)重新賦值后的weight:"+weight);
 8    }
 9
10//測試
11public static void main(String[] args) {
12        int a=25;
13        float w=77.5f;
14        valueCrossTest(a,w);
15        System.out.println("方法執(zhí)行后的age:"+a);
16        System.out.println("方法執(zhí)行后的weight:"+w);
17}

輸出結(jié)果:

1傳入的age:25
2傳入的weight:77.5
3
4方法內(nèi)重新賦值后的age:33
5方法內(nèi)重新賦值后的weight:89.5
6
7方法執(zhí)行后的age:25
8方法執(zhí)行后的weight:77.5

從上面的打印結(jié)果可以看到:
a和w作為實參傳入valueCrossTest之后,無論在方法內(nèi)做了什么操作,最終a和w都沒變化。

這是什么造型呢?!!

下面我們根據(jù)上面學(xué)到的知識點,進行詳細的分析:

首先程序運行時,調(diào)用mian()方法,此時JVM為main()方法往虛擬機棧中壓入一個棧幀,即為當前棧幀,用來存放main()中的局部變量表(包括參數(shù))、操作棧、方法出口等信息,如a和w都是mian()方法中的局部變量,因此可以斷定,a和w是躺著mian方法所在的棧幀中
如圖:

而當執(zhí)行到valueCrossTest()方法時,JVM也為其往虛擬機棧中壓入一個棧,即為當前棧幀,用來存放valueCrossTest()中的局部變量等信息,因此age和weight是躺著valueCrossTest方法所在的棧幀中,而他們的值是從a和w的值copy了一份副本而得,如圖:

因而可以a和age、w和weight對應(yīng)的內(nèi)容是不一致的,所以當在方法內(nèi)重新賦值時,實際流程如圖:

也就是說,age和weight的改動,只是改變了當前棧幀(valueCrossTest方法所在棧幀)里的內(nèi)容,當方法執(zhí)行結(jié)束之后,這些局部變量都會被銷毀,mian方法所在棧幀重新回到棧頂,成為當前棧幀,再次輸出a和w時,依然是初始化時的內(nèi)容。
因此:
值傳遞傳遞的是真實內(nèi)容的一個副本,對副本的操作不影響原內(nèi)容,也就是形參怎么變化,不會影響實參對應(yīng)的內(nèi)容。

引用傳遞:
”引用”也就是指向真實內(nèi)容的地址值,在方法調(diào)用時,實參的地址通過方法調(diào)用被傳遞給相應(yīng)的形參,在方法體內(nèi),形參和實參指向通愉快內(nèi)存地址,對形參的操作會影響的真實內(nèi)容。

舉個栗子:
先定義一個對象:

 1public class Person {
 2        private String name;
 3        private int age;
 4
 5        public String getName() {
 6            return name;
 7        }
 8        public void setName(String name) {
 9            this.name = name;
10        }
11        public int getAge() {
12            return age;
13        }
14        public void setAge(int age) {
15            this.age = age;
16        }
17}

我們寫個函數(shù)測試一下:

 1public static void PersonCrossTest(Person person){
 2        System.out.println("傳入的person的name:"+person.getName());
 3        person.setName("我是張小龍");
 4        System.out.println("方法內(nèi)重新賦值后的name:"+person.getName());
 5    }
 6//測試
 7public static void main(String[] args) {
 8        Person p=new Person();
 9        p.setName("我是馬化騰");
10        p.setAge(45);
11        PersonCrossTest(p);
12        System.out.println("方法執(zhí)行后的name:"+p.getName());
13}

輸出結(jié)果:

1傳入的person的name:我是馬化騰
2方法內(nèi)重新賦值后的name:我是張小龍
3方法執(zhí)行后的name:我是張小龍

可以看出,person經(jīng)過personCrossTest()方法的執(zhí)行之后,內(nèi)容發(fā)生了改變,這印證了上面所說的“引用傳遞”,對形參的操作,改變了實際對象的內(nèi)容。

那么,到這里就結(jié)題了嗎?
不是的,沒那么簡單,
能看得到想要的效果
是因為剛好選對了例子而已!!!

下面我們對上面的例子稍作修改,加上一行代碼,

1public static void PersonCrossTest(Person person){
2        System.out.println("傳入的person的name:"+person.getName());
3        person=new Person();//加多此行代碼
4        person.setName("我是張小龍");
5        System.out.println("方法內(nèi)重新賦值后的name:"+person.getName());
6    }

輸出結(jié)果:

1傳入的person的name:我是馬化騰
2方法內(nèi)重新賦值后的name:我是張小龍
3方法執(zhí)行后的name:我是馬化騰

為什么這次的輸出和上次的不一樣了呢?
看出什么問題了嗎?

按照上面講到JVM內(nèi)存模型可以知道,對象和數(shù)組是存儲在Java堆區(qū)的,而且堆區(qū)是共享的,因此程序執(zhí)行到main()方法中的下列代碼時

1Person p=new Person();
2        p.setName("我是馬化騰");
3        p.setAge(45);
4        PersonCrossTest(p);

JVM會在堆內(nèi)開辟一塊內(nèi)存,用來存儲p對象的所有內(nèi)容,同時在main()方法所在線程的棧區(qū)中創(chuàng)建一個引用p存儲堆區(qū)中p對象的真實地址,如圖:

當執(zhí)行到PersonCrossTest()方法時,因為方法內(nèi)有這么一行代碼:
person=new Person();
JVM需要在堆內(nèi)另外開辟一塊內(nèi)存來存儲new Person(),假如地址為“xo3333”,那此時形參person指向了這個地址,假如真的是引用傳遞,那么由上面講到:引用傳遞中形參實參指向同一個對象,形參的操作會改變實參對象的改變。

可以推出:實參也應(yīng)該指向了新創(chuàng)建的person對象的地址,所以在執(zhí)行PersonCrossTest()結(jié)束之后,最終輸出的應(yīng)該是后面創(chuàng)建的對象內(nèi)容。

然而實際上,最終的輸出結(jié)果卻跟我們推測的不一樣,最終輸出的仍然是一開始創(chuàng)建的對象的內(nèi)容。

由此可見:引用傳遞,在Java中并不存在。

但是有人會疑問:為什么第一個例子中,在方法內(nèi)修改了形參的內(nèi)容,會導(dǎo)致原始對象的內(nèi)容發(fā)生改變呢?

這是因為:無論是基本類型和是引用類型,在實參傳入形參時,都是值傳遞,也就是說傳遞的都是一個副本,而不是內(nèi)容本身。

由圖可以看出,方法內(nèi)的形參person和實參p并無實質(zhì)關(guān)聯(lián),它只是由p處copy了一份指向?qū)ο蟮牡刂罚藭r:

p和person都是指向同一個對象。

因此在第一個例子中,對形參p的操作,會影響到實參對應(yīng)的對象內(nèi)容。而在第二個例子中,當執(zhí)行到new Person()之后,JVM在堆內(nèi)開辟一塊空間存儲新對象,并且把person改成指向新對象的地址,此時:

p依舊是指向舊的對象,person指向新對象的地址。

所以此時對person的操作,實際上是對新對象的操作,于實參p中對應(yīng)的對象毫無關(guān)系。

結(jié)語

因此可見:在Java中所有的參數(shù)傳遞,不管基本類型還是引用類型,都是值傳遞,或者說是副本傳遞。
只是在傳遞過程中:

如果是對基本數(shù)據(jù)類型的數(shù)據(jù)進行操作,由于原始內(nèi)容和副本都是存儲實際值,并且是在不同的棧區(qū),因此形參的操作,不影響原始內(nèi)容。

如果是對引用類型的數(shù)據(jù)進行操作,分兩種情況,一種是形參和實參保持指向同一個對象地址,則形參的操作,會影響實參指向的對象的內(nèi)容。一種是形參被改動指向新的對象地址(如重新賦值引用),則形參的操作,不會影響實參指向的對象的內(nèi)容。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/71964.html

相關(guān)文章

  • 最最最常見的Java基礎(chǔ)知識面試題總結(jié)

    摘要:地址面試必備最最最常見的面試題總結(jié)第一周一中的值傳遞和引用傳遞非常重要首先要明確的是對象傳遞數(shù)組類接口是引用傳遞,原始類型數(shù)據(jù)整型浮點型字符型布爾型傳遞是值傳遞。這個哈希碼的作用是確定該對象在哈希表中的索引位置。 showImg(https://segmentfault.com/img/remote/1460000015923339?w=922&h=519); 這里會分享一些出現(xiàn)頻率極...

    syoya 評論0 收藏0
  • 次,徹底解決Java的值傳遞引用傳遞

    摘要:操作數(shù)棧虛擬機的解釋執(zhí)行引擎被稱為基于棧的執(zhí)行引擎,其中所指的棧就是指操作數(shù)棧。基本數(shù)據(jù)類型的靜態(tài)變量前面提到方法區(qū)用來存儲一些共享數(shù)據(jù),因此基本數(shù)據(jù)類型的靜態(tài)變量名以及值存儲于方法區(qū)的運行時常 本文旨在用最通俗的語言講述最枯燥的基本知識 學(xué)過Java基礎(chǔ)的人都知道:值傳遞和引用傳遞是初次接觸Java時的一個難點,有時候記得了語法卻記不得怎么實際運用,有時候會的了運用卻解釋不出原理,而...

    Lavender 評論0 收藏0
  • java中傳值方式的個人理解

    摘要:接下了,我們調(diào)用方法,來嘗試改變的值以此驗證中的傳值方式。我們將作為實參傳給方法,形參來接受這個實參,在這里就體現(xiàn)出了兩種傳參方式的不同。中只有值傳遞這一種方式,只不過對于引用類型來說,傳遞的參數(shù)是對象的引用罷了。 前言 這幾天在整理java基礎(chǔ)知識方面的內(nèi)容,對于值傳遞還不是特別理解,于是查閱了一些資料和網(wǎng)上相關(guān)博客,自己進行了歸納總結(jié),最后將其整理成了一篇博客。 值傳遞 值傳遞是指...

    vvpvvp 評論0 收藏0
  • 【金三銀四】面試題之java基礎(chǔ)

    摘要:中,任何未處理的受檢查異常強制在子句中聲明。運行時多態(tài)是面向?qū)ο笞罹璧臇|西,要實現(xiàn)運行時多態(tài)需要方法重寫子類繼承父類并重寫父類中已 1、簡述Java程序編譯和運行的過程:答:① Java編譯程序?qū)ava源程序翻譯為JVM可執(zhí)行代碼--字節(jié)碼,創(chuàng)建完源文件之后,程序會先被編譯成 .class 文件。② 在編譯好的java程序得到.class文件后,使用命令java 運行這個 .c...

    Yangyang 評論0 收藏0
  • 【金三銀四】面試題之java基礎(chǔ)

    摘要:中,任何未處理的受檢查異常強制在子句中聲明。運行時多態(tài)是面向?qū)ο笞罹璧臇|西,要實現(xiàn)運行時多態(tài)需要方法重寫子類繼承父類并重寫父類中已 1、簡述Java程序編譯和運行的過程:答:① Java編譯程序?qū)ava源程序翻譯為JVM可執(zhí)行代碼--字節(jié)碼,創(chuàng)建完源文件之后,程序會先被編譯成 .class 文件。② 在編譯好的java程序得到.class文件后,使用命令java 運行這個 .c...

    Barrior 評論0 收藏0

發(fā)表評論

0條評論

frontoldman

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<