Java 后端面试必备知识点 1.0

1.JDK、JRE、JVM 三者之间的关系?

JDK(Java Development Kit):是 Java 开发⼯具包,是整个 Java 的核⼼,包括了 Java 运⾏环境 JRE、Java ⼯具 和 Java 基础类库。 JRE( Java Runtime Environment):是 Java 的运⾏环境,包含 JVM 标准实现及 Java 核⼼类库。 JVM(Java Virtual Machine):是 Java 虚拟机,是整个 Java 实现跨平台的最核⼼的部分,能够运⾏以 Java 语⾔ 写作的软件程序。所有的 Java 程序会⾸先被编译为 .class 的类⽂件,这种类⽂件可以在虚拟机上执⾏。

2.重载和重写的区别?

(1)重载:编译时多态、同⼀个类中同名的⽅法具有不同的参数列表、不能根据返回类型进⾏区分【因为:函数 调⽤时不能指定类型信息,编译器不知道你要调哪个函数】;

(2)重写(⼜名覆盖):运⾏时多态、⼦类与⽗类之间、⼦类重写⽗类的⽅法具有相同的返回类型、更好的访问 权限。

3.构造器是否可以被重写?

在讲继承的时候我们就知道⽗类的私有属性和构造⽅法并不能被继承,所以 Constructor 也就不能被 Override(重写),但是可以 Overload(重载),所以你可以看到⼀个类中有多个构造函数的情况。

4.解释下什么是面向对象?

⾯向对象和⾯向过程的区别? ⾯向对象是⼀种基于⾯向过程的编程思想,是向现实世界模型的⾃然延伸,这是⼀种“万物皆对象”的编程思想。由 执⾏者变为指ഀ者,在现实⽣活中的任何物体都可以归为⼀类事物,⽽每⼀个个体都是⼀类事物的实例。⾯向对象 的编程是以对象为中⼼,以消息为驱动。

区别:

(1)编程思路不同:⾯向过程以实现功能的函数开发为主,⽽⾯向对象要⾸先抽象出类、属性及其⽅法,然后通 过实例化类、执⾏⽅法来完成功能。

(2)封装性:都具有封装性,但是⾯向过程是封装的是功能,⽽⾯向对象封装的是数据和功能。 (3)⾯向对象具有继承性和多态性,⽽⾯向过程没有继承性和多态性,所以⾯向对象优势很明显

5.构造方法有哪些特性?

(1)名字与类名相同;

(2)没有返回值,但不能⽤ void 声明构造函数;

(3)成类的对象时⾃动执⾏,⽆需调⽤

6.Integer 和 int 的区别?

(1)int 是 Java 的⼋种基本数据类型之⼀,⽽ Integer 是 Java 为 int 类型提供的封装类;

(2)int 型变量的默认值是 0,Integer 变量的默认值是 null,这⼀点说明 Integer 可以区分出未赋值和值为 0 的 区分;

(3)Integer 变量必须实例化后才可以使⽤,⽽ int 不需要。

Integer 和 int 的⽐较延伸:

1、由于 Integer 变量实际上是对⼀个 Integer 对象的引⽤,所以两个通过 new ⽣成的 Integer 变量永远是不相等 的,因为其内存地址是不同的;

2、Integer 变量和 int 变量⽐较时,只要两个变量的值是相等的,则结果为 true。因为包装类 Integer 和基本数据 类型 int 类型进⾏⽐较时,Java 会⾃动拆包装类为 int,然后进⾏⽐较,实际上就是两个 int 型变量在进⾏⽐较;

3、⾮ new ⽣成的 Integer 变量和 new Integer() ⽣成的变量进⾏⽐较时,结果为 false。因为⾮ new ⽣成的 Integer 变量指向的是 Java 常量池中的对象,⽽ new Integer() ⽣成的变量指向堆中新建的对象,两者在内存中的 地址不同;

4、对于两个⾮ new ⽣成的 Integer 对象进⾏⽐较时,如果两个变量的值在区间 [-128, 127] 之间,则⽐较结果为 true,否则为 false。Java 在编译 Integer i = 100 时,会编译成 Integer i = Integer.valueOf(100),⽽ Integer 类型 的 valueOf 的源码如下所示:

public static Integer valueOf(int var0) { 
 return var0 >= -128 && var0 <= Integer.IntegerCache.high ?
Integer.IntegerCache.cache[var0 + 128] : new Integer(var0);
}

从上⾯的代码中可以看出:Java 对于 [-128, 127] 之间的数会进⾏缓存,⽐如:Integer i = 127,会将 127 进⾏缓 存,下次再写 Integer j = 127 的时候,就会直接从缓存中取出,⽽对于这个区间之外的数就需要 new 了。

你可能感兴趣的:(java后端,java)