Java
文章平均质量分 58
分享一些我在Java学习过程中遇到的一些有意思的案例以及一些有用的知识点,记录我的学习历程.....
soberw-
这个作者很懒,什么都没留下…
展开
-
SpringMVC框架笔记总结(史上最全)
SpringMVC从入门到精通文章目录SpringMVC从入门到精通概念引入入门案例开发环境创建项目进行配置测试运行优化配置@RequestMapping 注解问题引入@RequestMapping注解的位置@RequestMapping注解的属性value属性method属性params属性(了解)headers属性(了解)value属性的模糊匹配获取请求参数通过原生ServletAPI获取请求参数通过控制器方法的形参获取请求参数@RequestParam注解处理参数映射请求参数是JavaBean对象请原创 2022-03-12 17:10:19 · 2434 阅读 · 3 评论 -
SpringMVC过滤器HiddenHttpMethodFilter内部执行流程
SpringMVC过滤器HiddenHttpMethodFilter内部执行流程@TOC基于RESTful风格,我们主要将请求方式分为了四种方式,具体说,就是 HTTP 协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。它们分别对应四种基本操作:GET 用来获取资源POST 用来新建资源PUT 用来更新资源DELETE 用来删除资源大家都知道,form表单的提交方式只有两种:get和post。而我们现在需要发送四种请求,前两种还好说,因为本来就支原创 2022-03-07 17:32:38 · 503 阅读 · 0 评论 -
Spring5从入门到精通(史上最全版)
1、Spring是轻量级的开源的 JavaEE 框架2、Spring 可以解决企业应用开发的复杂性3、Spring有两个核心部分:IOC和Aop(1)IOC:控制反转,把创建对象过程交给 Spring进行管理(2)Aop:面向切面,不修改源代码进行功能增强4、Spring特点(1)方便解耦,简化开发(2)Aop编程支持(3)方便程序测试(4)方便和其他框架进行整合(5)方便进行事务操作(6)降低 API 开发难度原创 2022-02-16 19:45:52 · 3096 阅读 · 0 评论 -
浅谈java代理模式
讲解java代理模式文章目录讲解java代理模式何谓代理模式静态代理动态代理JDK动态代理CGLIB动态代理何谓代理模式代理模式,即Proxy Pattern,23种java常用设计模式之一。代理模式提供了对目标对象额外的访问方式,即通过代理对象访问目标对象,这样可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能。代理模式的主要作用是为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作原创 2022-02-13 20:36:28 · 480 阅读 · 1 评论 -
剑指Offer系列_30_包含min函数的栈
以空间换时间:package leetcode.sword_to_offfer.day01;import java.util.Stack;/** * 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。 * <p> * 示例: * <p> * MinStack minStack = new MinStack(); * minStack.push(-2); * min原创 2022-02-07 10:47:49 · 302 阅读 · 1 评论 -
剑指Offer系列_09_用两个栈实现队列
package leetcode.sword_to_offfer.day01;import java.util.LinkedList;/** * 用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead , * 分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead操作返回 -1 ) * <p> * 示例 1: * <p> * 输入: * ["CQueue","appendT原创 2022-02-07 09:03:21 · 90 阅读 · 0 评论 -
LeetCode随缘刷题之盛最多水的容器
package leetcode.day_01_30;/** * 给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点(i,ai) 。在坐标内画 n 条垂直线,垂直线 i的两个端点分别为(i,ai) 和 (i, 0) 。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。 * * 说明:你不能倾斜容器。 * * 示例 1: * * 输入:[1,8,6,2,5,4,8,3,7] * 输出:49 * 解释:图中垂直线代表输入数组 [1,8,6,2,5,4,原创 2022-01-30 21:58:02 · 130 阅读 · 0 评论 -
LeetCode随缘刷题之回文数
package leetcode.day_01_30;/** * 给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 * <p> * 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。 * <p> * <p> * 示例 1: * <p> * 输入:x = 121 * 输出:true * 示例2: * <p> * 输入:x = -1原创 2022-01-30 20:04:49 · 5593 阅读 · 0 评论 -
LeetCode随缘刷题之字符串转换整数
package leetcode.day_01_29;import java.util.regex.Matcher;import java.util.regex.Pattern;/** * 请你来实现一个myAtoi(string s)函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。 * <p> * 函数myAtoi(string s) 的算法如下: * <p> * 读入字符串并丢弃无用的前导空格 * 检查下一个字符原创 2022-01-30 00:02:13 · 98 阅读 · 0 评论 -
LeetCode随缘刷题之整数反转
package leetcode.day_01_29;/** * 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。 * 如果反转后整数超过 32 位的有符号整数的范围[−231, 231− 1] ,就返回 0。 * 假设环境不允许存储 64 位整数(有符号或无符号)。 * <p> * 示例 1: * 输入:x = 123 * 输出:321 * <p> * 示例 2: * 输入:x = -123 * 输出:-321 * <p原创 2022-01-29 22:48:57 · 5647 阅读 · 1 评论 -
简单模拟Java中反射的应用场景
有人说Java是一门静态语言。那么何为静态语言,动态语言又是什么?1、动态语言是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以 被引进,已有的函数可以被删除或是其他结构上的变化。通俗点说就是在运 行时代码可以根据某些条件改变自身结构。 主要动态语言:Object-C、C#、JavaScript、PHP、Python、Erlang。2、静态语言与动态语言相对应的,运行时结构不可变的语言就是静态语言。如C、 C++。Java不是动态语言,但也不能简单的说成静态语言。Java可原创 2021-12-31 13:09:18 · 888 阅读 · 0 评论 -
浅谈Java之反射
反射四种获取Class实例的方法定义测试结构获取属性结构获取方法结构获取构造器结构(包括父类泛型)获取实现的接口获取所在包获取注解获取并创建指定构造器获取指定属性获取并运行指定方法四种获取Class实例的方法调用运行时类的属性通过运行时类的对象,调用getClass()调用Class静态方法:forName(String classPath) 开发中最常用使用类的加载器:ClassLoader (了解就行)package day_12_29;import org.junit.Te原创 2021-12-30 20:50:35 · 475 阅读 · 1 评论 -
Java多线程经典案例分享
汇总案例一案例二案例三案例四案例五案例六案例七案例一实现一个容器,提供两个方法,add(),count() 写两个线程,线程1添加10个元素到容器中,线程2实现监控元素的个数,当个数到5个时,线程2给出提示并结束。本案例我通过闭锁(也叫门栓锁)实现,实现如下:package day_12_28.zuoye;import java.util.ArrayList;import java.util.List;import java.util.concurrent.CountDownLatch;原创 2021-12-28 21:28:57 · 3354 阅读 · 1 评论 -
Java多线程之读写锁机制
Java多线程中有很多的锁机制,他们都有各自的应用场景,例如今天我说的这种锁机制:读写锁读写锁,见名知意,主要可以进行两种操作,读和写操作,他们之间结合使用起来又是各不相同的。比如多个线程之间可以同时读,但不可以同时写,也不可以一边读一边写,有点类似于数据库中的共享锁以及排它锁,下面我具体事例演示:需要注意的是,不管是进行读操作还是写操作,一定要成对去调用方法,就是开启锁后一定要关闭,且为了保险起见,关闭最好要写在finally语句块中去。另外,我们在声明对象时,有两种方式(有参数和无参数),若为t原创 2021-12-27 20:17:35 · 370 阅读 · 0 评论 -
基于Java的简单银行管理系统(MVC设计模式)
原创 2021-12-25 11:37:24 · 1463 阅读 · 6 评论 -
用Java实现生成图片验证码
通过代码实现生成一个随机验证码图片,且生成后自动打开:package day_12_17;import javax.imageio.ImageIO;import java.awt.*;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import java.io.InputStream;import java.util.Random;/** * @author sobe原创 2021-12-17 21:14:28 · 1545 阅读 · 1 评论 -
用Java模拟实现对系统文件以目录的拷贝功能
要用Java对单个文件拷贝的话,其实思路很简单,循环读取被拷贝文件,放入byte数组,然后写入目标文件。当然我们也可以借助现有的类去完成,如InputStream中的transferTo()方法就可以实现,其实我们查看源码就能看出来,其实官方的做法也是这样,只不过更严谨一些:那么我想拷贝多个文件呢?他们显示在不同的目录中,而且目标目录中还不一定存在,比如说,现在我想把jdk8.0的官方源码src文件复制一份到D盘,现在这个文件在桌面,里面文件结构相当复杂了那这如何做呢?我们当然可以借助组件,一些组原创 2021-12-16 09:52:51 · 465 阅读 · 0 评论 -
Java中File类的方法详解
File类也是Java中一个比较重要的类,通过他我们可以实现对文件的一系列操作,其内置了很多方法,下面我将按方法的功能分块,逐一讲解:快速导航构造方法常用方法创建目录构造方法常用方法官方API如下(基于Java 11):创建目录...原创 2021-12-14 19:26:50 · 772 阅读 · 0 评论 -
用Java中的File类模拟实现对系统文件的增删改查效果
码字不易,三连支持一波吧 ????IO操作向来是各大语言的热区,而对文件的操作也是重中之重。那么在Java中也给我们提供了很多关于文件操作的类。今天我就用一个比较基本的File类来模拟实现对文件的增删改查效果。这里先解释一下,何谓增删改查:增:创建一个文件(可以是目录,可以是文件)删:删除指定文件或文件夹(非空)改:对文件重命名,这里我加以拓展,也可以实现对文件的移动查:遍历并统计指定目录下(包含其子目录)指定类型文件的个数,如某目录中共包含.java文件23个,以及修改日期,几行代码文字;原创 2021-12-13 21:00:35 · 671 阅读 · 0 评论 -
LeetCode随缘刷题之转化成小写字母
这道题应该是最简单的一道题了把,简直在侮辱我。package leetcode.day_12_12;/** * 709. 转换成小写字母 * 给你一个字符串 s ,将该字符串中的大写字母转换成相同的小写字母,返回新的字符串。 * <p> * 示例 1: * <p> * 输入:s = "Hello" * 输出:"hello" * 示例 2: * <p> * 输入:s = "here" * 输出:"here" * 示例 3: * <p&g原创 2021-12-12 14:51:52 · 3771 阅读 · 0 评论 -
Java中Arrays数组工具类的使用全解
本文几乎涵盖了所有的Arrays工具类(基于Java 11)的方法以及使用用例,一站式带你了解Arrays类的用法,希望对大家有帮助。原创 2021-12-11 14:24:12 · 3776 阅读 · 3 评论 -
LeetCode随缘刷题之最短补全词
package leetcode.day_12_10;import org.junit.Test;/** * 给你一个字符串 licensePlate 和一个字符串数组 words ,请你找出并返回 words 中的 最短补全词 。 * <p> * 补全词 是一个包含 licensePlate 中所有的字母的单词。在所有补全词中,最短的那个就是 最短补全词 。 * <p> * 在匹配 licensePlate 中的字母时: * <p> * 忽略lic原创 2021-12-10 16:43:12 · 104 阅读 · 0 评论 -
浅谈Java中linkedlist和arraylist区别
在Java中,关于集合框架有这样一个体系结构:其主要由两个接口派生而出:Collection和Map,然后再衍生出各自的一些实现类(比如Collection接口又被继承与Set和List接口,而他们各自又实现了具体的类)。今天我就简要分析一下,实现List的两个类(ArrayList和LinkedList),他们的区别是什么,我们在使用过程中有哪些注意事项。区别首先最显要的区别就是,他们的底层结构完全不同,ArrayList底层实现是数组,LinkedList底层实现是链表。这也就导致了他们在对数原创 2021-12-10 09:01:55 · 564 阅读 · 0 评论 -
浅谈Java正则表达式
正则表达式我们都知道,它定义了字符串的模式,可以用来搜索、编辑或处理文本。我们在某些特定场景中用起来是非常方便的。它等于是给我们划定了一个范围,让我们可以精准的匹配到我们想要的结果。比如我想判断一个几十页的文件中是不是含有邮箱地址,如果用传统的方法,我还要从头到尾遍历筛选一遍,工作量很大,但有了正则我们就可以划定模式去判断,非常之方便。正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。下面我就正则表达式在Java中的应用来举例说明其基本用法。浅谈正则表达式1.正则表达式可以用来干什么2.如何使原创 2021-12-08 13:18:10 · 440 阅读 · 0 评论 -
用Java实现在123456789中随机插入+或者-,使表达式的结果为100
这里我的思路是暴力算法。就是不断试错,不限循环次数,直到找到正确的情况为止。通过走随机,不断控制在123456789中添加+或者-,再通过正则表达式筛选出所有的数字(包含正负),转换为Integer进行计算,结果为100则输出原创 2021-12-07 09:04:39 · 682 阅读 · 0 评论 -
LeetCode随缘刷题之最长回文子串
这一题我用的相对比较笨的方法。相对于大佬们用的动态规划法,比较复杂。但却更容易理解,我主要是通过记录下标来确定最长回文串的。package leetcode.day_12_06;/** * 给你一个字符串 s,找到 s 中最长的回文子串。 * <p> * <p> * 示例 1: * <p> * 输入:s = "babad" * 输出:"bab" * 解释:"aba" 同样是符合题意的答案。 * 示例 2: * <p> * 输入:s原创 2021-12-06 17:24:42 · 185 阅读 · 0 评论 -
LeetCode随缘刷题之截断句子
这道题相对比较简单。package leetcode.day_12_06;/** * 句子 是一个单词列表,列表中的单词之间用单个空格隔开,且不存在前导或尾随空格。每个单词仅由大小写英文字母组成(不含标点符号)。 * <p> * 例如,"Hello World"、"HELLO" 和 "hello world hello world" 都是句子。 * 给你一个句子 s 和一个整数 k,请你将 s 截断 ,使截断后的句子仅含 前 k 个单词。返回 截断 s 后得到的句子。 * <原创 2021-12-06 10:48:47 · 79 阅读 · 0 评论 -
Leetcode随缘刷题之寻找两个正序数组的中位数
原创 2021-12-06 10:09:29 · 200 阅读 · 0 评论 -
LeetCode随缘刷题之无重复字符的最长子串
欢迎评论区交流。package leetcode.day_12_04;/** * 给定一个字符串 s ,请你找出其中不含有重复字符的最长子串的长度。 * <p> * 示例1: * <p> * 输入: s = "abcabcbb" * 输出: 3 * 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 * 示例 2: * <p> * 输入: s = "bbbbb" * 输出: 1 * 解释: 因为无重复字符的最长子串是 "b",原创 2021-12-04 17:33:30 · 87 阅读 · 0 评论 -
LeetCode随缘刷题之赎金信
欢迎评论区讨论。????package leetcode.day_12_04;/** * 为了不在赎金信中暴露字迹,从杂志上搜索各个需要的字母,组成单词来表达意思。 * * 给你一个赎金信 (ransomNote) 字符串和一个杂志(magazine)字符串,判断 ransomNote 能不能由 magazines 里面的字符构成。 * * 如果可以构成,返回 true ;否则返回 false 。 * * magazine 中的每个字符只能在 ransomNote 中使用一次。 *原创 2021-12-04 15:30:36 · 359 阅读 · 0 评论 -
LeetCode随缘刷题之两数相加
逐步解释,有说错的地方欢迎指正。package leetcode.day_12_03;/** * 给你两个非空 的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。 * <p> * 请你将两个数相加,并以相同形式返回一个表示和的链表。 * <p> * 你可以假设除了数字 0 之外,这两个数都不会以 0开头。 * <p> * 示例 1: * <p> * 输入:l1 = [2,4,3], l2 =原创 2021-12-04 15:08:53 · 89 阅读 · 0 评论 -
LeetCode随缘刷题之Java经典面试题将一个字符串数组进行分组输出,每组中的字符串都由相同的字符组成
将一个字符串数组进行分组输出,每组中的字符串都由相同的字符组成。举个例子:输入["eat","tea","tan","ate","nat","bat"]输出[["ate","eat","tea"],["nat","tan"],["bat"]]原创 2021-12-03 13:31:10 · 1014 阅读 · 1 评论 -
浅谈Java之属性赋值的先后顺序
Java一个类可以包含有:属性(成员变量),构造器, 方法(或者叫函数), 代码块(程序段),内部类。那么结合这些,我们就有了对属性可赋值的位置:> 1):默认初始化> 2):显示初始化> 3):构造器中赋值> 4):代码块中赋值> 5):有了对象之后,通过“对象.属性“或者“对象.方法”赋值原创 2021-12-02 11:19:09 · 1236 阅读 · 2 评论 -
浅谈Java面向对象之抽象类(abstract)
java语言,声明类时格式为: `abstract` class Db{} 说明Db类为抽象类。抽象方法是说没有方法的实现(方法体)此方法为抽象方法,只有抽象类和接口中才可以有抽象方法。简而言之,含有抽象方法的类一定是抽象类;关键字是`abstract`原创 2021-12-01 18:42:39 · 1361 阅读 · 0 评论 -
浅谈Java中重写与重载的区别
重载和重写是Java中两个截然不同的概念。但是却因为名字相近导致很多人经常混淆。在Java中,**重载(overloading)** 发生在**本类**。方法名相同,参数列表不同,与返回值无关,只和方法名、参数列表、参数的类型有关。**重写(overriding)** 发生在**父类子类**之间,一般都是表示子类和父类之间的关系,其主要的特征是:方法名相同,参数相同,但是具体的实现不同。原创 2021-11-30 18:44:00 · 122 阅读 · 0 评论 -
Java经典案例之用三种方法求1~100以内素数之和
素数,不能被除了1和本身以外整除的数被称为素数。接下来我用三种方式求得1~100以内素数。原创 2021-11-28 21:12:51 · 4002 阅读 · 0 评论 -
Java用n种方法编写实现双色球随机摇号案例
简单来说,就是通过随机,红球就是在1~33中随机出来6个互不相同的数字,蓝球则是产生一个1 ~16之间的数字。那么难点当然在于红球,如何确保不重复呢?我将通过五种不同的方法来实现。原创 2021-11-26 15:31:53 · 2444 阅读 · 3 评论 -
详解Java12新增语法switch表达式
在Java 12中,Java新引入了switch表达式**Switch Expressions**,我们都知道,switch 语句如果漏写一个 break,那么逻辑往往就跑偏了,这种方式既繁琐,又容易出错。那么Switch Expressions为我们提供勾勒出了Java 语法进化的一个趋势,将开发者从复杂繁琐的低层次抽象中逐渐解放出来,以更高层次更优雅的抽象,既降低代码量,又避免意外编程错误的出现,进而提高代码质量和开发效率。原创 2021-11-25 11:41:37 · 1083 阅读 · 1 评论 -
Java产生指定范围内的随机日期
要想产生指定范围内的随机日期,首先我们要指定一个范围,那么我们可以通过SImpleDateFormat格式化日期,然后再通过parse()方法设置日期,返回一个Date类型的日期对象,再转化为时间戳(long类型的),然后利用随机产生日期。原创 2021-11-24 10:56:47 · 5714 阅读 · 4 评论 -
了解Java格式化输出printf,一篇就够了
在JavaSe5中,推出了C语言中printf()风格的格式化输出。这不仅使得控制输出的代码更加简单,同时也给与Java开发者对于输出格式与排列更大的控制能力。原创 2021-11-23 16:42:19 · 1096 阅读 · 1 评论