Java面試問題筆記 (2018年)_第1頁
Java面試問題筆記 (2018年)_第2頁
Java面試問題筆記 (2018年)_第3頁
Java面試問題筆記 (2018年)_第4頁
Java面試問題筆記 (2018年)_第5頁
已閱讀5頁,還剩219頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Java面試問題

DONG

TableofContents

介紹

Java

請(qǐng)說一說Java

Java為什么是高效的?

列舉出2個(gè)IDE

面向?qū)ο蟮奶卣饔心男┓矫?/p>

JDKJREJVM

什么是對(duì)象(Object)?

一個(gè)類是由哪些變量構(gòu)成的

靜態(tài)變量和實(shí)例變量的區(qū)別?

封裝Encapsulation

多態(tài)Polymorphism

構(gòu)造器是否可以被override

接口Interface

接口和抽象的區(qū)別

基礎(chǔ)概念題

基礎(chǔ)程序題

super關(guān)鍵詞

super程序題

this程序題

抽象abstract

abstract相關(guān)問題

this()和super()在構(gòu)造體里怎么用?

Static關(guān)鍵字

Static相關(guān)問題

Singleton單例模式

hashcode和equal

==和equal的區(qū)另Ll

所有類的基類是哪個(gè)類?

Java支持多繼承嗎?

Path與Classpath?

反射機(jī)制

final關(guān)鍵字

一個(gè).java源文件是否可以包含多個(gè)類

&與&&

int與integer

integer通過==比較

作用域的區(qū)別

異常

error和exception?

Checked異常與Runtime異常

異常概念題

把對(duì)象聲明成異常

處理異常的方法

每一個(gè)try都必須有一個(gè)catch嗎?

try模塊里的return

final,finally,finalize的區(qū)另lj

Programme

輸出問題1

GabageCollection

heap和stack

GC就一定能保證內(nèi)存不溢出嗎?

字節(jié)流與字符流

Collection

ArrayList和Vector

HashMap和Hashtable

HashMapHashTableLinkedHashMapTreeMap

Collection相關(guān)問題

Multi-Thread

sleep。和wait。的區(qū)別

同步synchronized

如何實(shí)現(xiàn)muliti-thread?

Transient關(guān)鍵字

preemptivescheduling和timeslicing?

一個(gè)線程的初始狀態(tài)是什么?

synchronizedmethod和synchronizedstatement?

守護(hù)線程daemonthread?

所有的線程都必須實(shí)現(xiàn)哪個(gè)方法?

VisitorPattern

Problemonchain

字符串基礎(chǔ)問題

StringBuffcr相關(guān)問題

數(shù)組相關(guān)問題

序歹U化serialization

如何序列化一個(gè)對(duì)象到一個(gè)文件?

必須實(shí)現(xiàn)Serializable接口的哪個(gè)方法?

如何控制serialization的過程?

什么情況下要使用序列化?

Externalizable接口?

序列化時(shí)引用的處理?

序列化時(shí)要注意什么?

序列化時(shí)static域的處理?

InitializationandCleanup

JavaDataTypes

Run-TimeDataAreas

J2EE

什么是J2EE?

J2EE應(yīng)用的四個(gè)部分?

Whatdoesapplicationclientmodulecontain?

Whatdoeswebmodulecontain?

J2EE客戶端有哪些類型

Hibernate是什么??

什么是事務(wù)-transaction

什么是servlet?

創(chuàng)建servlet

Servlet必須實(shí)現(xiàn)什么接口?

Servlet生命周期?

JSP

JSP的生命周期?

JSP語法

JSPActions?

JSPtranslation?

Ear,Jar和War文件?

URI和URL?

DAO

Spring

什么是Spring?

使用spring的好處?

Spring都有哪些模塊?

什么是Spring的配置文件?

什么是依賴注入一DependencyInjection?

IoC的類型?

你更傾向于哪種DI

IoC有什么好處?

IoCcontainer是什么?

IoC容器的類型?

ApplicationCoctext的實(shí)現(xiàn)都有哪些?

BeanFactory與ApplicationCoctext?

什么是bean?

都有哪些beanscope?

Singletonbean是線程安全的嗎?

說下Boan的生命周期

什么是基于注釋的容器配置?

如何注入JavaCollection?

什么是自動(dòng)裝配

什么是AOP?

通知的類型?

Joinpoint?

Pointcut?

Introduction?

HowdoyouprovideconfigurationmetadatatotheSpringContainer?

Howdoaddabeaninspringapplication?

CanyouinjectnullandemptystringvaluesinSpring?

@Autowired@Inject@Resource

Hibernate

getand10ad

什么是SessionFactory?

SessionFactory是線程安全的嗎?

什么是Session?

sorted與orderedcollection

Whatisthefileoxtensionusedforhibernatemappingfile?

hibernate的三種狀態(tài)

Linux

查找文件

列出文件列表

SQL

設(shè)計(jì)一對(duì)一

設(shè)計(jì)一對(duì)多

設(shè)計(jì)多對(duì)多

都使用過哪些join?

innerjoin

Left/Rightjoin

Fulljoin

合并的問題

Unionall?

Where和Having

通酉己符wildcard?

Scrum

Scrum中的三大角色

What'ssprint?

Howtoscrum

Continuousintegration

Statement和preparedstatement?

Callablestatement

StoredProcedureandhowdoyoucallitinJDBC?

WhatdoestheClass.forNamc("MyClass")do?

ConnectionPooling?

WhatarethestepsintheJDBCconnection?

目金錄

介紹1.1

Java1.2

請(qǐng)說一說Java1.2.1

Java為什么是高效的?1.2.1.1

列舉出2個(gè)IDE1.2.1.2

面向?qū)ο蟮奶卣饔心男┓矫?.2.1.3

JDKJREJVM1.2.2

什么是對(duì)象(Object)?1.2.3

一個(gè)類是由哪些變量構(gòu)成的1.2.3.1

靜態(tài)變量和實(shí)例變量的區(qū)別?1.2.3.2

封裝Encapsulation1.2.4

多態(tài)Polymorphism1.2.5

構(gòu)造器是否可以被override1.2.5.1

接口Interface1.2.6

接口和抽象的區(qū)別1.2.6.1

基礎(chǔ)概念題1.2.6.2

基礎(chǔ)程序題1.2.6.3

super關(guān)鍵詞1.2.6.4

super程序題1.2.6.5

this程序題1.2.6.6

抽象abstract1.2.6.7

abstract相關(guān)問題1.2.6.8

this。和super。在構(gòu)造體里怎么用?1.2.6.9

Static關(guān)鍵字1.2.7

Static相關(guān)問題1.2.7.1

Singleton單例模式1.2.8

hashcode和equal1.2.9

==和equal的區(qū)別1.2.9.1

所有類的基類是哪個(gè)類?1.2.10

Java支持多繼承嗎?1.2.11

Path與Classpath?1.2.12

反射機(jī)制1.2.13

final關(guān)鍵字1.2.14

一個(gè).java源文件是否可以包含多個(gè)類1.2.15

&與&&1.2.16

int與integer1.2.17

integer通過==比較1.2.17.1

作用域的區(qū)別1.2.18

異常1.2.19

error和exception?1.2.19.1

Checked異常與Runtime異常1.2.19.2

異常概念題1.2.19.3

把對(duì)象聲明成異常L2.19.4

處理異常的方法1.2.19.5

每一個(gè)try者B必須有一個(gè)catch嗎?1.2.19.6

try模塊里的return1.2.19.7

final,finally,finalize的區(qū)另U1.2.20

Programme1.2.21

輸出問題11.2.21.1

GabageCollection1.2.22

heap和stack1.2.22.1

GC就一定能保證內(nèi)存不溢出嗎?1.2.22.2

字節(jié)流與字符流1.2.23

Collection1.2.24

ArrayList和Vector1.2.24.1

HashMap和Hashtable1.2.24.2

HashMapHashTableLinkedHashMapTreeMap1.2.24.3

Collection相關(guān)問題1.2.24.4

Multi-Thread1.2.25

sleep。和wait。的區(qū)別1.2.25.1

同步synchronized1.2.25.2

如何實(shí)現(xiàn)muliti-thread?1.2.25.3

Transient關(guān)鍵字1.2.25.4

preemptiveschoduling和timeslicing?1.2.25.5

一個(gè)線程的初始狀態(tài)是什么?1.2.25.6

synchronizedmethod和synchronizedstatement?

守護(hù)線程daemonthread?1.2.25.8

所有的線程都必須實(shí)現(xiàn)哪個(gè)方法?1.2.25.9

VisitorPattern1.2.26

Problemonchain1.2.27

字符串基礎(chǔ)問題1.2.27.1

StringBuffcr相關(guān)問題1.2.27.2

數(shù)組相關(guān)問題

序列化serialization1.2.28

如何序列化一個(gè)對(duì)象到一個(gè)文件?1.2.28.1

必須實(shí)現(xiàn)Serializable接口的哪個(gè)方法?

如何控制serialization的過程?1.2.28.3

什么情況下要使用序列化?1.2.28.4

Externalizable接口?1.2.28.5

序列化時(shí)引用的處理?1.2.28.6

序列化時(shí)要注意什么?1.2.28.7

序列化時(shí)static域的處理?1.2.28.8

InitializationandCleanup1.2.29

JavaDataTypes1.2.30

Run-TimeDataAreas1.2.31

J2EE1.3

什么是J2EE?1.3.1

J2EE應(yīng)用的四個(gè)部分?1.3.2

中hatdoesapplicationclientmodulecontain?1.3.2.1

Whatdoeswebmodulecontain?1.3.2.2

J2EE客戶端有哪些類型1.3.3

Hibernate是什么??1.3.4

什么是事務(wù)-transaction1.3.5

什么是servlet?1.3.6

創(chuàng)建servlet1.3.6.1

Servlet必須實(shí)現(xiàn)什么接口?1.3.6.2

Servlet生命周期?1.3.6.3

JSP1.3.7

JSP的生命周期?1.3.7.1

JSP語法1.3.7.2

JSPdeclarations?1.3.7.2.1

JSPexpressions?1.3.7.2.2

JSPDirectives?1.3.7.2.3

Typesofdirectivetags?1.3.7.2.3.1

and<%@includefile二,?,>?1.3.7.2.3.1.1

注釋的類型1.3.7.2.4

JSPActions?1.3.7.3

和response.sondRcdirect(url)?1.3.7.3.1

Scopeforthe<jsp:useBean>tag?-1.3.7.3.2

JSPtranslation?

Ear,Jar和War文件?1.3.8

URI和URL?1.3.9

DAO1.3.10

Spring1.4

什么是Spring?1.4.1

使用spring的好處?1.4.2

Spring都有哪些模塊?1.4.3

什么是Spring的配置文件?1.4.4

什么是依賴注入一DependencyInjection?1.4.5

IoC的類型?1.4.5.1

你更傾向于哪種DI1.4.5.2

IoC有什么好處?1.4.5.3

IoCcontainer是什么?1.4.6

IoC容器的類型?1.4.6.1

ApplicationContext的實(shí)現(xiàn)都有哪些?1.4.6.2

BeanFactory與ApplicationContext?1.4.6.3

什么是bean?1.4.7

都有哪些beanscope?1.4.7.1

Singletonbean是線程安全的嗎?1.4.7.2

說EBean的生命周期1.4.7.3

什么是基于注釋的容器配置?L4.7.4

如何注入JavaCollection?1.4.7.5

什么是自動(dòng)裝配1.4.8

什么是A0P?1.4.9

通知的類型?1.4.9.1

Joinpoint?1.4.9.2

Pointcut?1.4.9.3

Introduction?1.4.9.4

Whatdocsabeandefinitioncontain?1.4.10

HowdoyouprovideconfigurationmetadatatotheSpringContainer?1.4.11

Howdoaddabeaninspringapplication?1.4.12

WhatareinnerbeansinSpring?1.4.13

HowcanyouinjectJavaCollectioninSpring?1.4.14

Whatarethelimitationswithautowiring?1.4.15

CanyouinjectnullandemptystringvaluesinSpring?1.4.16

@Autowired@Inject?Resource1.4.17

Ilibcrnato1.5

getandload1.5.1

什么是ScssionFactory?1.5.2

SessionFactory是線程安全的嗎?1.5.2.1

什么是Session?1.5.2.2

sorted與orderedcollection1.5.3

Whatisthefileextensionusedforhibernatemappingfile?1.5.4

hibernate的三種狀態(tài)1.5.5

Linux1.6

查找文件1.6.1

列出文件列表1.6.2

SQL1.7

設(shè)^一^對(duì)一1.7.1

設(shè)計(jì)一對(duì)多1.7.2

設(shè)計(jì)多對(duì)多1.7.3

都使用過哪些join?1.7.4

innerjoin1.7.4.1

Left/Rightjoin1.7.4.2

Fulljoin1.7.4.3

合并的問題1.7.5

Unionall?1.7.5.1

Where和Having1.7.6

通配符wildcard?1.7.7

Scrum1.8

Scrum中的三大角色1.8.1

甲hat'ssprint?1.8.2

Howtoscrum1.8.3

Continuousintegration1.9

JDBC1.10

Statement和preparedstatomcnt?1.10.1

Callablestatement1.10.1.1

StoredProcedureandhowdoyoucallitinJDBC?1.10.2

WhatdoesthoClass.forName(〃MyClass〃)do?1.10.3

ConnectionPooling?1.10.4

WhatarethestepsintheJDBCconnection?1.10.5

Java面試筆記

我第一次pr

這本書其實(shí)是我的一本筆記(還在整理中).我是也是剛找到工作.這本筆記主要記錄了

我之前面試遇到的問題以及我在網(wǎng)上整理的一些資料主要是面向junior級(jí)別的就是我

們這些小菜鳥啦~

目前只有我一個(gè)人希望大家都能加入進(jìn)來一起貢獻(xiàn)或者是指出錯(cuò)誤

如果有確實(shí)幫助到大家可以進(jìn)我的源代碼在右上角star一下下:)

Gitbook地址

Github托管地址

如何貢獻(xiàn)

任何問題都?xì)g迎直接聯(lián)系我dongchuan55@QQ526402328

因?yàn)楝F(xiàn)在gitbook支持在線編輯功能,類似于officeword.所以想要貢獻(xiàn)的同學(xué)可以

直接聯(lián)系我開權(quán)限!

許可證

該項(xiàng)目采用知識(shí)共享署名-相同方式共享4.0國際許可協(xié)議進(jìn)行許.傳播此文檔時(shí)請(qǐng)注

意遵循以上許可協(xié)議.關(guān)于本許可證的更多詳情可參考http循/creat可ecommons.org/li

censes/by-sa/4.0/

Java

第一部分是Java的基礎(chǔ)面試題補(bǔ)充ing

說一說Java

Sun公司在1995創(chuàng)建

Java的一些特點(diǎn)?

?ObjectOriented面向?qū)ο?/p>

?PlatformIndependent平臺(tái)獨(dú)立

?Interpreted解釋性語言

?Multi-threaded多線程

但是Java最重要的特點(diǎn)是平臺(tái)獨(dú)立

平臺(tái)獨(dú)立意味著我們可以在一個(gè)系統(tǒng)編譯它然后在另外一個(gè)系統(tǒng)使用它

PS:有一些中文的博客會(huì)說java也是編譯性語言因?yàn)閲鴥?nèi)博客都是你抄我我抄你所

以你懂的當(dāng)然最好就是給出編譯混合解釋性這個(gè)說法然后給出自己的理解我自己在國

外面試的時(shí)候也問了幾個(gè)面試官關(guān)于這個(gè)問題都說解釋性語言是最準(zhǔn)確的.

Java為什么是高效的(HighPerformanc

e)?

因?yàn)镴ava使用Just-In-Time(即時(shí))編譯器.

把java字節(jié)碼直接轉(zhuǎn)換成可以直接發(fā)送給處理器的指令的程序.

列舉出2個(gè)IDE

Netbeans,Eclipse,etc.

面向?qū)ο蟮奶卣饔心男┓矫?/p>

?封裝

讓變量和訪問這個(gè)變量的方法放在一起,將一個(gè)類中的成員變量全部定義成私有的,只有

這個(gè)類自己的方法才可以訪問到這些成員變量

?抽象

聲明方法的存在而不去實(shí)現(xiàn)它的類被叫做抽象類

?繼承

繼承是子類自動(dòng)共享父類數(shù)據(jù)和方法的機(jī)制,這是類之間的一種關(guān)系,提高了軟件的可重

用性和可擴(kuò)展性

?多態(tài)

多態(tài)就是指一個(gè)變量,一個(gè)方法或者一個(gè)對(duì)象可以有不同的形式.

JDKJREJVM?

?解釋它們的區(qū)別

?為什么JVM不是平臺(tái)獨(dú)立的

JDK

JavaDevelopmentKit用作開發(fā),包含了JRE,編譯器和其他的工具(比如:JavaDoc,Ja

va調(diào)試器),可以讓開發(fā)者開發(fā)、編譯、執(zhí)行Java應(yīng)用程序.

JRE

Java運(yùn)行時(shí)環(huán)境是將要執(zhí)行Java程序的Java虛擬機(jī),可以想象成它是一個(gè)容器,JVM

是它的內(nèi)容.

JRE=JVM+JavaPackagesClasses(likeutil,math,lang,awt,swingetc)+runtim

elibraries.

JVM

Javavirtualmachine(Java虛擬機(jī))是一個(gè)可以執(zhí)行Java編譯產(chǎn)生的Javaclass

文件(bytecode)的虛擬機(jī)進(jìn)程,是一個(gè)純的運(yùn)行環(huán)境.

JVM不是平臺(tái)獨(dú)立的

Java被設(shè)計(jì)成允許應(yīng)用程序可以運(yùn)行在任意的平臺(tái),而不需要程序員為每一個(gè)平臺(tái)單獨(dú)重

寫或者是重新編譯.Java虛擬機(jī)讓這個(gè)變?yōu)榭赡?,因?yàn)樗赖讓佑布脚_(tái)的指令長(zhǎng)度和

其他特性.

Reference

DiffbetweenTREandJVM

什么是對(duì)象(Object)?

?對(duì)象是程序運(yùn)行時(shí)的實(shí)體

?它的狀態(tài)存儲(chǔ)在fields(也就是變量)

?行為是通過方法(method)實(shí)現(xiàn)的

?方法上操作對(duì)象的內(nèi)部的狀態(tài)

?方法是對(duì)象對(duì)對(duì)象的通信的主要手段

一個(gè)類是由哪些變量構(gòu)成的?

?Localvariable本地變量

?instancevariables實(shí)例變量

?classvariables類變量

Localvariable

在方法體,構(gòu)造體內(nèi)部定義的變量在方法結(jié)束的時(shí)候就被摧毀

instancevariables

在類里但是不在方法里在類被載入的時(shí)候被實(shí)例化

classvariables

在類里但在方法外,加了static關(guān)鍵字.也可以叫做靜態(tài)變量

靜態(tài)變量和實(shí)例變量的區(qū)別?

?在語法定義上的區(qū)別:靜態(tài)變量前要加static關(guān)鍵字,而實(shí)例變量前則不加。

?在程序運(yùn)行時(shí)的區(qū)別:實(shí)例變量屬于某個(gè)對(duì)象的屬性,必須創(chuàng)建了實(shí)例對(duì)象

(比如new一個(gè)),其中的實(shí)例變量才會(huì)被分配空間,才能使用這個(gè)實(shí)例變

量.靜態(tài)變量不屬于某個(gè)實(shí)例對(duì)象,而是屬于類,所以也稱為類變量,只

要程序加載了類的字節(jié)碼,不用創(chuàng)建任何實(shí)例對(duì)象,靜態(tài)變量就會(huì)被分配空

間,靜態(tài)變量就可以被使用了.

?總之,實(shí)例變量必須創(chuàng)建對(duì)象后才可以通過這個(gè)對(duì)象來使用,靜態(tài)變量則可以

直接使用類名來引用.

例如,對(duì)于下面的程序,無論創(chuàng)建多少個(gè)實(shí)例對(duì)象,永遠(yuǎn)都只分配了一個(gè)staticVar變量,

并且每創(chuàng)建一個(gè)實(shí)例對(duì)象,這個(gè)staticVar就會(huì)加;但是,每創(chuàng)建一個(gè)實(shí)例對(duì)象,就會(huì)分

配一個(gè)instanceVar,即可能分配多個(gè)instanceVar,并且每個(gè)instanceVar的值都只自加

了1次.

publicclassVariantTest{publicstaticintstaticVar=0;publicintinstanceVar=0;

publicVariantTest(){staticVar++;instanceVar++;System,ou

t.printin("staticVar:"+staticVar+”,instanceVar="+instanceVar);}}

封裝Encapsulation

?使一個(gè)類的變量private

?提供public方法來調(diào)用這些變量.所以外部類是進(jìn)不去的.這些變量被隱藏

在類里了.只能通過已經(jīng)定義的pulic方法調(diào)用.

好處

當(dāng)我們修改我們的實(shí)現(xiàn)的代碼時(shí),不會(huì)破壞其他調(diào)用我們這部分代碼的代碼.可維護(hù)性,

靈活性和可擴(kuò)展

多態(tài)Polymorphism

多態(tài)就是指一個(gè)變量,一個(gè)方法或者一個(gè)對(duì)象可以有不同的形式.

多態(tài)主要分為

?重載overloading

就是一個(gè)類里有兩個(gè)或更多的函數(shù),名字相同而他們的參數(shù)不同.

?覆寫overriding

是發(fā)生在子類中!也就是說必須有繼承的情況下才有覆蓋發(fā)生.當(dāng)你繼承父類的方法時(shí),如果你感到哪個(gè)方法不爽,功

能要變,那就把那個(gè)函數(shù)在子類中重新實(shí)現(xiàn)一遍.

例子

重載靜態(tài)捆綁(staticbinding)是Compile時(shí)的多態(tài)

EmployeeFactory.create(StringfirstName,StringlastName){...}EmployeeEactory.create(Integerid,String

lastName){...}

覆寫動(dòng)態(tài)捆綁(dynamicbinding)是runtime多態(tài)

publicclassAnimal{publicvoidmakeNoise(){System,out.printIn("Somesound

");}}classDogextendsAnimal{publicvoidmakeNoise0{System,out.println(z/Bar

k");}}classCatextendsAnimal{publicvoidmakeNoise0{System,out.printin(,zMe

awoo");}}publicclassDemo{publicstaticvoidmain(String[]args){Animalal=n

ewCat();al.makeNoise();//PrintsMeowooAnimala2=newDog();a2.makeNoise

();//PrintsBark}}

構(gòu)造器是否可以被override

構(gòu)造器不能被繼承所以不能被override但可以被重載overload

接口Interface

接口是抽象方法的集合。一個(gè)類實(shí)現(xiàn)一個(gè)或多個(gè)接口,因此繼承了接口的抽象方法.

接口的特點(diǎn)

?不能實(shí)例化

?沒有構(gòu)造體

?所有方法都是抽象的(abstract).同時(shí)也是隱式的publicstatic.也就是說

聲明時(shí),可以省略publicstatic.

?只能含有聲明為finalstatic的field

接口和抽象的區(qū)別

抽象類可以有構(gòu)造方法接口不行

抽象類可以有普通成員變量接口沒有

抽象類可以有非抽象的方法接口必須全部抽象

抽象類的訪問類型都可以接口只能是publicabstract

一個(gè)類可以實(shí)現(xiàn)多個(gè)接口但只能繼承一個(gè)抽象類

基礎(chǔ)概念題

下面哪一項(xiàng)說法是正確的

1.在?個(gè)子類里,一個(gè)方法不是public就不能重載2.覆蓋一個(gè)方法只需要滿足相同的方法名和參數(shù)類型3.覆蓋一

個(gè)方法必須方法名,參數(shù)和返回類型都相同4.一個(gè)覆蓋的方法必須有相同的方法名,參數(shù)名和參數(shù)類型

答案3

覆蓋函數(shù)與被覆蓋函數(shù)只有函數(shù)體不同

下面哪一項(xiàng)說法是錯(cuò)誤的

1.重載函數(shù)的函數(shù)名必須相同2.重載函數(shù)必須在參數(shù)個(gè)數(shù)或類型上有所不同3.重載函數(shù)的返回值必須相同4.重

載函數(shù)的函數(shù)體可以不同

答案3

函數(shù)的重載與函數(shù)的返回值無關(guān)

下面哪一項(xiàng)說法是正確的

1.靜態(tài)方法不能被覆蓋2.靜態(tài)方法不能被聲明稱私有3.私有方法不能被重載4.一個(gè)重載的方法在基類中不通過

檢杳不能拋出異常

答案1

基礎(chǔ)程序題

題目一

classBase{}classAggextendsBase{publicStringgetFieldsO{Stringname="Agg”;

returnname;)}publicclassAvf{pulicstaticvoidmain(Stringargv[]){Basea=new

Agg();//here}}

下面哪個(gè)選項(xiàng)的代碼替換到〃here會(huì)調(diào)用getFields方法,使出書結(jié)果是Agg

A.System,out.println(a.getFieldsO);B.System,out.println(a.name);C.System,out.println((Base)a.getFi

eldsO);D.System.out.println(((Agg)a).getFieldsO);

答案D

Base類要引用Agg類的實(shí)例需要把Base類顯示地轉(zhuǎn)換成Agg類,然后調(diào)用Agg類中

的方法.如果a是Base類的一個(gè)實(shí)例,是不存在這個(gè)方法的,必須把a(bǔ)轉(zhuǎn)換成Agg的

一個(gè)實(shí)例

題目二

classA{publicA(){System,out.printIn("A");}}publicclassBextendsA{publi

cB(){System.out.println(*B*);}publicstaticvoidmain(String[]args){Aa=

newB();a=newA();})

輸出結(jié)果是ABA

題目三

classA{publicvoidprint(){System,out.print1n("A");}}classBextendsA{publi

cvoidprint(){System,out.printin(〃B〃);}}publicclassTest(BobjectB=new

BO;objectB.print();Aas=(A)objectB;as.print();Aasg=objectB;asg.print

0;as=newA();as.print();..}

輸出為BBBA

題目四

publicclassTest{publicstaticvoidmain(String[]args){Fatherfather=newFatherO;

Fatherchild=newChiId();System.out.printin(father.getXamc());System,out.printin(chi

Id.getName());}}classFather{publicstaticStringgetName()(return"Father

)}classChildextendsFather{publicstaticStringgetName(){return“Child

)}

輸出是FatherFather因?yàn)檫@里的方法getName是靜態(tài)的.具體執(zhí)行哪一個(gè),則要看是

由哪個(gè)類來調(diào)用的.

super關(guān)鍵詞

?調(diào)用父類(Superclass)的成員或者方法

?調(diào)用父類的構(gòu)造函數(shù)

1.調(diào)用父類(Superclass)的成員或者方法

如果你的方法覆寫一個(gè)父類成員的方法,你可以通過super關(guān)鍵字調(diào)用父類的方法.考

慮下面的父類:

publicclassSuperclass{publicvoidprintMethod(){System,out.println(z,PrintedinSu

perclass.");}}

下面是一個(gè)子類(subclass),叫做Subclass,覆寫了printMethod():

publicclassSubclassextendsSuperclass{//overridesprintMethodinSuperclasspublicvoidp

rintMethodO{super.printMethod();System,out.printIn(^PrintedinSubclass");

publicstaticvoidmain(String[]args){Subclasss=newSubclass0;s.printMethod

0;)}

輸出

PrintedinSuperclass.PrintedinSubclass

1.調(diào)用父類的構(gòu)造函數(shù)

使用super關(guān)鍵字調(diào)用父類的構(gòu)造函數(shù).下面的MountainBike類是Bicycle類的子類.

它調(diào)用了父類的構(gòu)造方法并加入了自己的初始化代碼:

pub1icMountainBike(intstartHeight,intstartCadence,intstart

Speed,intstartGear){super(startCadence,startSpeed,startGear);seatHeig

ht=startHcight;}

調(diào)用父類的構(gòu)造體必須放在第一行.

使用

super0:

或者:

super(parameterlist);

通過super(),父類的無參構(gòu)造體會(huì)被調(diào)用.通過super(parameterlist),父類對(duì)應(yīng)參

數(shù)的構(gòu)造體會(huì)被調(diào)用.

注意:構(gòu)造體如果沒有顯式的調(diào)用父類的構(gòu)造體,Java編譯器自動(dòng)調(diào)用父類的無參構(gòu)造.

如果父類沒有無參構(gòu)造,就會(huì)報(bào)錯(cuò)(compile-timeerror).

Super程序題

題目一

classBase{Base(){System,out.printin("Base");}}publicclassChecketextendsBase

{Checket(){System.out.printIn(*Checket*);super();}publicstaticvoidma

in(Stringargv[]){Checketa=newChecket();}}

輸出是什么?是compiletimeerror,super()必須放在前面.

放在前面之后,輸出為BaseChecket

題目二

importjava.util.Date;publicclassTestextendsDate{publicstaticvoidmain(String[]args)

{newTest().test();)publicvoidtest(){System,out.printIn(super.getClassO.ge

tName());}}

返回的結(jié)果是Test

因?yàn)閟uper.getClassO.getNameO調(diào)用了父類的getClassO方法,返回當(dāng)前類

如果想得到父類的名稱,應(yīng)該用如下代碼:

getClass().getSuperClass().getName()

題目三

publicabstractclassCar{Stringname="Car”;publicStringgetNamc(){returnnam

e;}publicabstractvoiddcmarre();}publicclassBextendsCar{Stringname=〃B”;

publicStringgetNamc0{returnname;}publicvoiddcmarre(){System,out.prin

tin(getName()+〃demarre^);}}publicclassCextendsB(Stringname="C〃;publicStrin

ggetName(){returnname;}publicvoiddemarreWithSuper(){System,out.printIn

(super.getName()+〃demarre*);}publicvoiddemarreNoSuper(){System,out.println(get

NameO+"demarre*);}}publicclassDextendsB{publicStringgetName(){returnnam

e;}publicvoiddemarreNoSuper(){System,out.printin(getName()+“demarre");}}

publicclassTest{publicstaticvoidmain(String[]args){Bb=newB();b.demarr

e();CarbCar=newB0;bCar.demarre();Cc=newC();c.demarre0;/

/c里并沒有定義這個(gè)函數(shù)c.demarreWithSuper();c.demarreNoSuper();Dd=newD

();d.demarre0;transfer(c);//TransferCtransfer((B)c);//TransferB

transfer(d);//TransferB)publicstaticvoidtransfer(Bb){System,out.pri

ntln("TransferB〃);b.demarre();}publicstaticvoidtransfer(Cc)

{System,out.printin("TransferC");c.demarre();}}}

輸出是BdemarreBdemarreCdemarreBdemarreCdemarreBdemarreTransferCC

demarreTransferBCdemarreTransferBBdemarre

this程序題

題目一

classTester{intvar;Tester(doublevar){this,var=(int)var};Tester(intvar){this("hello

");Tester(Strings){this();System,out.println(s);}Tester0{System,ou

t.printIn("good-bye");}}

Testert=newTester(5)的輸出是什么?

good-byehello

題目二

貌似和this無關(guān)但是很重要publicclassBase{inti;

Base(){add(l);System,out.printin(i);}voidadd(intv){i+=v;

System,out.printIn(i);}}publicclassMyBaseextendsBase{MyBaseO{System.out.print

ln("MyBase");add(2);}voidadd(intv){System.out.printlnC^MyBaseAdd");

i+=v*2;System,out.printIn(i);}}publicclassTest{publicstaticvoidmain(String[]

args){go(newMyBase());}staticvoidgo(Baseb){b.add(8);}}

輸出的結(jié)果是22

子類會(huì)首先調(diào)用父類的構(gòu)造函數(shù),在父類的構(gòu)造函數(shù)BaseO中執(zhí)行add()方法.但這個(gè)

add()方法由于是在新建MyBase對(duì)象時(shí)調(diào)用的.所以是執(zhí)行的MyBase中的add方法

在Java中,子類的構(gòu)造過程中,必須調(diào)用其父類的構(gòu)造函數(shù),是因?yàn)橛欣^承關(guān)系存在時(shí),

子類要把父類的內(nèi)容繼承下來,通過什么手段做到的?這樣:當(dāng)你new一個(gè)子類對(duì)象的

時(shí)候,必須首先要new一個(gè)父類的對(duì)像出來,這個(gè)父類對(duì)象位于子類對(duì)象的內(nèi)部,所以說,

子類對(duì)象比父類對(duì)象大,子類對(duì)象里面包含了一個(gè)父類的對(duì)象,這是內(nèi)存中真實(shí)的情況.

構(gòu)造方法是new一個(gè)對(duì)象的時(shí)候,必須要調(diào)的方法,這是規(guī)定,要new父類對(duì)象出來,那么

肯定要調(diào)用其構(gòu)造方法,所以第一個(gè)規(guī)則:子類的構(gòu)造過程中,必須調(diào)用其父類的構(gòu)造

方法

一個(gè)類,如果我們不寫構(gòu)造方法,那么編譯器會(huì)幫我們加上一個(gè)默認(rèn)的構(gòu)造方法,所謂默

認(rèn)的構(gòu)造方法,就是沒有參數(shù)的構(gòu)造方法,但是如果你自己寫了構(gòu)造方法,那么編譯器就

不會(huì)給你添加了

所以有時(shí)候當(dāng)你new一個(gè)子類對(duì)象的時(shí)候,肯定調(diào)用了子類的構(gòu)造方法,但是在子類構(gòu)造

方法中我們并沒有顯示的調(diào)用基類的構(gòu)造方法,就是沒寫,如:super();并沒有這樣寫,

但是

第二個(gè)規(guī)則:如果子類的構(gòu)造方法中沒有顯示的調(diào)用基類構(gòu)造方法,則系統(tǒng)默認(rèn)調(diào)用基類

無參數(shù)的構(gòu)造方法

注意:如果子類的構(gòu)造方法中既沒有顯示的調(diào)用基類構(gòu)造方法,而基類中又沒有默認(rèn)無參

的構(gòu)造方法,則編譯出錯(cuò),所以,通常我們需要顯示的:super(參數(shù)列表),來調(diào)用父類

有參數(shù)的構(gòu)造函數(shù)

抽象abstract

Abstract類

?不能實(shí)例化

Abstract方法

?在父類里定義抽象方法,在子類里定義這個(gè)具體的方法,所以它是抽象的.

好處

減少復(fù)雜度和提高可維護(hù)性

abstract相關(guān)問題

題目一

什么是抽象類

1.Aclasswithnomethods

2.Aclasswithnoconcretesubclasses

3.Aclasswithatleastoneundefiendmessage

4.Noneofabove

答案是4我們是可以定義一個(gè)抽象空類的

abstractclassemptyAb{}

題目二

abstractclassBase(abstractpublicvoidmyfunc();}publicclassAbsextendsBase{publicsta

ticvoidmain(Stringargv[]){Absa=newAbs();a.amethodO;}publicvoidame

thod(){System,out.printIn(^Amethod");}}

運(yùn)行的結(jié)果

1.輸出Amethod

2.Thecodewillcompilebutcomplainatruntime

3.ThecompilerwillcomplainerrorsinAbsclass

答案是3

this()和super()在構(gòu)造體里怎么用?

thisO在同一個(gè)類的構(gòu)造體被調(diào)用.this("toto","tata”,1)相當(dāng)于調(diào)用對(duì)應(yīng)參數(shù)的構(gòu)造

體.

super()用來調(diào)用父類構(gòu)造體.

Static關(guān)鍵字

Static關(guān)鍵字表明一個(gè)成員變量或者是成員方法可以在沒有所屬的類的實(shí)例的情況下直

接被訪問

聲明為static的方法有以下幾條限制:

1.僅能調(diào)用其他的static方法

2.只能訪問static變量.

3.不能以任何方式引用this或super

4,不能被覆蓋.

聲明為static的變量實(shí)質(zhì)上就是全局變量.(+final就是全局常量).當(dāng)聲明一個(gè)對(duì)象

時(shí),并不產(chǎn)生static變量的拷貝,而是該類所有的實(shí)例變量共用同一個(gè)static變量.

對(duì)于靜態(tài)類,只能用于嵌套類內(nèi)部類中。

Reference

?StaticclassinJava-GeeksforGeeks

Static相關(guān)問題

Static關(guān)鍵字是什么意思?

Static關(guān)鍵字表明一個(gè)成員變量或者是成員方法可以在沒有所屬的類的實(shí)例的情況下直

接被訪問

是否可以override一個(gè)static的方法?

不能被覆蓋.因?yàn)榉椒ǜ采w是基于運(yùn)行時(shí)動(dòng)態(tài)綁定的,而static方法是編譯時(shí)靜態(tài)綁定

的.

一個(gè)static方法內(nèi)部調(diào)用非static方法?

不可以.因?yàn)榉莝tatic方法是要與對(duì)象關(guān)聯(lián)在一起的,須創(chuàng)建一個(gè)對(duì)象的實(shí)例后,才可

以在該對(duì)象上進(jìn)行方法調(diào)用,而static方法調(diào)用時(shí)不需要?jiǎng)?chuàng)建對(duì)象,可以直接調(diào)用.也就

是說,當(dāng)一個(gè)static方法被調(diào)用時(shí),,可能還沒有創(chuàng)建任何實(shí)例對(duì)象,如果從一個(gè)stati

c方法中發(fā)出對(duì)非static方法的調(diào)用,那個(gè)非static方法是關(guān)聯(lián)到哪個(gè)對(duì)象上的呢?

這個(gè)邏輯無法成立,所以,一個(gè)static方法內(nèi)部發(fā)出對(duì)非static方法的調(diào)用.

是否可以在static環(huán)境中訪問非static變量?

同上

Singleton單例模式

Java中單例模式定義:“一個(gè)類有且僅有一個(gè)實(shí)例,并且自行實(shí)例化向整個(gè)系統(tǒng)提供?!?/p>

publicclassSingleton{privateSingletonO{//dosomething}privatestaticclas

sSingletonHolder{privatestaticfinalSingletonINSTANCE=newSingletonO;}public

sialicfinalSingletongelInslance{returnSingletonHolder.INSTANCE;}}

多選題注意

?一是單例模式的類只提供私有的構(gòu)造函數(shù)

?二是類定義中含有一個(gè)該類的靜態(tài)私有對(duì)象

?三是該類提供了一個(gè)靜態(tài)的公有的函數(shù)用于創(chuàng)建或獲取它本身的靜態(tài)私有對(duì)象。

Reference

?深入淺出單實(shí)例Singleton設(shè)計(jì)模式I酷殼-CoolShelLcn

equals()與hashcode()

Equal

如果需要比較對(duì)象的值,就需要equal方法了.看一下JDK中equal方法的實(shí)現(xiàn):

publicbooleanequals(Objectobj){return(this==obj);}

也就是說,默認(rèn)情況下比較的還是對(duì)象的地址.所以如果把對(duì)象放入Set中等操作,就需

要重寫eqaul方法了

重寫之后的equals()比較的就是對(duì)象的內(nèi)容了

hashcode

Wheninsertinganobjectintoahastableyouuseakey.Thehashcodeofthis

keyiscalculated,andusedtodeterminewheretostoretheobjectinternally.

Whenyouneedtolookupanobjectinahashtableyoualsouseakey.Thehash

codeofthiskeyiscalculatedandusedtodeterminewheretosearchfortheo

bject.

Thehashcodeonlypointstoacertain"area”(orlist,bucketetc)internally,

Sincedifferentkeyobjectscouldpotentiallyhavethesamehashcode,thehas

hcodeitselfisnoguaranteethattherightkeyisfound.Thehashtablethen

iteratesthisarea(allkeyswiththesamehashcode)andusesthekey'sequal

s()methodtofindtherightkey.Oncetherightkeyisfound,theobjectstor

edforthatkeyisreturned.

So,asyoucansee,acombinationofth

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論