面试中总结了 200 道经典的 Java 面试题,里面包含面试要回答的知识重点,并且我根据知识类型进行了分类,可以说非常全面了~
Java 平台相关
1、JDK、JRE、JVM 分别是什么关系? 2、为什么 Java 被称作是“平台无关的编程语言”? 3、Java 和 C++ 的区别? 4、什么是字节码?采用字节码的最大好处是什么? 5、Java 运行的过程? 6、Java 是动态类型语言还是静态类型语言?
面向对象
7.什么是面向对象? 8.请说说面向对象的特征?封装、继承、多态分别说一下,以及它们的好处? 9.多态为什么要转型? 10.说一下权限修饰符的使用权限?
语言基础
-
基本数据类型和引用类型
11.Java 中的几种基本数据类型是什么?各自占用多少字节? 12.char 型变量中能不能存贮一个中文汉字?为什么? 13.什么是引用类型? 14.什么是值传递和引用传递? 15.属性(字段)和变量的区别? 16.什么是重载和重写?Overload(重载)和 Override(重写)的区别? 17.什么是 java 序列化,如何实现 java 序列化?或者请解释 Serializable 接口的作用?
-
字符串相关
18.String 为什么是不可变的? 19.String s = new String("xyz") 会创建几个对象? 20.说说你对字符串常量池的理解? 21.String、StringBuffer、StringBuilder 的区别? 22.谈谈你对 this 关键字的理解? 23.谈谈你对 super 关键字的理解? 24.那你知道 this 和 super 有什么区别吗? 25.谈谈你对 static 关键字的理解? 26.谈谈你对 final 关键字的理解?
27.你知道在 Java 中都有哪里用到了哈希 吗?
-
拷贝相关
28.Java 中有多少种拷贝类型?分别说一下? 29.那你碰到过多引用拷贝吗?知道怎么解决吗?
-
接口相关
30.你平时是怎么使用接口的?谈谈你的理解? 31.那听你这么说,接口的实现类的方法返回值类型是什么? 32.方法的参数可以是接口吗? 33.接口的返回值类型可否是另一个接口类型?
-
抽象类
34.接口引用调用实现类方法? 35.抽象类使用规则 36.抽象类注意事项? 37.abstractclass 和 interface 语法上有什么区别? 38.接口是否可继承接口?抽象类是否可继承具体类(concreteclass)?抽象类中是否可以有静态的 main 方法?
-
包装类
39.什么是自动拆装箱? 40.为什么要转换?
-
泛型
41.你平时是如何使用泛型的?
-
异常
42.Exeception 和 Error 区别? 43.那你知道异常有几种处理方式吗? 44.说说 Throwable 类怎么用吧? 45.你最常见到的是 Java 中的什么异常?
-
反射机制
46.什么是反射机制? 47.那怎么使用反射呢? 48.你反射这么熟悉,那一般在哪些场景用到它啊? 49.听你说的这么多,那它就没有缺点吗?
-
JDK1.8 新特性
50.你知道 JDK1.8 有哪些新特性吗?
以下是答案:
Java 平台相关
1、JDK、JRE、JVM 分别是什么关系?
JDK 即为 Java 开发工具包,包含编写 Java 程序所必须的编译、运行等开发工具以及 JRE。开发工具如:用于编译 Java 程序的 javac 命令。用于启动 JVM 运行 Java 程序的 Java 命令。用于生成文档的 Javadoc 命令。用于打包的 jar 命令等等。
2、为什么 Java 被称作是“平台无关的编程语言”?
Java 虚拟机是一个可以执行 Java 字节码的虚拟机进程。Java 源文件( `.java` )被编译成能被 Java 虚拟机执行的字节码文件( `.class` )。Java 被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。Java 虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性。
3、Java 和 C++ 的区别?
都是面向对象的语言,都支持封装、继承和多态。Java 不提供指针来直接访问内存,程序内存更加安全。Java 的类是单继承的,C++ 支持多重继承;虽然 Java 的类不可以多继承,但是接口可以多继承。Java 有自动内存管理机制,不需要程序员手动释放无用内存。
4、什么是字节码?采用字节码的最大好处是什么?
Java 中引入了虚拟机的概念,即在机器和编译程序之间加入了一层抽象的虚拟的机器。这台虚拟的机器在任何平台上都提供给编译程序一个的共同的接口。编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟机代码转换为特定系统的机器码执行。在 Java 中,这种供虚拟机理解的代码叫做字节码(即扩展名为 `.class` 的文件),它不面向任何特定的处理器,只面向虚拟机。每一种平台的解释器是不同的,但是实现的虚拟机是相同的。Java 源程序经过编译器编译后变成字节码,字节码由虚拟机解释执行,虚拟机将每一条要执行的字节码送给解释器,解释器将其翻译成特定机器上的机器码,然后在特定的机器上运行。这也就是解释了 Java 的编译与解释并存的特点。采用字节码的好处:Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以 Java 程序运行时比较高效,而且,由于字节码并不专对一种特定的机器,因此,Java程序无须重新编译便可在多种不同的计算机上运行。
5、Java 运行的过程?
Java 源代码=> 编译器 => JVM 可执行的 Java 字节码(即虚拟指令)=> JVM => JVM 中解释器