




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java面试问题
DONG
TableofContents
介绍
Java
请说一说Java
Java为什么是高效的?
列举出2个IDE
面向对象的特征有哪些方面
JDKJREJVM
什么是对象(Object)?
一个类是由哪些变量构成的
静态变量和实例变量的区别?
封装Encapsulation
多态Polymorphism
构造器是否可以被override
接口Interface
接口和抽象的区别
基础概念题
基础程序题
super关键词
super程序题
this程序题
抽象abstract
abstract相关问题
this()和super()在构造体里怎么用?
Static关键字
Static相关问题
Singleton单例模式
hashcode和equal
==和equal的区另Ll
所有类的基类是哪个类?
Java支持多继承吗?
Path与Classpath?
反射机制
final关键字
一个.java源文件是否可以包含多个类
&与&&
int与integer
integer通过==比较
作用域的区别
异常
error和exception?
Checked异常与Runtime异常
异常概念题
把对象声明成异常
处理异常的方法
每一个try都必须有一个catch吗?
try模块里的return
final,finally,finalize的区另lj
Programme
输出问题1
GabageCollection
heap和stack
GC就一定能保证内存不溢出吗?
字节流与字符流
Collection
ArrayList和Vector
HashMap和Hashtable
HashMapHashTableLinkedHashMapTreeMap
Collection相关问题
Multi-Thread
sleep。和wait。的区别
同步synchronized
如何实现muliti-thread?
Transient关键字
preemptivescheduling和timeslicing?
一个线程的初始状态是什么?
synchronizedmethod和synchronizedstatement?
守护线程daemonthread?
所有的线程都必须实现哪个方法?
VisitorPattern
Problemonchain
字符串基础问题
StringBuffcr相关问题
数组相关问题
序歹U化serialization
如何序列化一个对象到一个文件?
必须实现Serializable接口的哪个方法?
如何控制serialization的过程?
什么情况下要使用序列化?
Externalizable接口?
序列化时引用的处理?
序列化时要注意什么?
序列化时static域的处理?
InitializationandCleanup
JavaDataTypes
Run-TimeDataAreas
J2EE
什么是J2EE?
J2EE应用的四个部分?
Whatdoesapplicationclientmodulecontain?
Whatdoeswebmodulecontain?
J2EE客户端有哪些类型
Hibernate是什么??
什么是事务-transaction
什么是servlet?
创建servlet
Servlet必须实现什么接口?
Servlet生命周期?
JSP
JSP的生命周期?
JSP语法
JSPActions?
JSPtranslation?
Ear,Jar和War文件?
URI和URL?
DAO
Spring
什么是Spring?
使用spring的好处?
Spring都有哪些模块?
什么是Spring的配置文件?
什么是依赖注入一DependencyInjection?
IoC的类型?
你更倾向于哪种DI
IoC有什么好处?
IoCcontainer是什么?
IoC容器的类型?
ApplicationCoctext的实现都有哪些?
BeanFactory与ApplicationCoctext?
什么是bean?
都有哪些beanscope?
Singletonbean是线程安全的吗?
说下Boan的生命周期
什么是基于注释的容器配置?
如何注入JavaCollection?
什么是自动装配
什么是AOP?
通知的类型?
Joinpoint?
Pointcut?
Introduction?
HowdoyouprovideconfigurationmetadatatotheSpringContainer?
Howdoaddabeaninspringapplication?
CanyouinjectnullandemptystringvaluesinSpring?
@Autowired@Inject@Resource
Hibernate
getand10ad
什么是SessionFactory?
SessionFactory是线程安全的吗?
什么是Session?
sorted与orderedcollection
Whatisthefileoxtensionusedforhibernatemappingfile?
hibernate的三种状态
Linux
查找文件
列出文件列表
SQL
设计一对一
设计一对多
设计多对多
都使用过哪些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
请说一说Java1.2.1
Java为什么是高效的?1.2.1.1
列举出2个IDE1.2.1.2
面向对象的特征有哪些方面1.2.1.3
JDKJREJVM1.2.2
什么是对象(Object)?1.2.3
一个类是由哪些变量构成的1.2.3.1
静态变量和实例变量的区别?1.2.3.2
封装Encapsulation1.2.4
多态Polymorphism1.2.5
构造器是否可以被override1.2.5.1
接口Interface1.2.6
接口和抽象的区别1.2.6.1
基础概念题1.2.6.2
基础程序题1.2.6.3
super关键词1.2.6.4
super程序题1.2.6.5
this程序题1.2.6.6
抽象abstract1.2.6.7
abstract相关问题1.2.6.8
this。和super。在构造体里怎么用?1.2.6.9
Static关键字1.2.7
Static相关问题1.2.7.1
Singleton单例模式1.2.8
hashcode和equal1.2.9
==和equal的区别1.2.9.1
所有类的基类是哪个类?1.2.10
Java支持多继承吗?1.2.11
Path与Classpath?1.2.12
反射机制1.2.13
final关键字1.2.14
一个.java源文件是否可以包含多个类1.2.15
&与&&1.2.16
int与integer1.2.17
integer通过==比较1.2.17.1
作用域的区别1.2.18
异常1.2.19
error和exception?1.2.19.1
Checked异常与Runtime异常1.2.19.2
异常概念题1.2.19.3
把对象声明成异常L2.19.4
处理异常的方法1.2.19.5
每一个try者B必须有一个catch吗?1.2.19.6
try模块里的return1.2.19.7
final,finally,finalize的区另U1.2.20
Programme1.2.21
输出问题11.2.21.1
GabageCollection1.2.22
heap和stack1.2.22.1
GC就一定能保证内存不溢出吗?1.2.22.2
字节流与字符流1.2.23
Collection1.2.24
ArrayList和Vector1.2.24.1
HashMap和Hashtable1.2.24.2
HashMapHashTableLinkedHashMapTreeMap1.2.24.3
Collection相关问题1.2.24.4
Multi-Thread1.2.25
sleep。和wait。的区别1.2.25.1
同步synchronized1.2.25.2
如何实现muliti-thread?1.2.25.3
Transient关键字1.2.25.4
preemptiveschoduling和timeslicing?1.2.25.5
一个线程的初始状态是什么?1.2.25.6
synchronizedmethod和synchronizedstatement?
守护线程daemonthread?1.2.25.8
所有的线程都必须实现哪个方法?1.2.25.9
VisitorPattern1.2.26
Problemonchain1.2.27
字符串基础问题1.2.27.1
StringBuffcr相关问题1.2.27.2
数组相关问题
序列化serialization1.2.28
如何序列化一个对象到一个文件?1.2.28.1
必须实现Serializable接口的哪个方法?
如何控制serialization的过程?1.2.28.3
什么情况下要使用序列化?1.2.28.4
Externalizable接口?1.2.28.5
序列化时引用的处理?1.2.28.6
序列化时要注意什么?1.2.28.7
序列化时static域的处理?1.2.28.8
InitializationandCleanup1.2.29
JavaDataTypes1.2.30
Run-TimeDataAreas1.2.31
J2EE1.3
什么是J2EE?1.3.1
J2EE应用的四个部分?1.3.2
中hatdoesapplicationclientmodulecontain?1.3.2.1
Whatdoeswebmodulecontain?1.3.2.2
J2EE客户端有哪些类型1.3.3
Hibernate是什么??1.3.4
什么是事务-transaction1.3.5
什么是servlet?1.3.6
创建servlet1.3.6.1
Servlet必须实现什么接口?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的实现都有哪些?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
什么是自动装配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的三种状态1.5.5
Linux1.6
查找文件1.6.1
列出文件列表1.6.2
SQL1.7
设^一^对一1.7.1
设计一对多1.7.2
设计多对多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
这本书其实是我的一本笔记(还在整理中).我是也是刚找到工作.这本笔记主要记录了
我之前面试遇到的问题以及我在网上整理的一些资料主要是面向junior级别的就是我
们这些小菜鸟啦~
目前只有我一个人希望大家都能加入进来一起贡献或者是指出错误
如果有确实帮助到大家可以进我的源代码在右上角star一下下:)
Gitbook地址
Github托管地址
如何贡献
任何问题都欢迎直接联系我dongchuan55@QQ526402328
因为现在gitbook支持在线编辑功能,类似于officeword.所以想要贡献的同学可以
直接联系我开权限!
许可证
该项目采用知识共享署名-相同方式共享4.0国际许可协议进行许.传播此文档时请注
意遵循以上许可协议.关于本许可证的更多详情可参考http循/creat可ecommons.org/li
censes/by-sa/4.0/
Java
第一部分是Java的基础面试题补充ing
说一说Java
Sun公司在1995创建
Java的一些特点?
•ObjectOriented面向对象
•PlatformIndependent平台独立
•Interpreted解释性语言
•Multi-threaded多线程
但是Java最重要的特点是平台独立
平台独立意味着我们可以在一个系统编译它然后在另外一个系统使用它
PS:有一些中文的博客会说java也是编译性语言因为国内博客都是你抄我我抄你所
以你懂的当然最好就是给出编译混合解释性这个说法然后给出自己的理解我自己在国
外面试的时候也问了几个面试官关于这个问题都说解释性语言是最准确的.
Java为什么是高效的(HighPerformanc
e)?
因为Java使用Just-In-Time(即时)编译器.
把java字节码直接转换成可以直接发送给处理器的指令的程序.
列举出2个IDE
Netbeans,Eclipse,etc.
面向对象的特征有哪些方面
•封装
让变量和访问这个变量的方法放在一起,将一个类中的成员变量全部定义成私有的,只有
这个类自己的方法才可以访问到这些成员变量
•抽象
声明方法的存在而不去实现它的类被叫做抽象类
•继承
继承是子类自动共享父类数据和方法的机制,这是类之间的一种关系,提高了软件的可重
用性和可扩展性
・多态
多态就是指一个变量,一个方法或者一个对象可以有不同的形式.
JDKJREJVM?
•解释它们的区别
•为什么JVM不是平台独立的
JDK
JavaDevelopmentKit用作开发,包含了JRE,编译器和其他的工具(比如:JavaDoc,Ja
va调试器),可以让开发者开发、编译、执行Java应用程序.
JRE
Java运行时环境是将要执行Java程序的Java虚拟机,可以想象成它是一个容器,JVM
是它的内容.
JRE=JVM+JavaPackagesClasses(likeutil,math,lang,awt,swingetc)+runtim
elibraries.
JVM
Javavirtualmachine(Java虚拟机)是一个可以执行Java编译产生的Javaclass
文件(bytecode)的虚拟机进程,是一个纯的运行环境.
JVM不是平台独立的
Java被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重
写或者是重新编译.Java虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和
其他特性.
Reference
DiffbetweenTREandJVM
什么是对象(Object)?
•对象是程序运行时的实体
・它的状态存储在fields(也就是变量)
•行为是通过方法(method)实现的
・方法上操作对象的内部的状态
・方法是对象对对象的通信的主要手段
一个类是由哪些变量构成的?
•Localvariable本地变量
•instancevariables实例变量
•classvariables类变量
Localvariable
在方法体,构造体内部定义的变量在方法结束的时候就被摧毁
instancevariables
在类里但是不在方法里在类被载入的时候被实例化
classvariables
在类里但在方法外,加了static关键字.也可以叫做静态变量
静态变量和实例变量的区别?
•在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。
•在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象
(比如new一个),其中的实例变量才会被分配空间,才能使用这个实例变
量.静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只
要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空
间,静态变量就可以被使用了.
•总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以
直接使用类名来引用.
例如,对于下面的程序,无论创建多少个实例对象,永远都只分配了一个staticVar变量,
并且每创建一个实例对象,这个staticVar就会加;但是,每创建一个实例对象,就会分
配一个instanceVar,即可能分配多个instanceVar,并且每个instanceVar的值都只自加
了1次.
publicclassVariantTest{publicstaticintstaticVar=0;publicintinstanceVar=0;
publicVariantTest(){staticVar++;instanceVar++;System,ou
t.printin("staticVar:"+staticVar+”,instanceVar="+instanceVar);}}
封装Encapsulation
•使一个类的变量private
•提供public方法来调用这些变量.所以外部类是进不去的.这些变量被隐藏
在类里了.只能通过已经定义的pulic方法调用.
好处
当我们修改我们的实现的代码时,不会破坏其他调用我们这部分代码的代码.可维护性,
灵活性和可扩展
多态Polymorphism
多态就是指一个变量,一个方法或者一个对象可以有不同的形式.
多态主要分为
•重载overloading
就是一个类里有两个或更多的函数,名字相同而他们的参数不同.
•覆写overriding
是发生在子类中!也就是说必须有继承的情况下才有覆盖发生.当你继承父类的方法时,如果你感到哪个方法不爽,功
能要变,那就把那个函数在子类中重新实现一遍.
例子
重载静态捆绑(staticbinding)是Compile时的多态
EmployeeFactory.create(StringfirstName,StringlastName){...}EmployeeEactory.create(Integerid,String
lastName){...}
覆写动态捆绑(dynamicbinding)是runtime多态
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}}
构造器是否可以被override
构造器不能被继承所以不能被override但可以被重载overload
接口Interface
接口是抽象方法的集合。一个类实现一个或多个接口,因此继承了接口的抽象方法.
接口的特点
•不能实例化
•没有构造体
•所有方法都是抽象的(abstract).同时也是隐式的publicstatic.也就是说
声明时,可以省略publicstatic.
•只能含有声明为finalstatic的field
接口和抽象的区别
抽象类可以有构造方法接口不行
抽象类可以有普通成员变量接口没有
抽象类可以有非抽象的方法接口必须全部抽象
抽象类的访问类型都可以接口只能是publicabstract
一个类可以实现多个接口但只能继承一个抽象类
基础概念题
下面哪一项说法是正确的
1.在•个子类里,一个方法不是public就不能重载2.覆盖一个方法只需要满足相同的方法名和参数类型3.覆盖一
个方法必须方法名,参数和返回类型都相同4.一个覆盖的方法必须有相同的方法名,参数名和参数类型
答案3
覆盖函数与被覆盖函数只有函数体不同
下面哪一项说法是错误的
1.重载函数的函数名必须相同2.重载函数必须在参数个数或类型上有所不同3.重载函数的返回值必须相同4.重
载函数的函数体可以不同
答案3
函数的重载与函数的返回值无关
下面哪一项说法是正确的
1.静态方法不能被覆盖2.静态方法不能被声明称私有3.私有方法不能被重载4.一个重载的方法在基类中不通过
检杳不能抛出异常
答案1
基础程序题
题目一
classBase{}classAggextendsBase{publicStringgetFieldsO{Stringname="Agg”;
returnname;)}publicclassAvf{pulicstaticvoidmain(Stringargv[]){Basea=new
Agg();//here}}
下面哪个选项的代码替换到〃here会调用getFields方法,使出书结果是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类的实例需要把Base类显示地转换成Agg类,然后调用Agg类中
的方法.如果a是Base类的一个实例,是不存在这个方法的,必须把a转换成Agg的
一个实例
题目二
classA{publicA(){System,out.printIn("A");}}publicclassBextendsA{publi
cB(){System.out.println(*B*);}publicstaticvoidmain(String[]args){Aa=
newB();a=newA();})
输出结果是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因为这里的方法getName是静态的.具体执行哪一个,则要看是
由哪个类来调用的.
super关键词
•调用父类(Superclass)的成员或者方法
・调用父类的构造函数
1.调用父类(Superclass)的成员或者方法
如果你的方法覆写一个父类成员的方法,你可以通过super关键字调用父类的方法.考
虑下面的父类:
publicclassSuperclass{publicvoidprintMethod(){System,out.println(z,PrintedinSu
perclass.");}}
下面是一个子类(subclass),叫做Subclass,覆写了printMethod():
publicclassSubclassextendsSuperclass{//overridesprintMethodinSuperclasspublicvoidp
rintMethodO{super.printMethod();System,out.printIn(^PrintedinSubclass");
publicstaticvoidmain(String[]args){Subclasss=newSubclass0;s.printMethod
0;)}
输出
PrintedinSuperclass.PrintedinSubclass
1.调用父类的构造函数
使用super关键字调用父类的构造函数.下面的MountainBike类是Bicycle类的子类.
它调用了父类的构造方法并加入了自己的初始化代码:
pub1icMountainBike(intstartHeight,intstartCadence,intstart
Speed,intstartGear){super(startCadence,startSpeed,startGear);seatHeig
ht=startHcight;}
调用父类的构造体必须放在第一行.
使用
super0:
或者:
super(parameterlist);
通过super(),父类的无参构造体会被调用.通过super(parameterlist),父类对应参
数的构造体会被调用.
注意:构造体如果没有显式的调用父类的构造体,Java编译器自动调用父类的无参构造.
如果父类没有无参构造,就会报错(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());}}
返回的结果是Test
因为super.getClassO.getNameO调用了父类的getClassO方法,返回当前类
如果想得到父类的名称,应该用如下代码:
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里并没有定义这个函数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无关但是很重要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);}}
输出的结果是22
子类会首先调用父类的构造函数,在父类的构造函数BaseO中执行add()方法.但这个
add()方法由于是在新建MyBase对象时调用的.所以是执行的MyBase中的add方法
在Java中,子类的构造过程中,必须调用其父类的构造函数,是因为有继承关系存在时,
子类要把父类的内容继承下来,通过什么手段做到的?这样:当你new一个子类对象的
时候,必须首先要new一个父类的对像出来,这个父类对象位于子类对象的内部,所以说,
子类对象比父类对象大,子类对象里面包含了一个父类的对象,这是内存中真实的情况.
构造方法是new一个对象的时候,必须要调的方法,这是规定,要new父类对象出来,那么
肯定要调用其构造方法,所以第一个规则:子类的构造过程中,必须调用其父类的构造
方法
一个类,如果我们不写构造方法,那么编译器会帮我们加上一个默认的构造方法,所谓默
认的构造方法,就是没有参数的构造方法,但是如果你自己写了构造方法,那么编译器就
不会给你添加了
所以有时候当你new一个子类对象的时候,肯定调用了子类的构造方法,但是在子类构造
方法中我们并没有显示的调用基类的构造方法,就是没写,如:super();并没有这样写,
但是
第二个规则:如果子类的构造方法中没有显示的调用基类构造方法,则系统默认调用基类
无参数的构造方法
注意:如果子类的构造方法中既没有显示的调用基类构造方法,而基类中又没有默认无参
的构造方法,则编译出错,所以,通常我们需要显示的:super(参数列表),来调用父类
有参数的构造函数
抽象abstract
Abstract类
・不能实例化
Abstract方法
・在父类里定义抽象方法,在子类里定义这个具体的方法,所以它是抽象的.
好处
减少复杂度和提高可维护性
abstract相关问题
题目一
什么是抽象类
1.Aclasswithnomethods
2.Aclasswithnoconcretesubclasses
3.Aclasswithatleastoneundefiendmessage
4.Noneofabove
答案是4我们是可以定义一个抽象空类的
abstractclassemptyAb{}
题目二
abstractclassBase(abstractpublicvoidmyfunc();}publicclassAbsextendsBase{publicsta
ticvoidmain(Stringargv[]){Absa=newAbs();a.amethodO;}publicvoidame
thod(){System,out.printIn(^Amethod");}}
运行的结果
1.输出Amethod
2.Thecodewillcompilebutcomplainatruntime
3.ThecompilerwillcomplainerrorsinAbsclass
答案是3
this()和super()在构造体里怎么用?
thisO在同一个类的构造体被调用.this("toto","tata”,1)相当于调用对应参数的构造
体.
super()用来调用父类构造体.
Static关键字
Static关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例的情况下直
接被访问
声明为static的方法有以下几条限制:
1.仅能调用其他的static方法
2.只能访问static变量.
3.不能以任何方式引用this或super
4,不能被覆盖.
声明为static的变量实质上就是全局变量.(+final就是全局常量).当声明一个对象
时,并不产生static变量的拷贝,而是该类所有的实例变量共用同一个static变量.
对于静态类,只能用于嵌套类内部类中。
Reference
•StaticclassinJava-GeeksforGeeks
Static相关问题
Static关键字是什么意思?
Static关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例的情况下直
接被访问
是否可以override一个static的方法?
不能被覆盖.因为方法覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定
的.
一个static方法内部调用非static方法?
不可以.因为非static方法是要与对象关联在一起的,须创建一个对象的实例后,才可
以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用.也就
是说,当一个static方法被调用时,,可能还没有创建任何实例对象,如果从一个stati
c方法中发出对非static方法的调用,那个非static方法是关联到哪个对象上的呢?
这个逻辑无法成立,所以,一个static方法内部发出对非static方法的调用.
是否可以在static环境中访问非static变量?
同上
Singleton单例模式
Java中单例模式定义:“一个类有且仅有一个实例,并且自行实例化向整个系统提供。”
publicclassSingleton{privateSingletonO{//dosomething}privatestaticclas
sSingletonHolder{privatestaticfinalSingletonINSTANCE=newSingletonO;}public
sialicfinalSingletongelInslance{returnSingletonHolder.INSTANCE;}}
多选题注意
•一是单例模式的类只提供私有的构造函数
・二是类定义中含有一个该类的静态私有对象
・三是该类提供了一个静态的公有的函数用于创建或获取它本身的静态私有对象。
Reference
•深入浅出单实例Singleton设计模式I酷壳-CoolShelLcn
equals()与hashcode()
Equal
如果需要比较对象的值,就需要equal方法了.看一下JDK中equal方法的实现:
publicbooleanequals(Objectobj){return(this==obj);}
也就是说,默认情况下比较的还是对象的地址.所以如果把对象放入Set中等操作,就需
要重写eqaul方法了
重写之后的equals()比较的就是对象的内容了
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等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年保安证考试重要趋势试题及答案
- 解析保安证考试知识点试题及答案
- 河北东方学院《中国文学作品》2023-2024学年第一学期期末试卷
- 陕西国际商贸学院《工业知识概论》2023-2024学年第二学期期末试卷
- 泉州信息工程学院《文化地理学》2023-2024学年第二学期期末试卷
- 2025保安证考试成功之法试题及答案
- 东莞职业技术学院《综合英语技能训练》2023-2024学年第一学期期末试卷
- 汕头大学《胶体界面化学》2023-2024学年第二学期期末试卷
- 多样化保安证考试试题及答案解析
- 2025年高中化学模拟试题及答案重点
- DB51T 990-2020 小型泵站设计规程
- 护患沟通技巧课件
- 个人无偿劳务合同模板
- 钣金车间安全培训课件
- 混凝土工安全教育培训试题及答案
- 焦炭出口合同模板
- Python程序设计(2022秋)学习通超星期末考试答案章节答案2024年
- 2025年蛇年年度营销日历营销建议【2025营销日历】
- 2024年黑龙江哈尔滨“丁香人才周”(秋季)事业单位引才招聘2074人易考易错模拟试题(共500题)试卷后附参考答案
- 混凝土购销协议(15篇)
- 汽车维修接待课件 任务2.1 主动预约客户
评论
0/150
提交评论