在面试中将基础问题回答好就是成功的一半。
我总结了50道经典的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 中解释器 => 机器可执行的二进制机器码 => 程序运行
6、Java是动态类型语言还是静态类型语言?
动态类型语言和静态类型语言两者的却别就在于对类型的检查是在编译期还是在运行期,满足前者就是静态类型语言,反之则是动态类型语言。 直白来说静态语言是判断变量自身的类型信息;动态类型语言是判断变量值的类型信息,变量设有类型信息,变量值才有类型信息,这是动态语言的一个重要特征。 Java是静态类型语言(尽管lambda表达式为其增加了动态特性),js,python是动态类型语言。
面向对象
7.什么是面向对象?
面向对象是一种思想,世间万物都可以看做一个对象,这里只讨论面向对象编程(OOP),Java 是一个支持并发、基于类和面向对象的计算机高级编程语言。面向对象软件开发具有以下优点: 代码开发模块化,更易维护和修改。 代码复用性强。 增加代码的可读性。
8.请说说面向对象的特征?封装、继承、多态分别说一下,以及它们的好处?<