草庐IT

Java JDK Proxy和CGLib动态代理示例讲解

简介代理模式在Java中有很多应用场景,而代理又分静态代码和动态代理。静态代理是编写、编译或加载时织入代码实现,而动态代理则在运行时实现。简单而言,静态代理是在运行前就已经存在,而动态代理则在运行时才存在的。而常用的动态代理有两种实现:JDKProxy:JDKProxy是JDK自带的,不需要引入外部库,通过实现接口进行代理;CGLib:CGLib是引入第三方库,通过ASM技术来实现字节码的生成;通过继承的方式来实现。现在我们来通过代码分别展示一下两种方式。JDKProxyJDKProxy是通过实现接口来实现代理的,我们先定义一个接口:publicinterfaceFlyable{Stringf

HashMap源码分析 (基于JDK1.8)

HashMap本文讲解的HashMap以及源代码都是基于JDK1.8背景引入数组优:读取修改快 劣:增加删除慢原因:数组可以根据下标直接定位到指定位置的数据进行读取和修改,但增加和删除需要开辟一个新数组并移动增加和删除后的数据到新数组并返回。链表优:增加删除快 劣:读取修改慢原因:链表增加和删除只需断开指定位置的两端节点,但读取的时候只能从头/尾开始往另一方向读取。拓展知识点:数组和链表迭代的方式不同ArrayList实现了RandomAccess接口这是一个标记接口,标注是否可以随机访问ArrayList使用数组实现,可以随机访问经过测试使用for循环遍历ArrayList更快而Li

HashMap源码分析 (基于JDK1.8)

HashMap本文讲解的HashMap以及源代码都是基于JDK1.8背景引入数组优:读取修改快 劣:增加删除慢原因:数组可以根据下标直接定位到指定位置的数据进行读取和修改,但增加和删除需要开辟一个新数组并移动增加和删除后的数据到新数组并返回。链表优:增加删除快 劣:读取修改慢原因:链表增加和删除只需断开指定位置的两端节点,但读取的时候只能从头/尾开始往另一方向读取。拓展知识点:数组和链表迭代的方式不同ArrayList实现了RandomAccess接口这是一个标记接口,标注是否可以随机访问ArrayList使用数组实现,可以随机访问经过测试使用for循环遍历ArrayList更快而Li

【原创】JDK 9-17新功能30分钟详解-语法篇-var

JDK9-17新功能30分钟详解-语法篇-var介绍JDK10JDK10新增了新的关键字——var,官方文档说作用是:EnhancetheJavaLanguagetoextendtypeinferencetodeclarationsoflocalvariableswithinitializers大体意思就是用于带有初始化的局部变量声明,废话不多说,我们直接用具体代码来展示实际的作用。ListlistBefore10=newArrayList();#在JDK10之前varlistAfter10=newArrayList();#在JDK10之后listBefore10.add("9");listA

【原创】JDK 9-17新功能30分钟详解-语法篇-var

JDK9-17新功能30分钟详解-语法篇-var介绍JDK10JDK10新增了新的关键字——var,官方文档说作用是:EnhancetheJavaLanguagetoextendtypeinferencetodeclarationsoflocalvariableswithinitializers大体意思就是用于带有初始化的局部变量声明,废话不多说,我们直接用具体代码来展示实际的作用。ListlistBefore10=newArrayList();#在JDK10之前varlistAfter10=newArrayList();#在JDK10之后listBefore10.add("9");listA

JAVA入门基础_从零开始的培训_JDK1.8的新特性

目录JDK1.8的新特性接口(interface)的默认方法与静态方法lambda表达式(是一个匿名函数)为什么需要使用lambda表达式举个例子,创建一个线程并调用,采用匿名内部类和lambda表达式的方式lambda表达式的使用条件应用场景函数接口及@FuncationInterfacelambda表达式基本语法lambda的简化规则匿名内部类的原理与lambda表达式的区别所需类型不一样类型的抽象方法数量不一样实现原理不一样常用的4个函数式接口方法引用(代码的简化,主要是函数式接口与需要引用的方法返回值与参数类型及数量一致)方法引用的三种格式stream流什么需要使用stream流、st

JAVA入门基础_从零开始的培训_JDK1.8的新特性

目录JDK1.8的新特性接口(interface)的默认方法与静态方法lambda表达式(是一个匿名函数)为什么需要使用lambda表达式举个例子,创建一个线程并调用,采用匿名内部类和lambda表达式的方式lambda表达式的使用条件应用场景函数接口及@FuncationInterfacelambda表达式基本语法lambda的简化规则匿名内部类的原理与lambda表达式的区别所需类型不一样类型的抽象方法数量不一样实现原理不一样常用的4个函数式接口方法引用(代码的简化,主要是函数式接口与需要引用的方法返回值与参数类型及数量一致)方法引用的三种格式stream流什么需要使用stream流、st

01-JRE、JDK、JVM的区别

JDK、JRE、JVM的区别JDK(JavaSEDevelopmentKit)Java标准开发包,它提供了编译、运行Java程序所需的各种工具和资源,包括Java编译器、Java运行时环境,以及常用的Java类库等JRE(JavaRuntimeEnvironment)Java运行环境,用于解释执行Java的字节码文件。普通用户只需要安装JRE(JavaRuntimeEnvironment)来运行Java程序。而程序开发者必须安装JDK来编译、调试程序JVM(JavaVirtualMechinal)Java虚拟机,是JRE的一部分。它是整个Java实现跨平台的最核心部分,负责解释执行字节码文件,

01-JRE、JDK、JVM的区别

JDK、JRE、JVM的区别JDK(JavaSEDevelopmentKit)Java标准开发包,它提供了编译、运行Java程序所需的各种工具和资源,包括Java编译器、Java运行时环境,以及常用的Java类库等JRE(JavaRuntimeEnvironment)Java运行环境,用于解释执行Java的字节码文件。普通用户只需要安装JRE(JavaRuntimeEnvironment)来运行Java程序。而程序开发者必须安装JDK来编译、调试程序JVM(JavaVirtualMechinal)Java虚拟机,是JRE的一部分。它是整个Java实现跨平台的最核心部分,负责解释执行字节码文件,

Mac OS安装IDEA和JDK(超级详细教程)

一、首先安装IDEA(使用教育账号)在官网进行下载:Idea官网地址直接下载我下载的是applesilicon的,这个取决于电脑,如果Intel的就下载上面的镜像下载好了以后,直接点击下载好的那个包,就完成了。二、下载安装JDK到Oracle官网直接下载安装包:官网网址:SE:Standardedition,标准版EE:Enterpriseedition,企业版ME:Microedition,是为机顶盒、移动电话和PDA之类嵌入式消费电子设备提供的Java语言平台同意协议后即可下载打开下载好的文件,点击运行一直点继续就行下一步进行环境配置:首先打开终端:1.查看安装路径:/Library/Ja