Java基础
文章平均质量分 92
Java基础
墩墩分墩
博主的一天很枯燥,吃吃饭、睡睡觉、健健身、跑跑步、打打王者、养养猫、溜溜狗、写写博客、打打豆豆啥的。。。。。。
展开
-
【Java基础】了解Java安全体系JCA,使用BouncyCastle的ED25519算法生成密钥对、数据签名
- 通过JCA统一的、可扩展的一套`用于实现加密服务的基础功能基础API`,,打包成一个`Provider服务( 安全提供者),也就是一个实现JCA标准的jar包` , **可以动态地加载到Java运行环境中。** - 而开发者在使用只需根据JCA框架提供的`统一接口来调用各种第三方服务商加密算法`、密钥管理等功能,而无需关心底层的实现细节原创 2024-03-22 11:31:39 · 2008 阅读 · 3 评论 -
【Java基础】JVM关闭回调函数(ShutdownHook)的应用场景
ShutdownHook就是一个简单的 已初始化 但是 未启动的 线程。当虚拟机开始关闭时,它将会调用所有已注册ShutdownHook的回调函数,这些回调函数执行是并发的,执行顺序是不确定的。作用:JVM退出时执行的业务逻辑(注意:ShutdownHook方法参数必须是Thread的子类,由此得知,ShutdownHook是异步执行的。添加移除需要注意的是,在ShutdownHook里执行的操作应当是不太耗时的。原创 2024-01-25 17:52:12 · 1229 阅读 · 0 评论 -
【Java基础】JDK下载安装及环境配置完整教程
Jdk(Java development kit): JDK是 Java语言的软件开发工具包,主要用于移动设备,嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。在进行java开发的时候,都要先安装好JDK,JRE,以及其他java工具。没有JDK的话,无法编译Java程序(指java源码.java文件),如果想只运行Java程序(指class或jar或其它归档文件),要确保已安装相应的JRE。原创 2023-10-20 10:49:43 · 566 阅读 · 0 评论 -
【Java基础】Java8新特性—快速学会常见的函数式接口及应用
有且只有一个抽象方法的接口`被称为函数式接口,函数式接口适用`于函数式编程`的场景,Lambda就是Java中函数式编程的体现,可以使用`Lambda表达式创建一个函数式接口的对象`,一定要确保接口中`有且只有一个抽象方法`,这样Lambda才能顺利的进行推导函数式接口中只允许有一个`抽象方法`,但是可以有多个`static方法和default方法`原创 2023-07-11 17:22:33 · 629 阅读 · 0 评论 -
【Java基础】符号位、原码、补码、反码、位逻辑运算符、位移运算符、复合位赋值运算符
首先 我们看到的数,都是以二进制的形式在计算机下操作的。并且位运算符的操作对象是补码。符号位:如8位数,左边第一位是符号位,剩余7位表示数据大小(1为负,0为正正数: 原码=反码=补码负数: 原码 ---->反码 (取反) ---->补码 (+1)原码:将一个整数,转换成二进制,就是其原码。反码:正数的反码就是其原码;负数的反码是将原码中,除符号位以外,每一位取反。补码:正数的补码就是其原码;负数的反码+1就是补码二进制是一种数字编码方式,由0和1两个数字组成。原创 2023-07-11 14:53:57 · 3995 阅读 · 1 评论 -
【Java工具类】学会MVEL2.0,表达式解析再不怕
MVEL为 `MVFLEX Expression Language`(MVFLEX表达式语言)的缩写,是一种基于`Java语法`,但又有着显著不同的表达式语言。与Java不同的是,MVEL是一种`动态/静态可嵌入`的表达式语言,意味着源代码中不需要`类型限定`。- 简单说是一种`表达式解析器。`我们可以自己写一些表达式,交给mvel进行解析计算,得到这个表达式计算的值。原创 2023-01-29 15:50:43 · 5767 阅读 · 0 评论 -
【Java基础】UML类图及各种线代表的关系含义总结
**聚合和组合的区别则在语义和实现上都有差别:**- `组合`的两个对象之间生命周期有很大的关联,被组合的对象在组合对象创建的同时或者创建之后创建,在组合对象销毁之前销毁,一般来说被组合对象不能脱离组合对象独立存在,而且也只能属于一个组合对象;- `聚合`则不一样,被聚合的对象可以属于多个聚合对象。**再举例子来说:**- 你和你的朋友属于`关联关系`,因为你和你的朋友之间的关系是平等的,关联关系只是表示一下两个对象之间的一种简单的联系而已,就像我有一个朋友- 你和你借的书属于`聚合关系`,第原创 2021-07-12 15:47:28 · 8330 阅读 · 8 评论 -
【Java基础】从Java语言层面理解BIO,NIO,AIO(二)
- **BIO方式**: 适用于`连接数目比较小且固定的架构`,这种方式对服务器资源要求比较高,并发局限于应用中,`JDK1.4以前的唯一选择`,但程序直观简单易理解。- **NIO方式**: 适用于`连接数目多且连接比较短(轻操作)的架构`,比如`聊天服务器`,并发局限于应用中,编程比较复杂,`JDK1.4开始支持`。- **AIO方式**: 使用于`连接数目多且连接比较长(重操作)的架构`,比如`相册服务器`,充分调用OS参与并发操作,编程比较复杂,`JDK7开始支持`。原创 2021-07-10 16:02:23 · 337 阅读 · 5 评论 -
【Java基础】从网络层面理解BIO,NIO,AIO(一)
一.网络请求的本质一个软件或者服务的运行,需要三个重要的资源,分别是CPU,内存,IOCPU提供了逻辑能力或计算能力内存提供了数据暂存能力IO则提供了与其它数据存储介质(磁盘/数据库/网络/内存)交换数据的能力。一个软件或者服务它的本质 : 就是利用CPU和内存,和其它介质进行数据交换,数据交换指的是读或者写。再延伸一点,网络请求,它的本质其实就是网络IO。 和我们通过IO读取硬盘...原创 2021-07-09 14:44:26 · 282 阅读 · 0 评论 -
【Java基础】使用NumberFormat 、DecimalFormat进行数字格式化
DecimalFormat 是 NumberFormat 的一个具体子类,`用于格式化十进制数字。包含一个模式和一组符号`。- **主要靠 # 和 0 两种占位符号来指定数字长度**。- `“0”`:表示一位数值,如没有,显示0。 - 如“0000.0000”,整数位或小数位>4,按实际输出,<4整数位前面补0小数位后面补0,凑足4位。 - `“#”`:表示任意位数的整数。如没有,则不显示。在小数点位使用,只表示一位小数,超出部分四舍五入。 - 如:“#”:无小数,小数部分四舍五入。“.#”:原创 2021-06-19 11:51:31 · 2052 阅读 · 0 评论 -
【Java基础】printf()方法使用
printf支持的格式目前printf支持以下格式格式描述%c单个字符%d十进制整数%f十进制浮点数%o八进制数%s字符串%u无符号十进制数%x十六进制数%%输出百分号%printf的格式控制的完整格式:% - 0 m.n l或h 格式字符下面对组成格式说明的各项加以说明:%:表示格式说明的起始符号,不可缺少。-:有-表示左对齐输出,如省略表示右对齐输出。0:有0表示指定空位填0,如省略表示指定空位原创 2021-06-19 11:13:32 · 683 阅读 · 0 评论 -
【Java基础】JNI机制开发指南—认识JNI原理及如何用 Java 调用 C 的动态链接库
java是一种跨平台的语言,那么它为什么能做到跨平台,`实际上是因为不同的平台(windows、linux、mac-os)java有不同的解释器,对应java不同的虚拟机(JVM)`,这样,就可以做到`源代码文件(.java)只需一次编译成字节码文件(.class),就可以在不同的平台运行 `。而java不是万能的,有些操作需要调用`操作系统平台API`实现,`JNI`就是Java用于和`其他语言`进行互操作的API,称为`Java Native Interface (Java本地接口)`原创 2021-05-23 16:54:44 · 3784 阅读 · 5 评论 -
【Java基础】SPI机制开发指南—JavaSPI和SpringSPI机制的使用及源码浅析
SPI 全称为` Service Provider Interface`,JDK内置的一种`动态的服务提供发现机制`。**SPI 的本质**是将`接口实现类`的`全限定名(包名+类名)配置在文件中`,并由`服务加载器ServiceLoader读取配置文件来加载实现类`。`实现在运行时动态为接口替换实现类`。可以理解为 **`运行时动态加载接口的实现类`**。实际上就是“`基于接口的编程+策略模式+配置文件`”组合实现的一种**动态加载机制**原创 2021-05-17 15:47:09 · 450 阅读 · 1 评论 -
【Java基础】JavaDoc注释标签大全
文章目录一.Java注释方式二.JavaDoc注释用法三.JavaDoc注释会输出什么四.JavaDoc注释常用标签1.@see2.{@link}3.其他JavaDoc标签4.文档注释模板一.Java注释方式Java 支持三种注释方式。分别是单号注释 //多行注释 /* */文档注释,它以 /** 开始,以 */结束。可以使用 javadoc 工具软件来生成信息,并输出到HTML文件中。二.JavaDoc注释用法在开始的 /**之后,第一行或几行是关于类、变量和方法的主要描述。之后原创 2021-05-09 15:19:14 · 4490 阅读 · 0 评论 -
【Java基础】swing-图形界面学习(下)
八.菜单GUI的菜单分为 菜单栏JMenuBar,菜单JMenu和菜单项JMenuItem8.1.菜单栏和菜单 @Test public void MenuAndJMenuBar() throws InterruptedException { JFrame frame = new JFrame("LoL"); frame.setSize(400, 300); frame.setLocation(200, 200); //原创 2020-11-23 15:46:38 · 7239 阅读 · 3 评论 -
【Java基础】swing-图形界面学习(上)
- Swing 是一个为Java设计的GUI工具包。Swing开发的图形界面比AWT更加轻量级,使用100%的java开发不再依赖本地图形界面可以在所有平台保持相同的运行效果。优点:1. Swing组建不再依赖本地平台GUI无需采用各种平台的GUI交集,因此Swing提供大量图形界面组件2. Swing组建不再依赖本地GUI不会产生平台相关bug3. Swing组件在各种平台上运行可以保证具有相同的图形界面外观4. Swing采用MVC(model-view-controller,模型-视图-原创 2020-11-23 13:48:30 · 860 阅读 · 0 评论 -
【Java基础】IDEA生成可执行Jar包并转换成exe文件在Window上运行(含Jre)
IDEA打包java可执行jar包在项目上鼠标右键 --> Open Module SettingsArtifacts —> + —>JAR—>From modules with dependencies…Main Class是你这个项目(脚本)的main所在的类,也就是要运行的类,选一个Module: 要打包的项目Main Class: main()所在的类Directory for MATE-INF/MANIDEST.MF :MATE-INF/MA原创 2020-11-18 11:45:27 · 1768 阅读 · 1 评论 -
【Java基础】递归的理解及应用场景
1. **`方法自己调用自己`称为递归** > 注意事项: >1. 要有出口,(是一个判断条件,一般要和我们if语句搭钩); > 2. 次数不宜过多(因为方法调用要开栈,栈内存是有限的,很容易溢出); >3. 如果递归不结束,则会报错。`java.lang.StackOverflowError: 栈内存溢出错误` >4. 递归会内存溢出的原因:`方法不停地进栈而不出栈,导致栈内存不足。` >5. 递归并不能解决所有的问题。有的问题适合使用递归而不是循环。如果使用循环并不困难的话,最好使用循环.原创 2020-10-12 16:18:02 · 2897 阅读 · 3 评论 -
【Java基础】Runtime类使用
Runtime类是什么?每个java程序在运行时相当于启动了一个JVM进程,每个JVM进程都对应一个RunTime实例。RunTime是JVM负责实例化的,且使用了单例设计模式,必须通过RunTime内部的getRuntime()方法获取实例化对象通过Runtime对象的方法可以查看Java虚拟机的状态以及控制虚拟机的行为。System许多函数的使用都是等价于Runtime.getRuntime(),可见System和Runtime之间的联系是多么密切,实际上System是依赖于R原创 2020-10-05 14:07:10 · 459 阅读 · 0 评论 -
【Java基础】理解强引用、软引用、弱引用、虚引用、引用队列
文章目录一.Java中的四种引用二.Java为什么要设计这四种引用三.了解四种引用类型1.强引用2.软引用3.弱引用4.引用队列5.虚引用(对象回收和跟踪)6.总结一.Java中的四种引用Java中有四种引用类型依次为:强引用(Strong Reference)软引用(Soft Reference)弱引用(Weak Reference)虚引用(Phantom Reference)这四种引用强度依次逐渐减弱二.Java为什么要设计这四种引用Java 中引入四种引用的目的是让程序自己决定对原创 2020-06-10 17:23:41 · 1099 阅读 · 0 评论 -
【Java基础】Java8新特性—接口中使用default和static关键字
**Java 1.8对接口有两个方面的增强:接口中可以添加使用default或者static修饰的方法**1. `增加default方法`:又叫做`接口扩展方法`,即在不破坏java现有实现架构的情况下能往接口里增加新方法, default关键字可以给接口添加一个非抽象的方法实现,子类可以直接调用! >如果想对接口增加一个新方法,那么需要对实现该接口的所有类进行修改,如果接口实的现类很多,就会带来很大的工作量,而且还很容易破坏以前的代码,带来一些问题。如果把新的方法定义为default方法,就可以避免原创 2020-03-14 17:42:57 · 965 阅读 · 0 评论 -
【Java基础】Java7新特性—Files类,Path类,Paths类的用法
文章目录Java7新增文件IO类一.Paths1.创建Paths二.Path1.创建Path1.1.创建Path的三种方式2.Path常用方法三.Files1.判断方法:2.删除方法3.复制方法4.移动和重命名方法5.创建文件和文件夹方法6.文件属性方法7.读取、编辑文件内容方法8.遍历文件列表方法四.Path和Files使用五.FileTime对象Java7新增文件IO类Java7中文件IO...原创 2020-03-05 16:30:28 · 8648 阅读 · 3 评论 -
【Java基础】代理(Proxy)
文章目录代理模式1.什么是代理模式?2.代理模式的组成静态代理1.聚合式静态代理Java中如何使用JDK动态代理2.继承式静态代理聚合式与继承式静态代理的区别动态代理1. 什么是动态代理?2. JDK动态代理实现步骤总结3.CGLIB代理1.CGLIB是什么?2.Java中如何使用CGLIB代理3.CGLIB原理代理模式1.什么是代理模式?代理模式的定义:给某一个对象提供一个代理,并由代理对...原创 2020-03-02 18:58:46 · 565 阅读 · 0 评论 -
【Java基础】Java5新特性—注解(annotation)
文章目录一.什么是注解?1.注解与注释的区别二.内置注解三.Java中使用注解1.创建注解2.定义注解属性3.default关键字注解语法4. 元注解4.1.@Retention4.2.@Target4.3.@Inherited4.4.@Documented4.5.@Repeatable5.注解的分类6.通过反射获取注解-案例17.通过反射获取注解-案例28.使用注解优化DispatcherSer...原创 2020-02-29 15:11:27 · 705 阅读 · 0 评论 -
【Java基础】反射(reflect)
文章目录一.Java类加载器简单了解1.类的加载2.类加载的时机(只加载一次)3.类加载器4.类加载器的组成二.什么是反射机制三.java.lang.Class1.什么是Class对象2.获取Class对象的三种方式?3.Class对象常用方法3.1.获取Class类对应的实体类的相关的Class类的方法3.2.获取构造函数的方法3.3.获取类方法的方法3.4.获取类中属性的方法3.5.获取类中注...原创 2020-02-28 17:02:50 · 518 阅读 · 0 评论 -
【Java基础】正则表达式应用
**懒惰匹配**- 有时,我们更需要懒惰匹配,也就是`匹配尽可能少的字符`。前面给出的重复限定符`只要在它后面加上一个问号?`。这样`.*?就意味着匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复`。 表达式`a.*?b`就被转化为懒惰匹配模式 - 如:表达式:`a.*?b`,** 匹配`最短`的的,以a`开头`,以b`结尾`的字符串**。 - 匹配是一个循环过程 ,正则表达式`a.*?b `应用于字符串`aabab`的话 ,第一次匹配从`索引0(第一个字符)`开始,它会匹原创 2020-02-23 00:06:07 · 2497 阅读 · 1 评论 -
【Java基础】加密与安全基础
一.编码算法什么是编码?ASCII码就是一种编码,字母A的编码是十六进制的0x41,字母B是0x42`,以此类推:因为ASCII编码最多只能有127个字符,要想对更多的文字进行编码,就需要用Unicode。而中文的中使用Unicode编码就是0x4e2d,使用UTF-8则需要3个字节编码:因此,最简单的编码是直接给每个字符指定一个若干字节表示的整数,复杂一点的编码就需要根据一个已有的编...原创 2020-02-20 12:38:23 · 1486 阅读 · 4 评论 -
【Java基础】日志系统JDK Logging,Commons Logging,Log4j/Log4j2,Slf4j和Logback基本使用
Log4j的1.x版本虽然已经被广泛使用于很多应用程序中,但由于出现内存泄漏等bug,代码难以维护,以及需要使用老版本的jdk等劣势,在2015年8月已经玩完。它的替代品,SLF4J,Logback,Log4j2对日志框架做了很多必要的改进。SLF4J:SLF4J是众多日志系统的内核,提供统一的接口,不提供具体实现,不是具体可使用可配置的日志系统。Logback:提供了对SLF4J...原创 2020-02-18 18:44:28 · 3843 阅读 · 0 评论 -
【Java基础】随机数Random和SecureRandom基本用法
文章目录生成随机数的几种方法一. Math.random()二. java.util.Random工具类三. java.util.concurrent.ThreadLocalRandom 工具类四. java.Security.SecureRandom(继承至java.util.Random)五. Apache Commons-Lang 包中的 RandomStringUtils 类生成随机数的...原创 2020-02-18 15:57:03 · 7588 阅读 · 0 评论 -
【Java基础】 BigInteger和BigDecimal使用
一.BigInteger(大整数操作类)为什么要使用BigInteger类在Java的整数类型里面,byte为8位,short为16位,int为32位,long为64位。正因为这些数值的二进制位数已经固定,所以它们能表示的数值大小就有一定的范围限制。因此,Java中提供BigInteger类来处理更大的数字。-java.math.BigInteger就是用来表示任意大小的整数。BigInte...原创 2020-02-18 15:16:19 · 1028 阅读 · 0 评论 -
【Java基础】Java8新特性-StringJoiner
文章目录一.StringJoiner1.什么是StringJoiner2.StringJoiner源码解析3.StringJoiner常用Api二.String.join()一.StringJoiner1.什么是StringJoinerStringJoiner是Java8新出的一个类,用于构造由分隔符分隔的字符串可选择性定义每个拼接字符串的前缀以及后缀。可以避免开发人员再次通过Stri...原创 2020-02-18 10:53:50 · 1002 阅读 · 0 评论 -
【Java基础】多线程从入门到掌握
一.多线程基础1.多任务概念现代操作系统(Windows,macOS,Linux)都可以执行多任务。多任务就是同时运行多个任务,例如:同时打开ie浏览器/QQ/QQ音乐CPU执行代码都是一条一条顺序执行的,即使是单核cpu,也可以同时运行多个任务。 因为操作系统执行多任务实际上就是让CPU对多个任务轮流交替执行。例如,假设我们有语文、数学、英语3门作业要做,每个作业需要30分钟...原创 2020-02-17 18:51:34 · 2144 阅读 · 0 评论 -
【Java基础】关于XML结构数据的使用
文章目录一.什么是XML?二.XML特点三.XML结构1.基本结构2.特殊字符3.验证XML文件的正确性4.XML小结四.Java解析XML1.解析DOM1.1什么是DOM?1.2.Java以DOM方式解析XML?1.3.实例代码1.4.DOM解析小结2.解析SAX2.1.是什么是SAX解析2.2.SAX小结3.解析StAX3.1.什么是StAX?4.三种方式的比较5.使用Jackson一.什么...原创 2020-02-02 22:36:59 · 669 阅读 · 0 评论 -
【Java基础】使用Junit5进行单元测试
文章目录一.什么是单元测试呢?二.测试驱动开发(TDD)三.JUnit框架1.为什么需要JUnit框架?2.什么是JUnit框架?3,单元测试的好处四.使用Junit5框架1.@Test/@DisplayName/@Tag2. 断言方法3. 使用Fixture3.1@BeforeEach/@AfterEach3.2 @BeforeAll/@AfterAll3.3.执行顺序3.4使用Fixture小...原创 2020-02-02 16:16:20 · 2912 阅读 · 1 评论 -
【Java基础】了解迭代器Iterator
迭代器Java的集合类都可以使用forEach循环遍历,List、Set和Queue会迭代每个元素,Map会迭代每个key。以List为例:List<String> list = List.of("Apple", "Orange", "Pear");for (String s : list) { System.out.println(s);}实际上Java编译器并...原创 2020-02-01 22:31:07 · 541 阅读 · 0 评论 -
【Java基础】JDK内置工具类Collections类使用
文章目录collections类使用1.addAll()2.创建空集合3.创建单元素集合4.排序5.洗牌6.不可变集合7. 线程安全集合8.查询指定下标9.indexOfSubList10.lastIndexOfSubList11.替换集合中指定元素12.反转List集合中元素的顺序collections类使用Collections是JDK提供的工具类,同样位于java.util包中。它提供...原创 2020-02-01 21:37:55 · 664 阅读 · 0 评论 -
【Java基础】Stack基础
- 栈(`Stack`)是一种 **`后进先出(LIFO:Last In First Out)`的数据结构。**- 什么是`后进先出LIFO`呢? `最后进Stack的元素一定最先出Stack。`如何做到这一点呢?**只需要把队列的一端封死**- **栈顶与栈底:** 允许元素`插入与删除`的一端称为`栈顶`,另一端称为`栈底`。- **压栈:** 栈的`插入`操作,叫做进栈,也称压栈、入栈。- **出栈:** 栈的删除操作,也叫做弹栈。原创 2020-02-01 20:49:09 · 544 阅读 · 0 评论 -
【Java基础】Queue基础
- `队列(Queue)`是一种经常使用的集合。Queue实际上是实现了一个`先进先出(FIFO:First In First Out)`的有序列表`(有序集合)`。- 队列List的区别在于,**List可以在`任意位置添加和删除元素`** - Queue只有两个操作: - `把元素添加到队列末尾;` - `从队列头部取出元素。`原创 2020-02-01 16:52:39 · 604 阅读 · 0 评论 -
【Java基础】使用Properties
文章目录一.Java中的.properties文件二.读取配置文件1.从文件流加载properties2.从classPath加载配置文件3.从内存读取一个字节流加载配置文件4.注意事项三.写入配置文件四.编码五.总结一.Java中的.properties文件在编写Java程序的时经常需要读写.properties配置文件。如# 上次最后打开的文件:last_open_file=/data...原创 2020-02-01 14:12:23 · 303 阅读 · 0 评论 -
【Java基础】网络编程-RMI远程调用(七)
文章目录RMI远程调用基本概念Java实现RMI远程调用Java实现RMI远程调用2Java的RMI远程调用弊端小结RMI远程调用基本概念Java的RMI远程调用是指,一个JVM中的代码可以通过网络实现远程调用另一个JVM的某个方法。RMI是Remote Method Invocation的缩写。提供服务的一方我们称之为服务端,而实现远程调用的一方我们称之为客户端。Java实现...原创 2020-01-30 21:09:42 · 1972 阅读 · 0 评论