Java常见问题-基础

  • JDK版本新特性:
JDK1.4 正则表达式,异常链,NIO,日志类,XML解析器,XLST转换器
JDK1.5 自动装箱、泛型、动态注解、枚举、可变长参数、遍历循环
JDK1.6 提供动态语言支持、提供编译API和卫星HTTP服务器API,改进JVM的锁,同步垃圾回收,类加载
JDK1.7 提供GI收集器、加强对非Java语言的调用支持(JSR-292,升级类加载架构
JDK8   Lambda 表达式、方法引用、默认方法、新工具、Stream API、Date Time API 、Optional 类、Nashorn, JavaScript 引擎
JDK9  1、集合加强;2、私有接口方法;3、垃圾收集机制;4、I/O流加强;5、JShell工具
JDK10 1、局部变量类型推断;2、线程本地握手;3、GC改进和内存管理;
JDK11 1、字符串加强;2、HttClient Api;3、用于 Lambda 参数的局部变量语法;4、ZGC
JDK12 1、Switch Expressions;2、Shenandoah GC;
JDK13 1、switch优化更新;2、文本块升级;3、重新实现旧版套接字API;4、核心库/java.util中:I18N;5、取消使用未使用的内存
JDK14 1、switch优化变更为最终版;2、垃圾回收相关;3、instanceof的模式匹配(预览版);4、删除了安全库java.security.acl API;5、货币格式(优化)
  • Java8的新特性

1、接口中的默认方法和静态方法
默认方法就像一个普通Java方法,只是方法用default关键字修饰,其目的是为了解决接口的修改与已有的实现不兼容的问题。
静态方法就像一个普通Java静态方法,但方法的权限修饰只能是public或者不写。默认方法和静态方法使Java的功能更加丰富。
2、函数式接口和Lambda表达式
函数式接口是为Java 8中的lambda而设计的,lambda表达式的方法体其实就是函数接口的实现。“lambda表达式”是一段可以传递的代码,因为他可以被执行一次或多次。

3、移除了永久带,取而代之的是metaSpace(元空间)。
4、Stream API
一个Stream表面上与一个集合很类似,允许你改变和获取数据,但实际上却有很大区别:
(1)Stream自己不会存储元素。元素可能被存储在底层的集合中,或者根据需要产生出来。
(2)Stream操作符不会改变源对象。相反,他们返回一个持有新结果的Stream。

  • 为什么很多公司选择不升级JDK版本,仍然使用JDK8?

项目的需要:

  1. java现存的大部分第三方框架对jdk没特殊要求
  2. jdk升级可能会舍弃一部分旧有的类和方法,导致不兼容
  3. 要看值得不值得,在兼容的前提下,项目jdk有没有升级的必要性
  4. 有时候,这个事不是程序员所能决定的
  • Java 异常机制

在java中,所有的异常都有一个共同的祖先 Throwable类。Throwable类有两个子类,一个是Error类,一个是Exception。在java中能通过代码处理的我们叫做异常,而我们不能处理的才叫做错误。

  1. 错误指的是:JVM运行错误,栈空间用尽,类定义错误等等非常严重的问题。
  2. Exception主要负责处理类似:空指针、除数为零、数组越界这类问题。

(1)RunTimeException运行时异常,表示那些逻辑性错误,可以避免。无法预料,改正就可以,无需抛出或处理。

NullPointerException(空指针异常)、IndexOutOfBoundsException(下标越界异常)、ClassCastException(类转换异常)、NumberFormatException(数字格式异常)、IllegalArgumentException(传递非法参数异常) 、ArrayStoreException(数据存储异常,操作数组时类型不一致)

 (2)非运行时异常表示有可能发生的异常,我们需要声明。被强制必须抛出或处理来保证程序的安全性。

为了防止代码在运行时出现问题,java强制规定:非运行时异常必须被处理。

  • Maven 解决 jar 冲突

遇到冲突的时候第一步要找到maven加载的是什么版本的jar包,通过们mvn dependency:tree查看依赖树,通过maven的依赖原则来调整依赖在pom文件的申明顺序。

  • comparable接口和comparator的区别

①、Comparable位于包java.lang下,而Comparator位于包java.util下。
②、Comparable接口将比较代码(重写compareTo(T t)方法)嵌入需要进行比较的类的自身代码中,而Comparator接口在一个独立的类中实现比较(重写compare(T t1, T t2)方法)。
③、Comparable接口强行对实现它的每个类的对象进行整体排序(自然排序),而Comparator接口不强制进行自然排序,可以指定排序顺序。
④、如果前期类的设计没有考虑到类的Compare问题而没有实现Comparable接口,后期可以通过Comparator接口来实现比较算法进行排序。
其中Comparator接口相当于策略模式的抽象接口,具体的比较器实现类是具体的策略实现,集合操作类相当于Context ,在Context中使用具体策略进行大小比较。

 

posted @ 2021-04-02 09:45  zhαojh  阅读(40)  评论(0编辑  收藏  举报