avatar

Java面试题1

1. Java的数据类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
数据类型:
基本数据类型:
数值类型:
整数类型:
byte
short
int
long
浮点类型:
float
double
字符类型:
char
布尔类型:
boolean:
true
false
引用数据类型:
类(class)
接口(interface)
数组

2. String能否被继承?为什么?

1
不可以,因为String类被final修饰符,而final修饰的类是不能被继承的,实现细节不允许改变

3. String,Stringbuffer,StringBuilder的区别

1
2
3
4
5
6
7
都被final修饰,不能被继承
String:
字符串常量,创建后即不能被更改
StringBuffer:
字符串变量(线程安全),其中的绝大多数方法都进行了同步处理,包括常用的append方法也做了同步处理(synchronized修饰).其toString方法会进行对象缓存,以减少元素复制开销
StringBuilder:
字符串变量(非线程安全),与StringBuffer一样都继承和实现了同样的接口和类,方法除未使用synchronized修饰以外基本一致,不同之处在于最后toString的时候,会直接返回一个新对象

4. ArrayList和LinkedList的区别

1
2
3
4
5
6
7
8
ArrayList和linkedlist的区别:
1.ArrayList底层实现就是数组,且ArrayList实现了RandomAccess,表示它能快速随机访问存储的元素,通过下标index访问;特点:查询速度快,增删元素慢
2.LinkedList底层实现是双向链表,LinkedList没有实现RandomAccess接口,所以使用for循环遍历没有使用iterator的效率高;特点:查询速度慢,增删元素快
3.ArrayList主要控件开销在于需要在List列表预留一定空间;而LinkList主要控件开销在于需要存储结点信息以及结点指针信息
4.从利用效率来看,ArrayList自由性较低,因为它需要手动的设置固定大小的容量,但是它的使用比较方便,只需要创建,然后添加数据,通过调用下标进行使用;而LinkedList自由性较高,能够动态的随数据量的变化而变化,但是它不便于使用
5.使用get和set方法,ArrayList比LinkedList的效率更高,因为LinkedList是线性的数据存储方式,所以需要移动指针从前往后依次查找
6.ArrayList可以以O(1)时间复杂度对元素进行随机访问;而LinkedList查找某个元素的时间复杂度是O(n)
7.LinkedList比ArrayList更占内存,因为LinkedList为每一个节点存储了两个引用,一个指向前一个元素,一个指向下一个元素

5. 类的实例化顺序

1
2
3
4
5
6
7
8
父类静态变量、
父类静态代码块、
子类静态变量、
子类静态代码块、
父类非静态变量(父类实例成员变量)、
父类构造函数、
子类非静态变量(子类实例成员变量)、
子类构造函数

6. 抽象类和接口的区别,类可以继承多个类吗,接口能否继承多个接口,类能否实现多个接口

1
2
3
4
5
6
7
8
9
1.抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象
2.抽象类要被子类继承,接口要被类实现
3.接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现
4.接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量
5.抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类.同样,一个接口实现的时候,如不能全部实现接口方法,那么该类也只能为抽象类
6.抽象方法只能申明,不能实现不能继承
7.抽象类里可以没有抽象方法,如果一个类里有抽象方法,那么这个类只能是抽象类;接口只能有抽象方法
8.抽象方法要被实现,所以不能是静态的,也不能是私有的
9.一个类只能继承一个类,但可以实现多个接口;接口可以继承多个接口

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

1
2
3
4
1.抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面
2.继承:继承是从已有类得到继承信息创建新类的过程。提供继承信息的类被称为父类(超类、基类);得到继承信息的类被称为子类(派生类).继承让变化中的软件系统有了一定的延续性,同时继承也是封装程序中可变因素的重要手段
3.封装:封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口(隐藏一切可隐藏的东西,只向外界提供最简单的编程接口)
4.多态性:是指允许不同子类型的对象对同一消息作出不同的响应

8. 访问修饰符public,private,protected,以及不写(默认)时的区别?

修饰符 当 前 类 中 当 前 包 子 类 其 他 包
public
protected ×
default × ×
private × × ×
1
类的成员不写访问修饰符时默认为default.默认对于同一个包中的其他类相当于公开(public),对于不是同一个包中的其他类相当于私有(private).受保护(protected)对子类相当于公开,对不是同一包中的没有父子关系的类相当于私有.Java中,外部类的修饰符只能是public或默认,类的成员(包括内部类)的修饰符可以是以上四种
# 9. String 是最基本的数据类型吗?
1
不是.Java中的基本数据类型只有8个:byteshortintlongfloatdoublecharboolean;除了基本类型(primitive type),剩下的都是引用类型(reference type),Java 5以后引入的枚举类型也算是一种比较特殊的引用类型
# 10. JDK、JRE和JVM的关系?
JDK、JRE和JVM的关系
1
2
3
4
5
6
7
1.JVM: Java虚拟机,使整个Java实现跨平台的最核心的部分,所有的Java程序会首先被编译为class文件,使其能够在虚拟机上执行
2.JRE: JAVA运行环境,仅JVM不足以使class文件执行,因为在解释class的时候JVM需要调用解释所需的类库lib
3.JDK: Java开发工具包
4.JDK、JRE和JVM的关系:
JDK是Java程序开发时用的开发工具包,其内部也有Java运行环境JRE.
JRE是Java程序运行时需要的运行环境
JDK和JRE内部都包含Java虚拟机JVM,JVM内部包含许多应用程序的类的解释器和类加载器等等
文章作者: 123
文章链接: https://gao5805123.github.io/123/2020/05/03/Java%E9%9D%A2%E8%AF%95%E9%A2%981/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 123
打赏
  • 微信
    微信
  • 支付宝
    支付宝