美文网首页程序员
最全Java面试题(一)面试时这些问题你早晚都会遇到

最全Java面试题(一)面试时这些问题你早晚都会遇到

作者: java大湿兄 | 来源:发表于2017-08-21 16:26 被阅读0次

    示例 1 :

    面向对象的特征有哪些方面?

    封装

    最常见的是把属性私有化封装在一个类里面,只能通过方法去访问

    继承

    子类继承父类,从而继承了父类的方法和属性

    抽象

    比如一个英雄类,抽象出了name,hp这些属性,使得开发过程中更加易于理解

    多态

    多态分操作符的多态和类的多态。类的多态指父类引用指向子类对象,并且有继承,有重写。

    示例 2 :

    String是最基本的数据类型吗?

    String是类类型,不是基本类型。

    基本类型有八种

    这八种基本类型分别是:

    整型(4种)

    字符型(1种)

    浮点型(2种)

    布尔型(1种)

    示例 3 :

    int 和 Integer 有什么区别?

    int 是基本类型32位长度的整数

    Integer 是类类型,是int的封装类

    int和Integer之间可以通过自动装箱自动拆箱互相转换、

    例 4 :

    String 和StringBuffer的区别?

    请先登录String是immutable的,其内容一旦创建好之后,就不可以发生改变。

    StringBuffer 是可以变长的,内容也可以发生改变

    改变的原理是StringBuffer内部采用了字符数组存放数据,在需要增加长度的时候,创建新的数组,并且把原来的数据复制到新的数组这样的办法来实现。

    更多细节可以参考模仿StringBuffer的MyStringBuffer类是如何实现的。

    示例 5 :

    运行时异常与一般异常有何异同?

    运行时异常又叫做非可查异常,在编译过程中,不要求必须进行显示捕捉

    一般异常又叫做可查异常,在编译过程中,必须进行处理,要么捕捉,要么通过throws抛出去.

    示例 6 :

    说出ArrayList,Vector, LinkedList的存储性能和特性。

    先说ArrayList和Vector

    两者都继承了抽象类AbstractList,但是Vector是线程安全的,而ArrayList是非线程安全的

    再说ArrayList和LinkedList的区别

    ArrayList 是数组结构,所以定位很快,但是插入和删除很慢

    LinkedList 是双向链表结构,所以插入和删除很快,但是定位很慢

    示例 7 :

    Collection 和 Collections的区别。

    首先不要说成了一个是单数,一个是复数。。。

    Collection是接口,是List和Set的父接口

    Collections是工具类,提供了排序,混淆等等很多实用方法

    示例 8 :

    &和&&的区别请先登录

    & 有两个作用,分别是位与和逻辑与

    && 就是逻辑与

    作为逻辑与, & 和 && 分别表示长路与和短路与

    长路与两侧,都会被运算

    短路与只要第一个是false,第二个就不进行运算了

    示例 9 :

    HashMap和Hashtable的区别

    HashMap和Hashtable都实现了Map接口,都是键值对保存数据的方式

    区别1:

    HashMap可以存放 null

    Hashtable不能存放null

    区别2:

    HashMap不是线程安全的类

    Hashtable是线程安全的类

    示例 10 :

    final, finally, finalize的区别

    final

    final修饰类,方法,基本类型变量,引用的时候分别有不同的意思

    修饰类表示该类不能被继承

    修饰方法表示该方法不能被重写

    修饰基本类型变量表示该变量只能被赋值一次

    修饰引用表示该引用只能一次指向对象的机会

    finally

    finally 是用于异常处理的场面,无论是否有异常抛出,都会执行

    finalize

    finalize是Object的方法,所有类都继承了该方法。当一个对象满足垃圾回收的条件,并且被回收的时候,其finalize()方法就会被调用

    示例 11 :

    Overload和Override的区别,即重载和重写的区别。 Overloaded的方法是否可以改变返回值的类型?

    Overload是方法重载的意思,指的是在同一个类里面,方法名一样,但是参数不一样

    Override是方法重写的意思,指的是子类继承了父类的某个方法后,重新又写了一遍

    Overloaded的方法是否可以改变返回值的类型?

    可以,重载其实本质上就是完全不同的方法,只是恰好取了相同的名字

    示例 12 :

    Error和Exception有什么区别? 请先登录

    Error和Exception都实现了Throwable接口

    Error只的是JVM层面的错误,比如内存不足OutOfMemoryError

    Exception 只的是代码逻辑的异常,比如下标越界OutOfIndexException

    示例 13 :

    abstract class和interface有什么区别? 请先登录

    abstract class 抽象类和interface接口的区别

    使用方式:

    抽象类只能够通过继承被使用

    接口必须通过实现被使用

    实现方法:

    抽象类不仅可以提供抽象方法,也可以提供实现方法

    接口只能提供抽象方法发,不能提供实现方法。但是在JAVA8版本开始,接口可以可以提供实现方法了,前提是要在方法前加一个default修饰符

    示例 14 :

    heap和stack有什么区别

    heap: 堆

    stack: 栈 (在一些书籍里,会被翻译为堆栈,实际上指的就是单纯的这个栈)

    存放的内容不一样:

    heap: 是存放对象的

    stack: 是存放基本类型(int, float, boolean 等等)、引用(对象地址)、方法调用

    存去方式不一样:

    heap: 是自动增加大小的,所以不需要指定大小,但是存取相对较慢

    stack: 是固定大小的,并且是FILO 先入后出的顺序,并且存取速度比较快

    示例 15 :

    GC是什么? 为什么要有GC?

    GC是Garbage Collection的缩写,即垃圾回收

    这里所谓的垃圾,指的是那些不再被使用的对象,JVM的垃圾回收机制使得开发人员从无聊、容易犯错的手动释放内存资源的过程中解放出来。

    开发人员可以更加专注的进行业务功能的开发,而资源回收的工作交由更加专业的垃圾回收机制自动完成。

    示例 16 :

    short s1 = 1; s1 = s1 + 1;有什么错?

    short s1 = 1; 这一句没有错误,编译器会自动把1这个整数处理为short.

    s1 = s1 + 1; 右侧的表达式会返回一个Int类型的整数,再把这个int类型的整数赋给short类型的s1的时候,就会出现强制转换错误

    示例 17 :

    Math.round(11.5)等於多少? Math.round(-11.5)等於多少?

    Math.round 的意思是+0.5 取整数

    所以 Math.round(11.5) 即 11.5+0.5 = 12

    Math.round(-11.5) 即 -11.5+0.5 = -11

    示例 18 :

    String s = new String("xyz");创建了几个String Object?

    String s = new String("xyz");

    首先构造方法 new String("xyz"); 中的"xyz" 这本身就是一个字符串对象

    然后 new 关键字一定会创建一个对象

    所以总共创建了两个String对象

    示例 19 :

    Java有没有goto?

    有,goto是关键字,但是是保留字,并不具备功能性

    示例 20 :

    接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?

    接口是否可继承接口?

    可以,比如List 就继承了接口Collection

    抽象类是否可实现(implements)接口?

    可以,比如MouseAdapter鼠标监听适配器是一个抽象类,并且实现了MouseListener接口

    抽象类是否可继承实体类(concrete class)?

    可以,所有抽象类,都继承了Object

    示例 21 :

    List, Set, Map是否继承自Collection接口?

    List 和 Set 继承了Collection接口

    但是Map和Collection之间没有继承关系,因为一个是键值对容器,一个是单值容器,无法兼容

    示例 22 :

    abstract的method是否可同时是static,是否可同时是synchronized?

    abstract的method是否可同时是static,是否可同时是synchronized?

    都不可以

    示例 23 :

    数组有没有length()这个方法? String有没有length()这个方法?

    数组获取长度的手段是 .length 属性

    String获取长度的手段是 length()方法

    集合获取长度的手段是 size()方法

    文件获取长度的手段是 length()方法

    示例 24 :

    Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?

    以HashSet为例,判断重复的逻辑是:

    1. 首先看hashcode是否相同,如果不同,就是不重复的

    2. 如果hashcode一样,再比较equals,如果不同,就是不重复的,否则就是重复的。

    更多关于hashcode的原理,参考Java HashCode原理详解

    示例 25 :

    构造器Constructor是否可被override?是否可以继承String类?

    子类不能继承父类的构造方法,所以就不存在重写父类的构造方法。

    String是final修饰的,所以不能够被继承

    学习Java的同学注意了!!!
    学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群346942462,我们一起学Java!

    相关文章

      网友评论

        本文标题:最全Java面试题(一)面试时这些问题你早晚都会遇到

        本文链接:https://www.haomeiwen.com/subject/akfhdxtx.html