- 程序員面試筆試通關寶典
- 聚慕課教育研發中心
- 5080字
- 2021-12-10 16:52:09
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{ }
- Progressive Web Apps with React
- 深入淺出WPF
- 高級C/C++編譯技術(典藏版)
- MATLAB實用教程
- 精通Scrapy網絡爬蟲
- C#程序設計基礎:教程、實驗、習題
- Mastering JavaScript Design Patterns(Second Edition)
- BIM概論及Revit精講
- Learning Vaadin 7(Second Edition)
- Spring MVC+MyBatis開發從入門到項目實踐(超值版)
- JavaScript程序設計:基礎·PHP·XML
- Getting Started with Polymer
- Backbone.js Testing
- Arduino電子設計實戰指南:零基礎篇
- 城市信息模型平臺頂層設計與實踐