Java常见面试知识点汇总
Posted DreamMakers
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java常见面试知识点汇总相关的知识,希望对你有一定的参考价值。
提问:面向对象编程的三个特征和具体含义?
面向对象变成的三个特征:封装、继承与多态。
封装:是指将某事物的属性和行为包装到对象中,这个对象只对外公布需要公开的属性和行为;
继承:子对象可以继承父对象的属性和行为;
多态:指父对象中的同一个行为能在其多个子对象中有不同的表现。也就是说子对象可以使用重写父对象中的行为,使其拥有不同于父对象和其它子对象的表现,这就是overriding(重写);
提问:JVM、JRE和JDK三种的关系?
JVM它是Java Virtual Machine (Java虚拟机)的缩写,主要是通过在实际计算机模仿各种计算机功能来实现的,组成部分包括堆、方法区、栈、本地方法栈、程序计算器等部分组成的。
JRE是java runtime environment, 是java程序的运行环境。
JDK 是java development kit,是java的开发工具包,里面包含了各种类库和工具。当然也包括了另外一个Jre。
提问:Java支持的基础数据类型有哪些?都占用多少字节?
Java包含8种基本数据类型,分别是boolean、byte、char、short、int、long、float、double。对应的封装类:Boolean,Byte、Character、Short、Integer、Long、Float、Double;
上述8种基本数据类型占用的字节:1个字节或4个字节,1个字节、2个字节、2个字节、4个字节、8个字节、4个字节、8个字节。
《Java虚拟机规范》中如是说:“虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数组,每个元素boolean元素占8位”。这样我们可以得出boolean类型单独使用是4个字节,在数组中又是1个字节。那虚拟机为什么要用int来代替boolean呢?为什么不用byte或short,这样不是更节省内存空间吗?实际上,使用int的原因是,对于当下32位的CPU来说,一次进行32位的数据交换更加高效。
综上,我们可以知道:
官方文档对boolean类型没有给出精确的定义,《Java虚拟机规范》给出了“单独时使用4个字节,boolean数组时1个字节”的定义,具体还要看虚拟机实现是否按照规范来,所以1个字节、4个字节都是有可能的。
这其实是一种时空权衡。
提问:自动装箱与拆箱的原理?
自动装箱是指Java编译器将基本数据类型自动转换为相对应的包装类,比如int转换为Integer,反之是自动拆箱。JDK1.5之后才支持自动装箱与拆箱。
当将一个基础数据类型使用=赋值给封装类型时,会自动进行装箱操作;当将一个封装类型使用=符号赋值给基础数据类型时,会自动进行拆箱操作。
当一个基础数据类型与封装类型进行==、+、-、*、/运算时,会对封装类型进行拆箱操作,并按照基础数据类型进行计算。
在Java中,每次自动装箱都会在堆中创建一个新的对象,为了降低内存消耗,针对整数类型或者字符类型,自动装箱进行了缓存设计,缓存了一定数值区间的封装类,如果在下面范围内自动装箱,则相同数值对应的封装类指向同一个对象。
举例:
Integer a = 100;
Integer b = 100;
System.out.println(a==b); // true
Integer c = 200;
Integer d = 200;
System.out.println(c==d); // false
需要注意的是,这里是自动装箱才会是这样,如果是自己手动创建封装类对象,即使数值在范围内,也指向的是不同的对象。如下所示:
Integer e = new Integer(100);
Integer f = new Integer(100);
System.out.println(e==f); // false
提问:Object类定义了哪些方法?都是什么含义和作用?
Object类是Java中所有类的基类。位于java.lang包中,一共有11个方法。
获取运行时对象所属的类信息:
getClass()
同步相关:
notify():
notifyAll():
wait():
wait(long):
wait(long,int):
获取对象hashcode:
hashcode()
克隆对象:
clone()
比较对象是否相等:
equals()
输出对象:
toString()
对象最后释放前调用的方法:
finalize()
备注说明
如果想第一时间获取最新最全的面试知识和面试技巧,欢迎扫码关注微信公众号(IT面试直通车),关于互联网编程与面试,这里一定有你想要的。
目前公众号处于初期内容整理建设阶段,计划半年到一年时间将所有相关知识点都整理汇总,添加关注后可以跟随公众号一起逐渐成长,如对相关问题有疑问,可回复进行探讨,谢谢。
以上是关于Java常见面试知识点汇总的主要内容,如果未能解决你的问题,请参考以下文章