1. Java语言有哪些特点?
2. Java和C++有什么关系,它们有什么区别?
3. JVM、JRE和JDK的关系是什么?
4. 什么是字节码?采用字节码的好处是什么?
5. Oracle JDK 和 OpenJDK 的区别是什么?
6. Java有哪些数据类型?
7. switch 是否能作用在 byte 上,是否能作用在 long 上,是否能作用在 String 上?
8. 访问修饰符public、private、protected、以及不写(默认)时的区别?
9. break ,continue ,return 的区别及作用?
10. final、finally、finalize的区别?
11. 为什么要用static关键字?
12. ”static”关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法?
13. 是否可以在static环境中访问非static变量?
14. static静态方法能不能引用非静态资源?
15. static静态方法里面能不能引用静态资源?
16. 非静态方法里面能不能引用静态资源?
17. java静态变量、代码块、和静态方法的执行顺序是什么?
18. 面向对象和面向过程的区别?
19. 讲讲面向对象三大特性
20. Java语言是如何实现多态的?
21. 重载(Overload)和重写(Override)的区别是什么?
22. 重载的方法能否根据返回值类型进行区分?
23. 构造器(constructor)是否可被重写(override)?
24. 抽象类和接口的区别是什么?
25. 抽象类能使用 final 修饰吗?
26. java 创建对象有哪几种方式?
27. 什么是不可变对象?好处是什么?
28. 能否创建一个包含可变对象的不可变对象?
29. 值传递和引用传递的区别的什么?为什么说Java中只有值传递?
30. == 和 equals 区别是什么?
31. 介绍下hashCode()?
32. 为什么要有 hashCode?
33. hashCode(),equals()两种方法是什么关系?
34. 为什么重写 equals 方法必须重写 hashcode 方法 ?
35. String,StringBuffer, StringBuilder 的区别是什么?
36. String为什么要设计成不可变的?
37. 字符型常量和字符串常量的区别?
38. 什么是字符串常量池?
39. String str="aaa"与 String str=new String("aaa")一样吗?new String(“aaa”);创建了几个字符串对象?
40. String 是最基本的数据类型吗?
41. String有哪些特性?
42. 在使用 HashMap 的时候,用 String 做 key 有什么好处?
43. 包装类型是什么?基本类型和包装类型有什么区别?
44. 解释一下自动装箱和自动拆箱?
45. int 和 Integer 有什么区别?
46. 两个new生成的Integer变量的对比
47. Integer变量和int变量的对比
48. 非new生成的Integer变量和new Integer()生成变量的对比
49. 两个非new生成的Integer对象的对比
50. 什么是反射?
51. 反射机制的优缺点有哪些?
52. 如何获取反射中的Class对象?
53. Java反射API有几类?
54. 反射使用的步骤?
55. 为什么引入反射概念?反射机制的应用有哪些?
包括 Java基础、Java并发、JVM、MySQL、Redis、Spring、MyBatis、Kafka、计算机操作系统、计算机网络、系统设计、分布式、Java 项目实战等面试题
1. Java语言有哪些特点?
- 面向对象(封装,继承,多态);
- 平台无关性,平台无关性的具体表现在于,Java 是“一次编写,到处运行(Write Once,Run any Where)”的语言,因此采用 Java 语言编写的程序具有很好的可移植性,而保证这一点的正是 Java 的虚拟机机制。在引入虚拟机之后,Java 语言在不同的平台上运行不需要重新编译。
- 可靠性、安全性;
- 支持多线程。C++ 语言没有内置的多线程机制,因此必须调用操作系统的多线程功能来进行多线程程序设计,而 Java 语言却提供了多线程支持;
- 支持网络编程并且很方便。Java 语言诞生本身就是为简化网络编程设计的,因此 Java 语言不仅支持网络编程而且很方便;
- 编译与解释并存;
2. Java和C++有什么关系,它们有什么区别?
都是面向对象的语言,都支持封装、继承和多态;
C++ 支持指针,而 Java 没有指针的概念;
C++ 支持多继承,而 Java 不支持多重继承,但允许一个类实现多个接口;
Java 自动进行无用内存回收操作,不再需要程序员进行手动删除,而 C++ 中必须由程序释放内存资源,这就增加了程序员的负担。
Java 不支持操作符重载,操作符重载则被认为是 C++ 的突出特征;
Java 是完全面向对象的语言,并且还取消了 C/C++ 中的结构和联合,使编译程序更加简洁;
C 和 C++ 不支持字符串变量,在 C 和 C++ 程序中使用“Null”终止符代表字符串的结束。在 Java 中字符串是用类对象(String 和 StringBuffer)来实现的;
goto 语句是 C 和 C++ 的“遗物”,Java 不提供 goto 语句,虽然 Java 指定 goto 作为关键字,但不支持它的使用,这使程序更简洁易读;
3. JVM、JRE和JDK的关系是什么?
JDK是(Java Development Kit)的缩写,它是功能齐全的 Java SDK。它拥有 JRE 所拥有的一切,还有编译器(javac)和工具(如 javadoc 和 jdb)。它能够创建和编译程序。
JRE是Java Runtime Environment缩写,它是运行已编译 Java 程序所需的所有内容的集合,包括 Java 虚拟机(JVM),Java 类库,java 命令和其他的一些基础构件。但是,它不能用于创建新程序。
JDK包含JRE,JRE包含JVM。
无4. 什么是字节码?采用字节码的好处是什么?
这个问题,面试官可以扩展提问,Java 是编译执行的语言,还是解释执行的语言?
Java之所以可以“一次编译,到处运行”,一是因为JVM针对各种操作系统、平台都进行了定制,二是因为无论在什么平台,都可以编译生成固定格式的字节码(.class文件)供JVM使用。因此,也可以看出字节码对于Java生态的重要性。
之所以被称之为字节码,是因为字节码文件由十六进制值组成,而JVM以两个十六进制值为一组,即以字节为单位进行读取。在Java中一般是用javac命令编译源代码为字节码文件,一个.java文件从编译到运行的示例如图所示。
Java语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以Java程序运行时比较高效,而且,由于字节码并不专对一种特定的机器,因此,Java程序无须重新编译便可在多种不同的计算机上运行。
5. Oracle JDK 和 OpenJDK 的区别是什么?
可能在看这个问题之前很多人和我一样并没有接触和使用过 OpenJDK 。下面通过我通过我收集到一些资料对你解答这个被很多人忽视的问题。
- Oracle JDK 版本将每三年发布一次,而 OpenJDK 版本每三个月发布一次;
- OpenJDK 是一个参考模型并且是完全开源的,而 Oracle JDK 是OpenJDK 的一个实现,并不是完全开源的;
- Oracle JDK 比 OpenJDK 更稳定。OpenJDK 和 Oracle JDK 的代码几乎相同,但 Oracle JDK 有更多的类和一些错误修复。因此,如果您想开发企业/商业软件,建议选择 Oracle JDK,因为它经过了彻底的测试和稳定。某些情况下,有些人提到在使用 OpenJDK 可能会遇到了许多应用程序崩溃的问题,但是,只需切换到 Oracle JDK 就可以解决问题;
- 在响应性和 JVM 性能方面,Oracle JDK 与 OpenJDK 相比提供了更好的性能;
- Oracle JDK 不会为即将发布的版本提供长期支持,用户每次都必须通过更新到最新版本获得支持来获取最新版本;
- Oracle JDK 根据二进制代码许可协议获得许可,而 OpenJDK 根据 GPLv2 许可获得许可。
6. Java有哪些数据类型?
Java 语言的数据类型分为两种:基本数据类型和引用数据类型。
基本数据类型包括 boolean(布尔型)、float(单精度浮点型)、char(字符型)、byte(字节型)、short(短整型)、int(整型)、long(长整型)和 double (双精度浮点型)共 8 种,如下图所示。
无效的图片地址
引用数据类型建立在基本数据类型的基础上,包括数组、类和接口。引用数据类型是由用户自定义,用来限制其他数据的类型。另外,Java 语言中不支持 C++ 中的指针类型、结构类型、联合类型和枚举类型。
7. switch 是否能作用在 byte 上,是否能作用在 long 上,是否能作用在 String 上?
Java5 以前 switch(expr)中,expr 只能是 byte、short、char、int。
从 Java 5 开始,Java 中引入了枚举类型, expr 也可以是 enum 类型。
从 Java 7 开始,expr还可以是字符串(String),但是长整型(long)在目前所有的版本中都是不可以的。
8. 访问修饰符public、private、protected、以及不写(默认)时的区别?
Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。
- default (即默认,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。
- private : 在同一类内可见。使用对象:变量、方法。注意:不能修饰类(外部类)
- public : 对所有类可见。使用对象:类、接口、变量、方法
- protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。注意:不能修饰类(外部类)。
9. break ,continue ,return 的区别及作用?
- break 跳出总上一层循环,不再执行循环(结束当前的循环体)
- continue 跳出本次循环,继续执行下次循环(结束正在执行的循环 进入下一个循环条件)
- return 程序返回,不再执行下面的代码(结束当前的方法 直接返回)
10. final、finally、finalize的区别?
final 用于修饰变量、方法和类。
final 变量:被修饰的变量不可变,不可变分为引用不可变和对象不可变,final 指的是引用不可变,final 修饰的变量必须初始化,通常称被修饰的变量为常量。
final 方法:被修饰的方法不允许任何子类重写,子类可以使用该方法。
final 类:被修饰的类不能被继承,所有方法不能被重写。
finally 作为异常处理的一部分,它只能在 try/catch 语句中,并且附带一个语句块表示这段语句最终一定被执行(无论是否抛出异常),经常被用在需要释放资源的情况下,System.exit (0) 可以阻断 finally 执行。
finalize 是在 java.lang.Object 里定义的方法,也就是说每一个对象都有这么个方法,这个方法在 gc 启动,该对象被回收的时候被调用。
一个对象的 finalize 方法只会被调用一次,finalize 被调用不一定会立即回收该对象,所以有可能调用 finalize 后,该对象又不需要被回收了,然后到了真正要被回收的时候,因为前面调用过