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

2.3 精選面試、筆試題解析

根據前面介紹的Java基礎知識,本節總結了一些在面試或筆試過程中經常遇到的問題。通過本節的學習,讀者將掌握在面試或筆試過程中回答問題的方法。

2.3.1 Java基本數據類型之間如何轉換

題面解析:本題主要考查應聘者對基本數據類型的熟練掌握程度。看到此問題,應聘者需要把關于數據類型的所有知識在腦海中回憶一下,其中包括基本數據類型都有哪些、數據類型的作用等,熟悉了數據類型的基本知識之后,數據類型之間的轉換問題將迎刃而解。

解析過程:數據類型之間的轉換有兩種方式:自動轉換和強制轉換。

1.自動轉換

自動轉換規則:從存儲范圍小的類型轉換到存儲范圍大的類型,即byte→short(char)→int→long→float→double。

(1)存儲范圍小的類型自動轉換為存儲范圍大的類型。如byte類型的數據可以賦值給short、int、long類型的變量;short、char類型的數據可以賦值給int、long類型的變量;int類型的數據可以賦值給long類型的變量等。

(2)存儲范圍大的類型轉換為存儲范圍小的類型時,需要加強制轉換符。

(3)byte、short、char之間不會互相轉換,并且三者在計算時首先轉換為int類型。

(4)實數常量默認為double類型,整數常量默認為int類型。

2.強制轉換

強制轉換規則:從存儲范圍大的類型轉換到存儲范圍小的類型,即double→float→long→int→short(char)→byte。

語法格式:

    (type)value

其中,type是要強制類型轉換后的數據類型。

2.3.2 談談你對面向對象的理解

題面解析:本題是對面向對象知識點的考查,應聘者在回答該問題時,不能照著定義直接背出來,而是要闡述自己對面向對象概念的理解,另外,還要解釋關于面向對象更深一層的含義。

解析過程:在解釋面向對象之前,先介紹一下什么是對象。

在Java語言中,把對象當作一種變量,它不僅可以存儲數據,還可以對自身進行操作。每個對象都有各自的屬性及方法,Java就是通過對象之間行為的交互來解決問題的。

在我看來,面向對象就是把構成問題的所有事物分解成一個個的對象,建立這些對象去描述某個事物在解決問題中的行為。而類就是面向對象中很重要的一部分,類是很多個具有相同屬性和行為特征的對象所抽象出來的,對象是類的一個實例。

類還具有三個特性,即封裝、繼承和多態。

(1)封裝:將一類事物的屬性和行為抽象成一個類,只提供符合開發者意愿的公有方法來訪問這些數據和邏輯,在提高數據的隱秘性的同時,使代碼模塊化。

(2)繼承:子類可以繼承父類的屬性和方法,并對其進行拓展。

(3)多態:同一種類型的對象執行同一個方法時可以表現出不同的行為特征。通過繼承的上下轉型、接口的回調以及方法的重寫和重載可以實現多態。

2.3.3 Java中的訪問修飾符有哪些

題面解析:本題主要考查應聘者對修飾符的掌握程度,知道訪問修飾符有哪些以及它們的使用范圍和區別等。

解析過程:Java中有四種訪問修飾符,分別為public、private、protected和default。

(1)public:公有的。用public修飾的類、屬性及方法,不僅可以跨類訪問,而且允許跨包(package)訪問。

(2)private:私有的。用private修飾的類、屬性以及方法只能被該類的對象訪問,其子類不能訪問,更不允許跨包訪問。

(3)protected:介于public和private之間的一種訪問修飾符。用protected修飾的類、屬性以及方法只能被該類本身的方法及子類訪問,即使子類在不同的包中也可以訪問。

(4)default:默認訪問模式。在該模式下,只允許在同一個包中進行訪問。

注意protected修飾符所修飾的類屬于成員變量和方法,只可以被子類訪問,而不管子類是不是和父類位于同一個包中。default修飾符所修飾的類也屬于成員變量和方法,但只可被同一個包中的其他類訪問,而不管其他類是不是該類的子類。protected屬于子類限制修飾符,而default屬于包限制修飾符。

2.3.4 重載和重寫

試題題面:什么是方法的重載和重寫?它倆之間有什么區別?

題面解析:本題屬于對概念類知識的考查,在解題的過程中需要先解釋方法重載和重寫的概念,然后介紹各自的特點,最后再分析方法重載和重寫之間的區別。

解析過程:

1.方法重載

1)構成方法重載的必要條件

定義在同一個類中,方法名相同,參數的個數、順序、類型不同構成重載。

2)方法重載的目的

為了解決參數的個數、類型、順序不一致,但功能一致、方法名一致的重名問題的情況。

3)方法重載的特點

(1)發生在同一個類中。

(2)方法名稱相同(參數列表不同)。

(3)參數的個數、順序、類型不同。

(4)和返回值類型以及訪問權限修飾符、異常聲明沒有關系。

(5)重載是多態的一種表現形式。

(6)重載的精確性原則,就是賦給變量值的時候要按照變量的規則賦值。

2.方法重寫

如果從父類繼承的方法不能滿足子類的需求,可以對其進行改寫,這個過程稱為方法的重寫。

1)方法重寫的目的

父類的功能實現無法滿足子類的需求,需要重寫。

2)方法重寫的特點

(1)發生在具有子父類兩個關系的類中。

(2)方法名稱相同。

(3)參數的列表完全相同。

(4)返回值類型可以相同或者是其子類。

(5)訪問權限修飾符不能夠嚴于父類。

(6)重寫是多態的必要條件。

(7)拋出的異常不能比父類的異常大。

(8)私有修飾的方法不能夠被繼承,就更不可能被重寫。

(9)構造方法不能被重寫。

2.3.5 什么是構造方法

題面解析:本題主要考查應聘者對Java中構造方法的理解,因此應聘者不僅需要知道什么是構造方法、構造方法有哪些特點,而且還要知道怎樣使用構造方法。

解析過程:構造方法是指定義在Java類中的用來初始化對象的方法。通常使用“new+構造方法”的方式來創建新的對象,還可以給對象中的實例進行賦值。

1)構造方法的語法規則

(1)方法名必須與類名相同。

(2)無返回值類型,不能使用void進行修飾。

(3)可以指定參數,也可以不指定參數;分為有參構造方法和無參構造方法。

例如:調用構造方法

    Student s1;
    s1 = new Student();//調用構造方法

2)構造方法的特點

(1)當沒有指定構造方法時,系統會自動添加無參的構造方法。

(2)構造方法可以重載:方法名相同,但參數不同的多個方法,調用時會自動根據不同的參數選擇相應的方法。

(3)構造方法是不被繼承的。

(4)當手動指定了構造方法時,無論是有參的還是無參的,系統都將不會再添加無參的構造方法。

(5)構造方法不但可以給對象的屬性賦值,還可以保證給對象的屬性賦一個合理的值。

(6)構造方法不能被static、final、synchronized、abstract和native修飾。

2.3.6 局部變量與成員變量有什么區別

題面解析:本題主要考查局部變量和成員變量的區別,應聘者需要掌握變量的基礎知識,包括什么是變量、什么是常量、變量的命名規則以及它們之間的區別等內容。看到問題時,應聘者腦海中要快速想到關于變量的各個知識點,才能夠快速、準確地回答出該問題。

解析過程:

(1)局部變量是指在方法或者方法代碼塊中定義的變量,其作用域是其所在的代碼塊。

(2)成員變量是指在類的體系結構的變量部分中定義的變量。

(3)局部變量和成員變量的區別

①定義的位置

局部變量:定義在方法的內部。

成員變量:定義在方法的外部,即直接寫在類中。

②作用范圍

局部變量:只適用于方法中,描述類的公共屬性。

成員變量:整個類中都可以通用。

③默認值(初始化)

局部變量:沒有默認初始值,需要手動進行賦值之后才能使用。

成員變量:有默認初始值,如int類型的默認值為0;float類型的默認值為0.0f;double類型的默認值為0.0。

④內存的位置

局部變量:位于棧內存。

成員變量:位于堆內存。

⑤生命周期

局部變量:在調用對應的方法時,局部變量因為執行創建語句而存在,超出自己的作用域之后會立即從內存中消失。

成員變量:成員變量隨著對象的創建而創建,隨著對象的消失而消失。

2.3.7 解釋一下break、continue以及return的區別

題面解析:本題是在筆試中出現頻率較高的一道題,主要考查應聘者是否掌握循環控制語句的使用。在解答本題之前需要知道break、continue和return的用法,經過對比,進而就能夠很好地回答本題。

解析過程:

1.break

break用于完全結束一個循環,跳出循環體。無論是哪種循環,只要在循環體中有break出現,系統會立刻結束循環,開始執行循環之后的代碼。

break不僅可以結束其所在的循環,還可結束其外層循環。在結束外層循環時,需要在break后加一個標簽,這個標簽用于標識外層循環。Java中的標簽就是一個緊跟著英文冒號(:)的標識符,且必須把它放在循環語句之前才有作用。例如:

2.continue

continue用于終止本次循環,繼續開始下次循環。continue后的循環體中的語句不會繼續執行,下次循環和循環體外面的都會執行。

continue的功能和break有相似的地方,但區別是continue只是終止本次循環,接著開始下一次循環,而break則是完全終止循環。例如:

3.return

return并不是用于跳出循環,而是結束一個方法。如果在循環體內的一個方法內出現return語句,則return語句將會結束該方法,緊跟著循環也就結束。與continue和break不同的是,return將直接結束整個方法,不管這個return處于多少層循環之內。例如:

2.3.8 Java中的基本數據類型有哪些

題面解析:本題通常出現在面試中,考官提問該問題主要是想考查應聘者對基本數據類型的熟悉程度。數據類型是Java最基礎的知識,只有掌握了基礎知識,才能在以后的開發工作中應用自如。

解析過程:Java中的基本數據類型可以分為整數類型、浮點數類型、字符類型和布爾類型四種。

1.整數類型

1)byte

byte是數據類型為8位、有符號、以二進制補碼表示的整數,用于表示最小數據單位;取值范圍-27~27-1,其中默認值為0。

2)short

short是數據類型為16位、有符號、以二進制補碼表示的整數;取值范圍-215~215-1,其中默認值為0。

3)int

int是數據類型為32位、有符號、以二進制補碼表示的整數;取值范圍-231~231-1,其中默認值為0;一般整型變量默認為int類型。

4)long

long是數據類型為64位、有符號、以二進制補碼表示的整數;取值范圍-263~263-1,其中默認值為0;long主要使用在需要較大整數的系統上。

2.浮點數類型

1)float

float是數據類型為單精度、32位、符合IEEE 754標準的浮點數,其中默認值為0.0f;浮點數不能用來表示精確的值。

2)double

double是數據類型為雙精度、64位、符合IEEE 754標準的浮點數,其中默認值為0.0d;浮點數的默認類型為double類型,double類型同樣不能表示精確的值。

3.字符類型

字符(char)類型是一個單一的16位的Unicode字符;取值范圍為\u0000(0)~\uffff(65 535);char數據類型可以儲存任何字符,但需要注意不能為0個字符。

4.布爾類型

布爾(boolean)數據類型表示一位的信息;boolean數據類型只有true和false兩個值,只作為一種標志來記錄true/false的情況,其中默認值為false。

2.3.9 Java中this的用法

題面解析:本題不僅會出現在筆試中,而且在以后的開發過程中也會經常遇到。因此掌握this的用法是非常重要的。

解析過程:this在類中代表當前對象,可以通過this關鍵字完成當前對象的成員屬性、成員方法和構造方法的調用。

Java的關鍵字this只能用于方法體內。當一個對象創建后,Java虛擬機就會給這個對象分配一個引用自身的指針,這個指針的名字就是this。因此,this只能在類中的非靜態方法中使用,靜態方法和靜態的代碼塊中絕對不能出現this,并且this只和特定的對象關聯,而不和類關聯,同一個類的不同對象有不同的this。

那么什么時候使用this呢?

當在定義類中的方法時,如果需要調用該類對象,就可以用this來表示這個對象。

this的作用:

(1)表示對當前對象的引用。

(2)表示用類的成員變量,而非函數參數。

(3)用于在構造方法中引用滿足指定參數類型的構造方法,只能引用一個構造方法且必須位于開始的位置。

2.3.10 接口和抽象類

試題題面:接口是否可以繼承接口?抽象類是否可以實現接口?抽象類是否可以繼承實體類?

題面解析:本題屬于在筆試中高頻出現的問題之一,主要考查關于接口和抽象類的知識點,在解答本題之前需要了解什么是接口、什么是抽象類、什么是抽象方法,同時還需要把接口和抽象類區分開來,以防混淆。

解析過程:

1)接口

接口屬于一種約束形式,只包括成員定義,不包含成員實現的內容。

2)抽象類

抽象類主要是針對看上去不同,但是本質上相同的具體概念的抽象。抽象類不能用來實例化對象,聲明抽象類的唯一目的是為了將來對該類進行擴充。一個類不能同時被abstract和final修飾。如果一個類包含抽象方法,那么該類一定要聲明為抽象類,否則將出現編譯錯誤。

3)抽象方法

抽象方法是指一些只有方法聲明而沒有具體方法體的方法。抽象方法一般存在于抽象或接口中。抽象方法不能被聲明成final和static類型;任何繼承抽象類的子類必須實現父類的所有抽象方法,除非該子類也是抽象類;如果一個類包含若干個抽象方法,那么該類必須聲明為抽象類,但抽象類可以不包含抽象方法;抽象方法的聲明以分號結尾。

(1)接口可以繼承(extends)接口。通過關鍵字extends聲明一個接口是另一個接口的子接口。由于接口中的方法和常量都是public,子接口將繼承父接口中的全部方法和常量。例如:

    public interface InterfaceA{
    }
    interface InterfaceB extends InterfaceA{
    }

(2)抽象類可以實現(implements)接口。當一個類聲明實現一個接口而沒有實現接口中所有的方法,那么這個類必須是抽象類,即abstract類。例如:

    public interface InterfaceA{
    }
    abstract class TestA implements InterfaceA{
    }

(3)抽象類可以繼承(extends)實體類,但前提是實體類必須有明確的構造函數。例如:

    public class TestA{
    }
    abstract class TestB extends TestA{
    }
主站蜘蛛池模板: 富锦市| 象山县| 福海县| 中方县| 太仆寺旗| 沾化县| 安平县| 铜川市| 唐山市| 滨海县| 吉水县| 德令哈市| 咸宁市| 淅川县| 遂溪县| 贡觉县| 安康市| 邢台市| 临西县| 保山市| 浦江县| 屯留县| 宁晋县| 台中市| 蓝山县| 开封市| 富源县| 丰都县| 五大连池市| 静宁县| 若尔盖县| 新闻| 从江县| 柏乡县| 宣化县| 汝城县| 方城县| 尼勒克县| 额济纳旗| 将乐县| 陆丰市|