2019年JAVA基础面试题(我总结多数公司的面试题,多数公司会出的面试题都在这里)

4 篇文章 0 订阅
2 篇文章 0 订阅

JAVA基础的面试题*

1.&和&&的区别?
答:&和&&表示逻辑运算符,表示逻辑与(and),当两边结果为true时,结果就为true。
&&还具备短路功能,如果第一个为false,则不会继续执行下去,eg:if(str != null && str.equals(“”))的表达式,当str为null的时候,后面表达式不会执行,所以不会引发NullPointerException,如果&&换成&的时候,则会抛出空指针异常。

2.Override和Overload的区别?
答:Overload为方法重载,在同一个类里面,方法名相同,形参不同。
Override:方法重写,方法名和形参相同,访问权限比父类更大,抛出的异常跟父类相同或是父类的子类,返回值类型跟父类一样,或是比父类小。

3.String和StringBuffer和StringBuilder的区别?
答:String是不可变的对象,每次操作都会产生新的String对象,而StringBuffer和StringBuilder可以在原有对象的基础上进行操作,所以在经常改变字符串的情况下不要使用String。
StringBuffer和StringBuilder的区别在与,StringBuffer是线程安全的,StringBuilder是非线程安全的,但效率比StringBuffer快,单线程使用StringBuilder,多线程使用StringBuffer。

4.String类常用什么方法?
答:indexOf():返回指定字符的索引。
charAt():返回指定索引处的字符。
repalce():字符串替换。
trim():去除字符串两端的空白。
split():分割字符串,返回一个分割后的字符串数字。
getBytes():返回字符串的byte类型数组。
length():返回字符串长度。
toLowerCase():将字符串转成小写字母。
toUpperCase():将字符串转成大写字母。
substring():截取字符串。
equals():字符串比较

5.怎么将字符串反转?
答:使用StringBuffer或者StringBuilder的reverse()方法。

6.Final,finally和finalize方法的区别?
答:final是常量声明(可以声明类,方法,属性,常量)
finally是处理异常的
finalize是帮助进行垃圾回收的

7.throw和throws有什么区别?
答:throws是用来声明一个方法可能抛出的所有异常信息。throws是将异常声明但是不处理,而是将异常往上传,谁调用我就谁处理。
throw则是抛出一个具体的异常类型。(在try catch进行捕获)

8.==和equals()的区别?
答:对与基本类型和引用类型==的作用效果是不一样的,
基本类型:比较的是值是否相同
引用类型:比较的是引用是否相同
equals默认比较两个对象的内容。

9.error和Exception的区别?
答:error表示恢复不是不可能但很困难的情况下的一种严重问题,比如内存溢出。
exception表示一中设计或实现问题。也就是说,它表示如果程序运行正常,从不会出现这样的事情。

10.Int和Integer的区别?
答:Integer是int的包装类,int是java的基本类型;
Integer必须实例化后才能使用,而int变量不需要。
Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象,而int则是直接存储数据值。
Integer默认值为null,int默认值为0;

11.静态变量和实例变量的区别?
答:语法定义:静态变量前面加上static,实例变量不用。
程序运行:实例变量是属于某个对象的属性,必须创建实例对象,其中的实例变量才会分配空间,才可以使用实例变量。静态变量不属于某个实例变量,属于类,不用创建对象就会分配空间,静态变量就可以使用了。实例变量必须通过创建对象才可以通过这个对象使用,而静态变量可以直接用类名。

12.private,protected,public,不写的区别?
答:public公共访问,最大
protected可以给子类访问
不写(default)可以给同一个包访问
private只能在本类访问

**面向对象

a.面向对象的五大成分?**
答:成员变量,方法,代码块,构造器,内部类

b.你怎么理解变量?
答:变量是一块命名的内存区域,以便程序进行访问。变量用来存储数据,随着程序的执行,存储的数据也可能跟着改变。
c.static的理解?
答:可以定义方法为static,不用对象就可以调用此方法,
方法用static的限制:
1.只能调用其他的static方法
2.只能方法static的数据
3.不能以任何的形式用this,super

d.面向对象的特征?
答:封装:把描述一个对象的属性和行为封装成一个类,把具体的业务逻辑功能实现封装成一个方法,封装的好处只能通过规定的方法访问数据。隐藏类的实例细节,方便修改和实现。
继承:实现代码的复用,所有的子类所公共的属性和方法抽取成一个父类,所有的子类继承该类可具备父类的属性和行为,继承具有单一性和传递性。
多态:程序中定义的引用类型变量所指向的具体类型和调用的具体方法在程序编译阶段无法确定,而是在运行期才能确定该引用类型变量指向具体那个对象而调用在那个类中声明的方法。
抽象:
e.java中的多态的机制是什么?
答:多态存在的三个必要条件 一、要有继承; 二、要有重写; 三、父类引用指向子类对象。
多态的好处:
1.可替换性(substitutability)。多态对已存在代码具有可替换性。例如,多态对圆Circle类工作,对其他任何圆形几何体,如圆环,也同样工作。
2.可扩充性(extensibility)。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。例如,在实现了圆锥、半圆锥以及半球体的多态基础上,很容易增添球体类的多态性。
3.接口性(interface-ability)。多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。如图8.3 所示。图中超类Shape规定了两个实现多态的接口方法,computeArea()以及computeVolume()。子类,如Circle和Sphere为了实现多态,完善或者覆盖这两个接口方法。
4.灵活性(flexibility)。它在应用中体现了灵活多样的操作,提高了使用效率。
5.简化性(simplicity)。多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。
Java中多态的实现方式:接口实现,继承父类进行方法重写,同一个类中进行方法重载。
一个小题目:继承父类进行方法重写的例子。在这里插入图片描述
f.接口和抽象类的区别?
抽象类:
1)可以默认的方法实现。
2)子类使用extends关键字来继承抽象类,如果子类不是抽象类,子类需要提供抽象类中所声明方法的实现。
3)抽象类可以有构造器。(但是不能创建实例)
4)抽象方法可以有public,protected和default修饰
5)一个子类只能继承一个父类
6)想抽象类中添加新方法,可以提供默认的实现,因此可以不修改子类现有的代码。
接口:
g.接口和抽象类的好处?
答:接口:规范,扩展,回调
抽象类:1.为其他子类提供一个公共的类型。
2.封装子类中重复定义的内容。
3.定义抽象方法,子类虽然有什么不同的实现,但是定义时一致的。

集合

A.集合中有那些?
答:1、Collection:代表一组对象,每一个对象都是它的子元素。
2、Set:不包含重复元素的Collection。
3、List:有顺序的collection,并且可以包含重复元素。
4、Map:可以把键(key)映射到值(value)的对象,键不能重复。
B.ArrayList和LinkedList的区别?
答:ArrayList实现了List接口,以数组的方式来实现的,因此对于快速的随机取得对象的需求,使用ArrayList实现执行效率上会比较好。
LinkedList是采用链表的方式来实现List接口的,因此在进行insert和remove动作时效率要比ArrayList高。适合用来实现Stack(堆栈)与Queue(队列)。
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
C.ArrayList和Vector的区别?
答:Vector和ArrayList在使用上非常相似,都可用来表示一组数量可变的对象应用的集合,并且可以随机地访问其中的元素。

  1. Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的方法不是,由于线程的同步必然要影响性能,因此,ArrayList的性能比Vector好。
  2. 当Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,而ArrayList只增加50%的大小,这样,ArrayList就有利于节约内存空间。
    D.HashMap和Hashtable的区别?
    答:HashMap可以接受key和value为null
    HashMap的key和value不为null
    HashMap是非synchronized,而Hashtable是synchronized,这意味着Hashtable是线程安全的,多个线程可以共享一个Hashtable;而如果没有正确的同步的话,多个线程是不能共享HashMap的。Java 5提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的扩展性更好。
    另一个区别是HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。所以当有其它线程改变了HashMap的结构(增加或者移除元素),将会抛出ConcurrentModificationException,但迭代器本身的remove()方法移除元素则不会抛出ConcurrentModificationException异常。但这并不是一个一定发生的行为,要看JVM。这条同样也是Enumeration和Iterator的区别。
    由于Hashtable是线程安全的也是synchronized,所以在单线程环境下它比HashMap要慢。如果你不需要同步,只需要单一线程,那么使用HashMap性能要好过Hashtable。
    HashMap不能保证随着时间的推移Map中的元素次序是不变的。
    E.List和Map的区别?
    答:List是有顺序的 可重复的
    Map是通过键值对进行取值的 key和value是一一对应的
    F.Set和List的区别?
    答:1、List,Set都是继承自Collection接口
    2、List特点:元素有放入顺序,元素可重复 ,Set特点:元素无放入顺序,元素不可重复,重复元素会覆盖掉,(元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的,加入Set 的Object必须定义equals()方法 ,另外list支持for循环,也就是通过下标来遍历,也可以用迭代器,但是set只能用迭代,因为他无序,无法用下标来取得想要的值。)
    3.Set和List对比:
    Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。
    List:和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变
    G.Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?是还是equals()?他们有什么区别
    答:Set 里的元素是不能重复的,元素重复与否是使用 equals()方法进行判断的。
    equals()和
    方法决定引用值是否指向同一对象 equals()在类中被覆盖,为的是当两个
    分离的对象的内容和类型相配的话,返回真值。
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值