官术网_书友最值得收藏!

2.4 名企真題解析

接下來,我們收集了一些大企業(yè)往年的面試及筆試題,讀者可以根據(jù)以下題目來作參考,看自己是否已經(jīng)掌握了基本的知識(shí)點(diǎn)。

2.4.1 值傳遞和引用傳遞

【選自WR筆試題】

試題題面:當(dāng)一個(gè)對(duì)象被當(dāng)作參數(shù)傳遞到一個(gè)方法后,此方法可改變這個(gè)對(duì)象的屬性,并可返回變化后的結(jié)果,那么這里到底是按值傳遞還是按引用傳遞?

題面解析:本題題目比較長,有些讀者可能覺著回答很費(fèi)勁。其實(shí)可以換一種方式來想該問題,即Java中是按值傳遞還是按引用傳遞?本題的重點(diǎn)是在最后按值傳遞還是按引用傳遞,接下來將詳細(xì)講解按值傳遞和按引用傳遞。

解析過程:

先來講解一下什么是值傳遞和引用傳遞。

1)值傳遞

在方法調(diào)用時(shí),實(shí)際參數(shù)把它的值傳遞給對(duì)應(yīng)的形式參數(shù),方法執(zhí)行中,對(duì)形式參數(shù)值的改變不影響實(shí)際參數(shù)的值。

按值傳遞就是將一個(gè)參數(shù)傳遞給一個(gè)函數(shù)時(shí),函數(shù)接收的是原始值的一個(gè)副本。因此,如果函數(shù)修改了該參數(shù),僅改變副本,而原始值保持不變。

2)引用傳遞

引用傳遞也稱為傳地址。方法調(diào)用時(shí),實(shí)際參數(shù)的引用被傳遞給方法中相對(duì)應(yīng)的形式參數(shù),在方法執(zhí)行中,對(duì)形式參數(shù)的操作實(shí)際上就是對(duì)實(shí)際參數(shù)的操作,方法執(zhí)行中形式參數(shù)值的改變將會(huì)影響實(shí)際參數(shù)的值。

按引用傳遞是將一個(gè)參數(shù)傳遞給一個(gè)函數(shù)時(shí),函數(shù)接收的是原始值的內(nèi)存地址,而不是值的副本。因此,如果函數(shù)修改了該參數(shù)的值,調(diào)用代碼中的原始值也隨之改變。如果函數(shù)修改了該參數(shù)的地址,調(diào)用代碼中的原始值不會(huì)改變。

在Java中只有值傳遞參數(shù)。

(1)當(dāng)一個(gè)對(duì)象實(shí)例作為一個(gè)參數(shù)被傳遞到方法中時(shí),參數(shù)的值就是該對(duì)象引用的一個(gè)副本。對(duì)象的內(nèi)容可以在被調(diào)用的方法中改變,但對(duì)象的引用是不會(huì)發(fā)生改變的。

Java中沒有指針,因此沒有引用傳遞。但可以通過創(chuàng)建對(duì)象的方式來實(shí)現(xiàn)引用傳遞。

(2)在Java中只會(huì)傳遞對(duì)象的引用,按引用傳遞對(duì)象。

(3)在Java中按引用傳遞對(duì)象但并不意味著會(huì)按引用傳遞參數(shù)。參數(shù)可以是對(duì)象引用,而Java是按值傳遞對(duì)象引用的。

(4)Java中的變量可以為引用類型和基本類型。當(dāng)作為參數(shù)傳遞給一個(gè)方法時(shí),處理這兩種類型的方式是相同的,兩種類型都是按值傳遞。

2.4.2 什么是類的反射機(jī)制

【選自GG面試題】

題面解析:本題主要考查Java中的反射機(jī)制,我們需要知道什么是反射機(jī)制,反射機(jī)制的功能都有哪些,另外就是怎樣運(yùn)用反射機(jī)制來創(chuàng)建類的對(duì)象等。全面地了解該問題所涉及的知識(shí),回答問題會(huì)更加容易。

解析過程:

反射機(jī)制是Java語言中的一個(gè)重要的特性,反射機(jī)制不僅允許程序在運(yùn)行時(shí)進(jìn)行自我檢查,而且還允許對(duì)其內(nèi)部的成員進(jìn)行操作。由于反射機(jī)制在運(yùn)行時(shí)能夠?qū)崿F(xiàn)對(duì)類的裝載,因此能夠提高程序的靈活性,但是如果使用反射機(jī)制的方法不當(dāng),可能也會(huì)嚴(yán)重影響系統(tǒng)的性能。

反射機(jī)制提供的功能如下:

(1)得到一個(gè)對(duì)象所屬的類。

(2)獲取一個(gè)類的所有成員變量和方法。

(3)在運(yùn)行時(shí)創(chuàng)建對(duì)象。

(4)在運(yùn)行時(shí)調(diào)用對(duì)象的方法。

反射機(jī)制最重要的一個(gè)作用就是可以在運(yùn)行時(shí)動(dòng)態(tài)地創(chuàng)建類的對(duì)象,其中Class類是反射機(jī)制中最重要的類。獲取Class類的方法如下:

     獲取Class對(duì)象的三種反射:
    (1)Class class1 = Class.forName("com.reflection.User");
    (2)Class class2 = User.class;
    (3)User user = new User();
         Class class3 = user.getClass();

獲取對(duì)象實(shí)例的方法如下:

    (1)user1 = (User)class1.newInstance ();
         user1.setName("a");
         user1.setAge("15");
    (2)Constructor constructor = class2.getConstructor (String.class, Integer.class);
         user2 = (User)constructor.newInstance("b", 11);

2.4.3 Java創(chuàng)建對(duì)象的方式有哪幾種

【選自BD面試題】

題面解析:本題也是在大型企業(yè)的面試中最常問的問題之一,主要考查創(chuàng)建對(duì)象的方式。

解析過程:

共有4種創(chuàng)建對(duì)象的方式。

1)通過new語句實(shí)例化一個(gè)對(duì)象

使用new關(guān)鍵字創(chuàng)建對(duì)象是最常見的一種方式,但是使用new創(chuàng)建對(duì)象會(huì)增加耦合度。在使用new時(shí)需要先查看new后面的類型,然后再?zèng)Q定分配多大的內(nèi)存空間;接著可以通過調(diào)用構(gòu)造函數(shù),來對(duì)對(duì)象的各個(gè)域進(jìn)行填充;根據(jù)構(gòu)造方法的返回值進(jìn)行對(duì)象的創(chuàng)建,最后把引用地址傳遞給外部。例如:

2)通過反射機(jī)制創(chuàng)建對(duì)象

使用反射機(jī)制的Class類的newInstance()方法。

3)通過clone()方法創(chuàng)建一個(gè)對(duì)象

在使用clone()方法時(shí),不會(huì)調(diào)用構(gòu)造函數(shù),而是需要有一個(gè)分配了內(nèi)存的源對(duì)象。在創(chuàng)建新對(duì)象時(shí),首先應(yīng)該分配一個(gè)和源對(duì)象一樣大的內(nèi)存空間。

4)通過反序列化的方式創(chuàng)建對(duì)象

序列化就是把對(duì)象通過流的方式存儲(chǔ)到文件里面,那么反序列化也就是把字節(jié)內(nèi)容讀出來并還原成Java對(duì)象,這里還原的過程就是反序列化。在使用反序列化時(shí)也不會(huì)調(diào)用構(gòu)造方法。

主站蜘蛛池模板: 洛阳市| 镇雄县| 阳高县| 穆棱市| 英德市| 五华县| 蒙自县| 花莲县| 侯马市| 铅山县| 左云县| 安达市| 芦山县| 治多县| 德惠市| 奈曼旗| 龙胜| 祁连县| 佛坪县| 洱源县| 宣汉县| 年辖:市辖区| 达孜县| 霍邱县| 垣曲县| 尤溪县| 清苑县| 延安市| 波密县| 称多县| 合山市| 巴东县| 察隅县| 蒙城县| 丹东市| 泸州市| 敦化市| 敦化市| 文安县| 民乐县| 新绛县|