1.概述今天在项目中看到下面两行代码,看注释说是获取当前工作路径,之前也没有用过这种用法,比较好奇还能这样用,所以研究了一下源码。//获取当前工作路径Filefile=newFile("");StringcurrentWorkDirectory=file.getAbsolutePath();2.newFile("")解析首先,newFile()是创建一个虚拟的文件(File)对象,通过这个对象可以调用很多方法来获取文件和目录的相关信息。以下列出一些常用方法:2.1File的常用方法方法签名作用booleandelete()删除文件或目录voiddeleteOnExit()在jvm退出时删除文件
1.概述今天在项目中看到下面两行代码,看注释说是获取当前工作路径,之前也没有用过这种用法,比较好奇还能这样用,所以研究了一下源码。//获取当前工作路径Filefile=newFile("");StringcurrentWorkDirectory=file.getAbsolutePath();2.newFile("")解析首先,newFile()是创建一个虚拟的文件(File)对象,通过这个对象可以调用很多方法来获取文件和目录的相关信息。以下列出一些常用方法:2.1File的常用方法方法签名作用booleandelete()删除文件或目录voiddeleteOnExit()在jvm退出时删除文件
简介代理模式在Java中有很多应用场景,而代理又分静态代码和动态代理。静态代理是编写、编译或加载时织入代码实现,而动态代理则在运行时实现。简单而言,静态代理是在运行前就已经存在,而动态代理则在运行时才存在的。而常用的动态代理有两种实现:JDKProxy:JDKProxy是JDK自带的,不需要引入外部库,通过实现接口进行代理;CGLib:CGLib是引入第三方库,通过ASM技术来实现字节码的生成;通过继承的方式来实现。现在我们来通过代码分别展示一下两种方式。JDKProxyJDKProxy是通过实现接口来实现代理的,我们先定义一个接口:publicinterfaceFlyable{Stringf
简介代理模式在Java中有很多应用场景,而代理又分静态代码和动态代理。静态代理是编写、编译或加载时织入代码实现,而动态代理则在运行时实现。简单而言,静态代理是在运行前就已经存在,而动态代理则在运行时才存在的。而常用的动态代理有两种实现:JDKProxy:JDKProxy是JDK自带的,不需要引入外部库,通过实现接口进行代理;CGLib:CGLib是引入第三方库,通过ASM技术来实现字节码的生成;通过继承的方式来实现。现在我们来通过代码分别展示一下两种方式。JDKProxyJDKProxy是通过实现接口来实现代理的,我们先定义一个接口:publicinterfaceFlyable{Stringf
HashMap本文讲解的HashMap以及源代码都是基于JDK1.8背景引入数组优:读取修改快 劣:增加删除慢原因:数组可以根据下标直接定位到指定位置的数据进行读取和修改,但增加和删除需要开辟一个新数组并移动增加和删除后的数据到新数组并返回。链表优:增加删除快 劣:读取修改慢原因:链表增加和删除只需断开指定位置的两端节点,但读取的时候只能从头/尾开始往另一方向读取。拓展知识点:数组和链表迭代的方式不同ArrayList实现了RandomAccess接口这是一个标记接口,标注是否可以随机访问ArrayList使用数组实现,可以随机访问经过测试使用for循环遍历ArrayList更快而Li
HashMap本文讲解的HashMap以及源代码都是基于JDK1.8背景引入数组优:读取修改快 劣:增加删除慢原因:数组可以根据下标直接定位到指定位置的数据进行读取和修改,但增加和删除需要开辟一个新数组并移动增加和删除后的数据到新数组并返回。链表优:增加删除快 劣:读取修改慢原因:链表增加和删除只需断开指定位置的两端节点,但读取的时候只能从头/尾开始往另一方向读取。拓展知识点:数组和链表迭代的方式不同ArrayList实现了RandomAccess接口这是一个标记接口,标注是否可以随机访问ArrayList使用数组实现,可以随机访问经过测试使用for循环遍历ArrayList更快而Li
JDK9-17新功能30分钟详解-语法篇-var介绍JDK10JDK10新增了新的关键字——var,官方文档说作用是:EnhancetheJavaLanguagetoextendtypeinferencetodeclarationsoflocalvariableswithinitializers大体意思就是用于带有初始化的局部变量声明,废话不多说,我们直接用具体代码来展示实际的作用。ListlistBefore10=newArrayList();#在JDK10之前varlistAfter10=newArrayList();#在JDK10之后listBefore10.add("9");listA
JDK9-17新功能30分钟详解-语法篇-var介绍JDK10JDK10新增了新的关键字——var,官方文档说作用是:EnhancetheJavaLanguagetoextendtypeinferencetodeclarationsoflocalvariableswithinitializers大体意思就是用于带有初始化的局部变量声明,废话不多说,我们直接用具体代码来展示实际的作用。ListlistBefore10=newArrayList();#在JDK10之前varlistAfter10=newArrayList();#在JDK10之后listBefore10.add("9");listA
目录JDK1.8的新特性接口(interface)的默认方法与静态方法lambda表达式(是一个匿名函数)为什么需要使用lambda表达式举个例子,创建一个线程并调用,采用匿名内部类和lambda表达式的方式lambda表达式的使用条件应用场景函数接口及@FuncationInterfacelambda表达式基本语法lambda的简化规则匿名内部类的原理与lambda表达式的区别所需类型不一样类型的抽象方法数量不一样实现原理不一样常用的4个函数式接口方法引用(代码的简化,主要是函数式接口与需要引用的方法返回值与参数类型及数量一致)方法引用的三种格式stream流什么需要使用stream流、st
目录JDK1.8的新特性接口(interface)的默认方法与静态方法lambda表达式(是一个匿名函数)为什么需要使用lambda表达式举个例子,创建一个线程并调用,采用匿名内部类和lambda表达式的方式lambda表达式的使用条件应用场景函数接口及@FuncationInterfacelambda表达式基本语法lambda的简化规则匿名内部类的原理与lambda表达式的区别所需类型不一样类型的抽象方法数量不一样实现原理不一样常用的4个函数式接口方法引用(代码的简化,主要是函数式接口与需要引用的方法返回值与参数类型及数量一致)方法引用的三种格式stream流什么需要使用stream流、st