目录
-
- java核心面试题
-
- 1、java个版本中更新的重要功能
- 2、java面向对象编程的特征
- 3、 [JVM](https://blog.csdn.net/issunmingzhi/article/details/104774941)
- 4、JDK、JVM、JRE区别
- 5、java为什么不支持多重继承
- 6、java重写(Overrider)和重载(Overload)有什么区别
- 7、访问权限修饰符
- 8、abstract:抽象
- 9、static关键字:静态
- 10、finally、finalize、final有什么区别
- 11、抽象类和接口有什么区别
- 12、java反射
- 13、java中的组合
- 14、组合和继承的优缺点
- 15、 java中的类加载器
- 16、super与this关键字
- 17、break和continue
- 18、垃圾回收
- 19、序列化和反序列化
- 20、解释内存中栈(stack)、堆(heap)和静态存储区的用法
- 21、java是值传递的
- 22、静态嵌套类和内部类的差别
- 23、==和equals的区别
- 24、基本类型和包装类型的区别
- 25、java八种基本数据类型
- 26、java字符串类
- 27、throw和throws的区别
- 28、java程序从源代码到运行的步骤
- 29、对象克隆
- 30、hashcode()和equals()
- 31、java创建对象的几种方式
- 32、[java四种引用](https://blog.csdn.net/issunmingzhi/article/details/104937017)
- 33、成员变量和局部变量的区别
- 34、[JSON序列化](https://blog.csdn.net/issunmingzhi/article/details/107468486)
- 35、[java异常处理](https://blog.csdn.net/issunmingzhi/article/details/105600956)
- 36、[java集合](https://blog.csdn.net/issunmingzhi/article/details/103489773)
- 杂谈
- 最后
java核心面试题
前段时间归纳总结了计网的面试知识计网面试题,收到了不少的好评,今天来总结下java面试中的核心问题,希望大家能够喜欢。
1、java个版本中更新的重要功能
1.1 java 14版本中更新的重要功能
- switch表达式
- instanceof增强表达式,预览功能
- 文本块,第二次预览
- Records,预览功能
1.2 java 13版本中更新的重要功能
- 文本块,预览功能
- switch表达式,预览功能
- Java Socket重新实现
- FileSystems.newFileSystem()方法
- 支持Unicode 12.1
- 可伸缩、低延迟的垃圾收集器改进,用于返回为使用的内存
1.3 java12版本中更新的重要功能
- JVM更新
- File.mismatch()方法
- 紧凑型数字格式
- String类中新增了一些方法,比如说indent()
1.4 java11版本中更新的重要功能
- 是java8以后的第二个商用版本
- 可以直接使用java命令运行java程序、源代码将会隐式编译和运行
- String类新增了两个读写方法,readString()和writeString()
- 可以在Lamdba表达式中使用var作为变量类型
1.5 java10版本中更新的重要功能
- 局部变量类型推断
- 增强java.util.Locale
- 提供了一组默认的根整数颁发机构(CA)
1.6 java9版本中更新的重要功能
- 模块系统
- 不可变的List、Set、Map的工厂方法
- 接口中可以有私有方法
- 垃圾收集器改进
1.5 java8版本中更新的重要功能
- 函数式编程和Lambda表达式
- Stream流
- java Date Time API
- 接口中可以使用默认方法和静态方法
2、java面向对象编程的特征
- 抽象
- 继承
- 封装
PS:java不是纯粹的面向对象编程语言,因为java支持基本数据类型,比如int、short、long。尽管它们有自己的包装器类型,但是他们的确不能算是对象
3、 JVM
4、JDK、JVM、JRE区别
- JDK:是提供给java开发人员的软件环境,包含JRE和一组开发工具;有几个版本:
- 标准版
- 企业版
- 微型版
- JRE:是JVM的实现,JRE是由JVM和Java二进制文件以及其他类组成,可以执行任何程序。JRE不包含Java编译器,调试器等任何开发工具
java编译器的任务是将java源代码转换为字节码,可以通过javac命令执行,因此它在JDK中,JRE不需要
5、java为什么不支持多重继承
防止出现菱形问题:ClassA和ClassB都继承了一个有特定方法的父类,该方法会被两个子类重写,当ClassC多重继承ClassA和ClassB时,不知道该调用那个重写方法。所以不支持多重继承
6、java重写(Overrider)和重载(Overload)有什么区别
- 重写:重写的两个方法名相同,方法参数的个数也相同,不过是一个在父类中,一个在子类中。
- 子类的异常不能超过父类
- 重载:重载的两个方法名相同,但方法参数的个数不相同,另外也不涉及到继承,两个方法在同一个类中。
- 与修饰符和返回值类型无关
- 体现的是编译时的多态性
总结:
- 编译器无法决定调用那个重写的方法,因为只从变量的类型上是无法判断的,要在运行时才能决定;单编辑器可以明确的知道该调用那个重载方法,因为引用类型是确定的,参数个数决定了该调用那个方法
- 多态针对的是重写而不是重载
7、访问权限修饰符
目前一共有四种:public、private、protected、default(缺省)
一个类只能被public或者default修饰
8、abstract:抽象
- abstract类不能实例化对象
- abstract类可以不包含abstract方法,但是只要有一个abstract方法,那么该类必须为abstract类
- abstract方法没有方法体,需要被override
- abstract类的子类要么实现其父类全部的abstract方法,要么也是一个abstract类
- abstract不能修饰属性
- abstract不能修饰局部变量