
javaSE
文章平均质量分 65
javaSE
32224047_yw
anyway
展开
-
java:从类(class)的角度结构化总结变量,构造器,代码块,内部类及方法
前言java是一门面向对象的语言,而对象是类的一个实例,有行为和状态。类是一个模板,它描述一类对象的行为和状态。所以本文将从一个类作为模板的角度,从结构上对类这个抽象概念进行分析描述。模板图说明:图中标红的属于类这个概念,由于匿名内部类,比较特殊(它与局部类很相似,不同的是它没有类名,如果某个局部类你只需要用一次,就可以采用局部内部类来定义它)所以在模板图中就不做展示,关于抽象类会在抽象方法中做说明。1.成员变量1.1常量 常量是指在程序的整个运行过程中值保持不...原创 2020-05-17 17:19:38 · 740 阅读 · 0 评论 -
java调用FFmpeg实现视屏压缩
前言最近做人脸识别,对于过大的视屏(10M)以上,识别失败的几率比较大。找了下相关的视屏压缩资料。首先使用的是jave进行视屏压缩,但是踩坑失败,jave中有转码的过程,虽然压缩成功,各种压缩参数也调整了一大堆,但是在识别时,几乎都不会成功,但是只是压缩观看的话,还是可以使用jave的。继续踩坑,直接使用原生的FFmpeg,在windows系统通过cmd命令,进行压缩,调整对应的视屏参数,压缩效果可以,而且可以识别成功,下面简单的展示下java调用FFmpeg命令实现视屏的压缩,仅供参考。实现步骤原创 2021-09-06 17:53:05 · 1797 阅读 · 0 评论 -
翻转equals调用,equals方法被调用时字符串和对象的顺序
之前改的bug,一开始我先判断sortKey不为空,然后再去判断sortKey的值,见下图,代码push后,同事审核后,叫我将sortKey和值得顺序调换一下,说这样就不用再判断为空。这是改之后的代码,见下图,问了几个人,说是避免空指针异常,我说我前面已经对sortKey做了一个不为空判定,有人回答说虽然没有错,但是多判断了一次,而且从代码规范上看显得多余。问题来了,equals方法被调用时,谁在前谁在后,这里面有什么讲究?经过查阅相关资料,整理了一些知识点。equals..转载 2021-01-13 16:01:15 · 1309 阅读 · 1 评论 -
java实现将图片,Word等文件存储到数据库
java实现将文件存储到数据库前言程序架构说明实现思路代码实现1.controller层主要代码2.Service层3.Dao层4.Mapper映射文件前言最近在工作中涉及到了一个将文件存储到mysql数据库中,实现文件存取操作的业务场景,本文将简单的对文件存储数据库的过程进行描述及实现程序架构说明采用的是springboot、mybatis实现对文件的转换与存储。实现思路1、从前端选择获取到需要上传的文件2、文件在Controller控制层将文件的类型和文件名称进行分割3、将文件转换为ba原创 2020-12-19 13:22:45 · 5030 阅读 · 6 评论 -
Java7 和 Java8 中的 ConcurrentHashMap 原理解析
Java7 中 ConcurrentHashMapConcurrentHashMap 和 HashMap 思路是差不多的,但是因为它支持并发操作,所以要复杂一些。整个 ConcurrentHashMap 由一个个 Segment 组成,Segment 代表”部分“或”一段“的意思,所以很多地方都会将其描述为分段锁。注意,行文中,我很多地方用了“槽”来代表一个 segment。简单理解就是,ConcurrentHashMap 是一个 Segment 数组,Segment 通过继承 Reentran转载 2020-10-10 09:15:20 · 395 阅读 · 0 评论 -
java虚拟机JVM调优jvisualvm工具的使用及插件的安装方法
1.说明环境:必须要有java的运行环境2.打开及查看步骤打开jvisualvm 步骤win+R--- cmd,在cmd窗口输入命令jvisualvm,打开的界面如下图这里我实现开启了一个微服务,点击微服务进程,进入进入后可以看到详细的数据信息监视模块展示的信息,圈住的地方点击堆可以查看堆相关的信息,点击堆的右边mataSpace是java8开始具备的元空间线程模块展示的信息,橙色的是驻留(线程池中空闲的线程,等待接收新的任务),监视说..原创 2020-09-27 20:52:39 · 753 阅读 · 1 评论 -
面试官:你说你懂i++跟++i的区别,那你会做下面这道题吗?
面试官:你说你懂i++跟++i的区别,那你知道下面这段代码的运行结果吗?转载文章原文链接:https://daimingzhi.blog.csdn.net/article/details/105337049面试官:“说一说i++跟++i的区别”我:“i++是先把i的值拿出来使用,然后再对i+1,++i是先对i+1,然后再去使用i”面试官:“那你看看下面这段代码,运行结果是什么?”public static void main(String[] args) { int j转载 2020-06-25 22:37:45 · 288 阅读 · 0 评论 -
Java的Stream流式处理
在公司,看到大神写的代码优美而高效,其中之一就是对集合等数据结构大量使用了Stream流式操作,极大的提高编程效率和程序可读性。下面学习一下流式操作,在这里用博客记录一下。##为什么需要 StreamStream作为 Java 8的一大亮点,它与 java.io 包里的 InputStream和 OutputStream是完全不同的概念。它也不同于 StAX 对 XML 解析的 Stream,也不是 Amazon Kinesis 对大数据实时处理的Stream。Java 8 中的 Stream 是对集合转载 2020-06-07 17:39:22 · 1452 阅读 · 0 评论 -
java Stream流式处理、流式结构简单例子
集合等数据结构大量使用了Stream流式操作,极大的提高编程效率和程序可读性。这里只是做一个简单的例子,方便查阅理解。Stream流式处理的具体使用及详细解读请参见public class StreamDemo { public static void main(String[] args) { List<String> list = new ArrayList<>(); //添加元素 list.ad...原创 2020-06-07 17:36:56 · 722 阅读 · 0 评论 -
浅析java lambda表达式及函数式接口@FunctionalInterface
1.Lambda表达式 Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。使用 Lambda 表达式可以使代码变的更加简洁紧凑。lambda表达式语法格式:(参数列表)->{重写方法体}//格式一(parameters) -> expression //格式二 (parameters) ->{ statements; }lambda表达式用法:...原创 2020-06-07 17:23:50 · 532 阅读 · 0 评论 -
java 单例模式及常用实现方式
1.什么是单例模式单例模式是软件开发设计模式中的一种,所谓单例就是保证一个类只有一个实例,即单个的实例对象。保证实例的唯一:防止外部初始化 由类本身进行实例化 保证实例化一次 对外提供获取实例的方法 线程安全2.实现方式因为计算机的任务管理器只能有一个,满足单例模式的情景,所以创建类TaskManager来完成单例模式的实现。实现方式一:饿汉式特点:直接创建对象 线程安全 只要类加载就会创建对象,耗内存代码实现:public class Demo {原创 2020-06-07 16:10:27 · 158 阅读 · 0 评论 -
java 可变参数介绍及简单应用
1.可变参数java可变参数是jdk1.5版本的新特性,它的出现让方法中有多个参数时,不用写更多的重载方法就能调用方法传递可变的参数。可变参数适用于参数不确定的情况。2.通过代码示例引入可变参数当需要实现多个参数求和时,有以下实现方法:1.重载方法:代码如下,当需要实现2个数和3个数的求和运算时,需要定义2个重装方法分别调用。优点:使用简单public class Test_Demo { public static void main(String[] args.原创 2020-06-03 20:47:18 · 554 阅读 · 1 评论 -
非法的Unicode 转义问题
最近在编译工程时,遇到了非法的Unicode 转义。因为是第一次遇到,所有在此分享,拓展的同时增加理解。分析:编译器无报错,说明不是编译期异常 注释掉功能性代码,只留下打印语句,同样报错,说明应该是注释部分有问题 根据编译器提示行,进一步分析发现下图中的第14行中包含多个斜杠,考虑为转义问题 查阅相关资料:java是允许在注释以及代码中使用\u开头的Unicode转义字符的,但是要求转义必须有效,否则编译器会报告错误。(下图中我添加的路径中就出现了\u,并且’\u’ 后面的是\untit原创 2020-05-27 10:55:30 · 5551 阅读 · 0 评论 -
List的remove方法处理集合-普通for 循环和增强for循环ConcurrentModificationException问题
情况一:List 集合中通过普通for循环调用list 自己的remove 方法,代码如下:public static void main(String args[]){List<String> list = new ArrayList<>();list.add("a");list.add("b");list.add("c");list.add("d");for (int i=0;i<list.size...原创 2020-05-26 23:00:11 · 646 阅读 · 0 评论 -
java统计指定路径下所有指定文件的个数及指定文件所有行数
import java.io.*;public class FileTest3 { //初始化统计变量 private static int sumTxt = 0; //记录文件总行数 private static int count = 0; public static void main(String[] args) throws IOException { //给定路径 File f = new File("D:\\file.原创 2020-05-26 19:55:37 · 666 阅读 · 0 评论 -
java IO字节流实现文件复制(自建缓冲区,异常捕获)
import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;/** * 通过字节流实现文件复制 */public class FileTest2 { public static void main(String[] args) { //调用方法 测试文件大小为750M CopyFile("D:\\filetest\\b.zip",".原创 2020-05-26 18:06:00 · 283 阅读 · 0 评论 -
java IO字符流实现文件复制(异常捕获)
import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;/** * 字符流实现文件复制(异常捕获) */public class FileTest1 { public static void main(String[] args) { //调用方法 bb.txt 给定15M 左右 CopyFile("D:\\filetest\\bb.txt","D:.原创 2020-05-26 15:40:12 · 309 阅读 · 0 评论 -
java 泛型格式及jdk1.5之前无泛型时对数组元素的处理方法
1.java泛型的格式 泛型,即“参数化类型”,其本质是参数化类型,也就是说所操作的数据类型被指定为一个参数(type parameter)这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 泛型时jdk 1.5 的新特性。泛型指定成某个具体类型就是泛型擦除(发生在编译时期,不是具体指定的参数类型则编译无法通过)。 jdk1.5之后可以选择以下几种写法: /格式一:前面指定 List<String&g...原创 2020-05-25 13:30:49 · 451 阅读 · 1 评论 -
初识java迭代器的设计理念
如下图: 从上到下依次为,ArrayList存储结构(数组),LinkedList存储结构(链表)、TreeSet存储结构(二叉树)、HashSet存储结构(数组+链表),因为还有很多的集合类型,所以不可能给每个集合类型都提供一种遍历方法。所以java设计者,在每个集合类型中都提供了自己独有的迭代器。让他们都统一实现Iterator接口,实现接口中的HasNext()及next()等方法。简化了集合的遍历过程...原创 2020-05-24 19:17:52 · 235 阅读 · 0 评论 -
java中 ArrayList类实现方法的简易实现(手写版,附详细注释说明)
import java.util.Arrays;public class ListTest { public static void main(String[] args) { //创建列表对象 ListArray listArray = new ListArray(); listArray.add("a"); listArray.add("b"); //没有重写toString()方法,只能调用原始的Obje.原创 2020-05-24 18:36:30 · 379 阅读 · 0 评论 -
java集合关系图及Iterable与Iterator区别及关系分析
前言为了java让集合框架间类和接口的继承实现关系展示的更为明确,下面绘制了常用接口及实现类间的关系,方便查看及理解,参考文档为JDK-API1.8。集合关系图说明:图中只对常用的接口和实现类进行了整理。接口Iterator 未在图中具体展示,下面会单独进行说明。图中的矩形区域代表的是接口 图中椭圆代表的是实现类 标注了extends 的为继承关系,其他的为实现(implements)关系 不常用的字体设置为了灰色集合知识点梳理1.为什么Collection接口要继承于...原创 2020-05-24 15:45:56 · 1111 阅读 · 0 评论 -
Java中字符串的初始化及字符串操作类,深入理解String,StringBuilder,StringBuffer的实现
在深入学习字符串类之前, 我们先搞懂JVM是怎样处理新生字符串的. 当你知道字符串的初始化细节后, 再去写 Strings="hello"或 Strings=newString("hello")等代码时, 就能做到心中有数。首先得搞懂字符串常量池的概念。常量池是Java的一项技术, 八种基础数据类型除了float和double都实现了常量池技术. 这项技术从字面上是很好理解的: 把经常用到的数据存放在某块内存中, 避免频繁的数据创建与销毁, 实现数据共享, 提高系统性能。字符串常量池是Java常转载 2020-05-20 00:16:05 · 436 阅读 · 0 评论 -
两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。 有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单
思路:1.利用循环,依次用a、b、c 去匹配x,y,z 2.在第二层循环处,需要判断a != b 3.在第三层循环需要判断a!=c&&b!=c 4.步骤3结束后,根据题目已知信息排除a!='x'&&c!='x'&&c!='z' 情况 5.此时依次对应打印出的值就是比赛的名单public class Demo { public static void...原创 2020-05-20 00:06:06 · 1306 阅读 · 0 评论 -
b = a += a -= a *= a++及c = b *= b += b += --b运算解析
. java 对于基本数据类型的赋值是很简单的,基本数据存储了实际的数值,而并非指向一个对象的引用,所以在为其赋值的时候,是直接将一个地方的内容复制到另外一个地方。原创 2020-05-19 00:47:05 · 2813 阅读 · 0 评论