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?
项目的需要:
- java现存的大部分第三方框架对jdk没特殊要求
- jdk升级可能会舍弃一部分旧有的类和方法,导致不兼容
- 要看值得不值得,在兼容的前提下,项目jdk有没有升级的必要性
- 有时候,这个事不是程序员所能决定的
- Java 异常机制
在java中,所有的异常都有一个共同的祖先 Throwable类。Throwable类有两个子类,一个是Error类,一个是Exception。在java中能通过代码处理的我们叫做异常,而我们不能处理的才叫做错误。
- 错误指的是:JVM运行错误,栈空间用尽,类定义错误等等非常严重的问题。
- 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中使用具体策略进行大小比较。
Java常见问题-基础的更多相关文章
- Java之--Java语言基础组成—数组
Java语言基础组成-数组 Java语言由8个模块构成,分别为:关键字.标识符(包名.类名.接口名.常量名.变量名等).注释.常量和变量.运算符.语句.函数.数组. 本片主要介绍Java中的数组,数组 ...
- 第二十六节:复习Java语言基础-Java的概述,匿名对象,封装,构造函数
Java基础 Java语言概述 Java语言 语言 描述 javaee 企业版 javase 标准版 javame 小型版 JDK JDK(Java开发工具包) Java语言 语言 Java语言 Ja ...
- day01<计算机基础知识&Java语言基础>
计算机基础知识(计算机概述) 计算机基础知识(软件开发和计算机语言概述) 计算机基础知识(人机交互) 计算机基础知识(键盘功能键和快捷键) 计算机基础知识(如何打开DOS控制台) 计算机基础知识(常见 ...
- Java以基础类库
Java以基础类库JFC(Java Foundation Class)的形式为程序员提供编程接口API,类库中的类按照用途归属于不同的包中. (一)java.lang包 Java最常用的包都属于该包, ...
- Java SE 基础:注释
Java SE 基础:注释 一.注释定义 用于解释说明程序的文字. 二.注释的作用 1.解释说明程序,提高程序的可读性 2.可以帮助我们调试程序:通过注释代码块,检测错误位置 三.格式 1.单行注释 ...
- Java SE 基础:标识(zhì)符
Java SE 基础:标识(zhì)符 一.标识符定义 标识符,就是给类.接口.方法.变量等起名字时的字符序列 二.组成规则与注意事项 1.组成规则 英文大小写字母 数组 $ 和 _ 2.注意事项 不 ...
- Java SE 基础:常用关键字
Java SE 基础:常用关键字 常用关键字表
- java IO基础操作
java IO基础,通熟易懂,好久没复习java 基础了.这里是传送门... http://www.cnblogs.com/nerxious/archive/2012/12/15/2818848.ht ...
- Java学习总结(二)----Java语言基础
1. Java语言基础 2.1 关键字 定义:被java语言赋予特殊含义的单词 特点:关键字中的字母都为小写 用于定义数据类型的关键字 class,interface,byte,short,i ...
- [转]Java多线程干货系列—(一)Java多线程基础
Java多线程干货系列—(一)Java多线程基础 字数7618 阅读1875 评论21 喜欢86 前言 多线程并发编程是Java编程中重要的一块内容,也是面试重点覆盖区域,所以学好多线程并发编程对我们 ...
随机推荐
- Docker 必知必会3----使用自己制作的镜像
前面的两篇文章分别讲了,docker的基础概念,设计思路以及docker的基本操作.感兴趣的同学可以查阅: https://www.cnblogs.com/jilodream/p/18177695ht ...
- toLua中Lua调用C#中的类
toLua中Lua调用C#: [7]Lua脚本调用C#中的class 准备工作:打算在Lua脚本中使用Debug,使用lua调用C#脚本,需要绑定LuaState和自定义添加Debug --- --- ...
- HC32L110(六) AS06-VTB07H V5.0测试板AT指令固件
目录 HC32L110(一) HC32L110芯片介绍和Win10下的烧录 HC32L110(二) HC32L110在Ubuntu下的烧录 HC32L110(三) HC32L110的GCC工具链和VS ...
- Linux安装ElastSearch
Linux安装ES 准备好Linux系统,软件安装前需要对当前系统做一些优化配置 系统配置修改 一.内存优化 在/etc/sysctl.conf添加如下内容: fs.file-max=655360 系 ...
- linux下vim的使用以及高效率的技巧
目录 一.关于vim编辑器 二.vim编辑器的模式 三.一般模式下的基础操作 四.V模式(列模式)的基础操作 五.命令模式下的基础操作 六.自定义vim环境 七.vim同时打开多个文件 八.比较两个文 ...
- form-create-designer-naiveui
这个是 Vue3 版本 form-create-designer-naiveui 是基于 @form-create/naive-ui vue3版本实现的表单设计器组件.可以通过拖拽的方式快速创建表单, ...
- Chart.js (v2.9.4) 2-主要的函数和对象介绍
Color() :主要负责渲染图表时候,针对颜色处理相关函数 helpers_core:工具对象,提供了基础的工具函数功能,遍历数组,扩展对象,合并对象,克隆对象等等. core_defaults:负 ...
- iPhoneX 适配总结
一.iPhoneX适配第一步,根据iPhoneX的屏幕像素大小,引入对应的启动图,告诉系统,app兼容iPhoneX 需要在launchimage中引入一张 1125*2436的png,app将默认展 ...
- 深度学习论文翻译解析(二十二):Uniformed Students Student-Teacher Anomaly Detection With Discriminative Latent Embbeddings
论文标题:Uniformed Students Student-Teacher Anomaly Detection With Discriminative Latent Embbeddings 论文作 ...
- 算法学习笔记(30):Kruskal 重构树
Kruskal 重构树 这是一种用于处理与最大/最小边权相关的一个数据结构. 其与 kruskal 做最小生成树的过程是类似的,我们考虑其过程: 按边权排序,利用并查集维护连通性,进行合并. 如果我们 ...