Java面试题

字符串:
java允许使用“+”把两个字符串连接起来,“+”实际上是调用了StringBuilder.append()方法,最后toString()。

==和equals()
==:如果是基本数据类型,直接进行比较
如果是引用数据类型,比较引用对象的逻辑地址,即判断是否为同一对象
equals():
equals()方法默认对比对象的地址
equals()方法的存在是希望子类去重写该方法
hashcode():
native方法,产生一个可以标志对象的数字,为算法快速定位数据而存在。

&& & 和 || |:
&&只要不满足第一个条件,就不再进行判断;&全部判断。
||只要满足第一个条件,就不再进行判断;|全部判断。不影响最终判断结果。

String StringBuilder StringBuffer
String为字符串常量;StringBuffer和StringBuilder为字符串变量。
String适用于少量的字符串操作的情况;
StringBuilder适用于单线程下在字符缓冲区进行大量操作的情况(线程不安全。效率高);
StringBuffer适用于多线程下在字符缓冲区进行大量操作的情况(线程安全,效率低)。

ArrayList和LinkedList底层实现:
ArrayList实现基于动态数组,LinkedList实现基于双向链表。
随机存取get set,ArrayList优于LinkedList,而LinkedList要移动指针一步一步的移动到节点处;
新增和删除操作 add remove,LinedList占优,只需要对指针进行修改即可,而ArrayList要移动数据来填补被删除的对象的空间。

HashSet LinkedHashSet TreeSet
Set不允许包含相同的元素,如果试图把两个相同元素加入同一个集合中,add方法返回false。Set判断两个对象相同不是使用==运算符,而是根据equals方法。
LinkedHashSet:当遍历该集合时候,LinkedHashSet将会以元素的添加顺序访问集合的元素。
TreeSet:实现定制排序。

IO流:
字符流处理的单元为2个字节的Unicode字符,操作字符、字符数组或字符串,
而字节流处理单元为1个字节,操作字节和字节数组。

java的编译与运行
java的编译过程是将java源文件编译成字节码(jvm可执行代码,即.class文件)的过程,在这个过程中java是不与内存打交道的,在此过程中编译器会进行语法分析,如果语法不正确就会报错。
Java的运行过程是指jvm装载字节码文件并解释执行。在这个过程才是真正的创立内存布局,执行java程序。
java字节码的执行有两种方式:
即时编译方式:解释器先将字节编译成机器码,然后再执行该机器码;
解释执行方式:解释器通过每次解释并执行一小段代码来完成java字节码程序的所有操作。(这里我们可以看出java程序在执行过程中其实是进行了两次转换,先转成字节码再转换成机器码。)

多态的常用使用场合有哪些?
使用父类做方法的形参,实参可以是父类的任意子类类型
使用父类做方法的返回值类型,返回值可以为父类的任意子类对象

静态/动态绑定
如果一个方法不可被继承或者继承后不可被覆盖,那么这个方法就采用的静态绑定:private static final 构造方法;
运行时(动态)绑定针对的范畴只是对象的方法。试图调用子类的成员变量最简单的办法是将该成员变量封装成方法getter形式。对属性采取静态的绑定方法是因为静态绑定是有很多的好处,它可以让我们在编译期就发现程序中的错误,而不是在运行期,这样就可以提高程序的运行效率。而对方法采取动态绑定是为了实现多态。

抽象类&抽象方法
包含抽象方法的类是抽象类;抽象类中不一定含有抽象方法。

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页