1.什么是 Java 虚拟机(JVM)?Java的跨平台原理又是什么?

Java虚拟机就是负责将字节码文件(.class文件)翻译成特定平台下的机器码然后运行。
也就是说,只要在不同平台上安装对应的JVM,就可以运行字节码文件,运行我们编写的Java程序。

至于跨平台原理,只要记住一句话:“一次编译,多地运行”。也就是说,编译出一个java源文件后,只要在不同平台上,也就是不同操作系统上装有对应的Java虚拟机,就能够将该源文件翻译成该系统可以识别的机器码文件从而运行出来。

2. JDK、JRE、JVM 分别是什么关系?

JDK 即为 Java 开发工具包,包含编写 Java 程序的开发工具以及 JRE

JRE 即为 Java 运行环境,提供了运行 Java 应用程序所必须的软件环境,包含有 Java 虚拟机(JVM)。

JVM 即为 Java 虚拟机,提供了字节码文件(.class)的运行环境支持。

简单说,就是 JDK 包含 JRE 包含 JVM

3. Java 支持的数据类型有哪些?

Java 支持的数据类型包括基本数据类型和引用类型。基本数据类型如下。

整数值型:byte,short,int,long

字符型:char

浮点类型:float,double

布尔型:boolean

注意:String 是引用类型不是基本类型。

4. 什么是面向对象编程(OOP)?
面向对象编程主要是把事物给对象化,让每个对象都拥有其属性和行为,然后将对象抽象成类,再封装起来方便使用。

面向对象编程语言,具有以下优点:
代码开发模块化,更易维护和修改;
代码复用性强;
增强代码的可靠性和灵活性;
增加代码的可读性。

5. 面向对象的四大基本特性? (封装、继承、多态和抽象)

封装:只暴露给类外部或者子类必须的属性和操作。类封装的实现依赖类的修饰符(public、protected 和 private 等)。封装可以使类具有独立性和隔离性,保证类的高内聚

继承:对现有类的一种复用机制。一个类如果继承现有的类,则这个类将拥有被继承类的所有非私有特性(属性和操作)。这里指的继承包含:类的继承和接口的实现

多态:多态是在继承的基础上实现的。多态的三个要素:继承、重写和父类引用指向子类对象。父类引用指向不同的子类对象时,调用相同的方法,呈现出不同的行为,就是类多态特性。多态可以分成编译时多态和运行时多态。

抽象:提取现实世界中某事物的关键特性,为该事物构建模型的过程。抽象模型中一般包含:属性(数据)和操作(行为)。这个抽象模型我们称之为类,对类进行实例化得到对象

抽象、封装、继承和多态是面向对象的基础。 其中封装、继承和多态是Java的三大特性

6. Java 支持多继承么?

Java 中类不支持多继承,只支持单继承(即一个类只有一个父类)。 但是 Java 中的接口支持多继承,即一个子接口可以有多个父接口。(接口的作用是用来扩展对象的功能,一个子接口继承多个父接口,说明子接口扩展了多个功能,当类实现接口时,类就扩展了相应的功能)。

7. 接口和抽象类的区别是什么?

共同点:
1.接口不可以被实例化,抽象类也不可以被实例化

不同点:
1.接口中所有的方法必须是抽象方法,而抽象类则既可以有抽象方法也可以有非抽象方法。

2.普通类可以实现很多个接口,但是只能继承一个抽象类。

3.接口中的成员变量默认都是 final 的。而抽象类中可以包含非 final 的成员变量。接口中的成员方法数默认是 public 的。抽象类的成员方法可以是 private,protected 或者是 public。

4.,但是,如果它包含 main 方法的话是可以被调用的。也可以参考 JDK8 中抽象类和接口的区别。

8. Java 中,什么是构造方法

当新对象被创建的时候,构造方法会被调用。每一个类都有构造方法。在程序员没有给类提供构造方法的情况下,Java 编译器会为这个类创建一个默认的构造方法。

9. Java 中的方法覆盖和方法重载?

方法覆盖是说子类重新定义了父类的方法。方法覆盖必须有相同的方法名,参数列表和返回类型

方法重载发生在同一个类里面存在有两个或者是多个方法的方法名相同、返回类型相同但是参数不同列的情况。
举例: 类的无参构造方法 和 有参构造方法。两个方法都在一个类里面,参数名相同,返回类型相同,但是参数列表不同。 也叫构造方法重载。

10. String和StringBuilder、StringBuffer的区别?

Java 平台提供了两种类型的字符串:String 和 StringBuffer/StringBuilder,它们可以储存和操作字符串。

其中 String 是只读字符串,也就意味着 String 引用的字符串内容是不能被修改的。

StringBuffer/StringBuilder 类表示的字符串对象可以直接进行修改。StringBuilder 和 StringBuffer 的方法完全相同,区别在于StringBuffer 效率低但是线程更安全,StringBuilder效率更高但是线程不安全。

11. Java 集合框架有哪些?说出一些集合框架的优点?
在这里插入图片描述
在这里插入图片描述
常见的集合有:List、ArrayList、LinkedList、Set、Hashset、TreeSet、Map、HashMap、TreeMap…

集合框架的部分优点如下:

(1)使用核心集合类降低开发成本,而非实现我们自己的集合类。

(2)随着使用经过严格测试的集合框架类,代码质量会得到提高。

(3)通过使用 JDK 附带的集合类,可以降低代码维护成本。

(4)复用性和可操作性。

12. Java 集合框架的基础接口有哪些?

Collection 为集合层级的根接口。一个集合代表一组对象,这些对象即为它的元素。Java 平台不提供这个接口任何直接的实现。

1.Set 是一个不能包含重复元素的集合。这个接口对数学集合抽象进行建模,被用来代表集合,就如一副牌。

2.List 是一个有序集合,可以包含重复元素。你可以通过它的索引来访问任何元素。List 更像长度动态变换的数组。

3.Map 是一个将 key 映射到 value 的对象。一个 Map 不能包含重复的 key,每个 key 最多只能映射一个 value。

13. ArrayList 和 Vector 有何异同点?

ArrayList 和 Vector 在很多时候都很类似。

(1)两者都是基于索引的,内部由一个数组支持。

(2)两者维护插入的顺序,我们可以根据插入顺序来获取元素。

(3)ArrayList 和 Vector 的迭代器实现都是 fail-fast 的。

(4)ArrayList 和 Vector 两者允许 null 值,也可以使用索引值对元素进行随机访问。

以下是ArrayList和Vector的不同点。

(1)Vector 是同步的,而 ArrayList 不是。然而,如果你寻求在迭代的时候对列表进行改变,你应该使用 CopyOnWriteArrayList。

(2)ArrayList 比 Vector 快,它因为有同步,不会过载。

(3)ArrayList 更加通用,因为我们可以使用 Collections 工具类轻易地获取同步列表和只读列表。

14. HashMap 和 HashTable 有什么区别?

  1. HashMap 是非线程安全的,HashTable 是线程安全的。

  2. HashMap 的键和值都允许有 null 值存在,而 HashTable 则不行。

  3. 因为线程安全的问题,HashMap 效率比 HashTable 的要高。

  4. HashTable 是同步的,而 HashMap 不是。因此,HashMap 更适合于单线程环境,而 HashTable 适合于多线程环境。

一般现在不建议用 HashTable,一是 HashTable 是遗留类,内部实现很多没优化和冗余。二是即使在多线程环境下,现在也有同步的 ConcurrentHashMap 替代,没有必要因为是多线程而用 HashTable。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐