Java基础
文章平均质量分 59
Java杂项
斯文~
努力搬砖 低调潜水
展开
-
Druid 数据库连接池 详解
1.数据库连接池是个容器,负责分配、管理数据库连接(Connection);2.它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;3.释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏;优点1.资源重用2.提升系统响应速度3.避免数据库连接遗漏连接池是在一开始就创建好了一些连接(Connection)对象存储起来。用户需要连接数据库时,不需要自己创建连接,而只需要从连接池中获取一个连接进行使用,使用完毕后再将连接对象归还...原创 2022-07-05 10:58:57 · 11461 阅读 · 0 评论 -
JDBC详解
详解讲解JDBC的使用及其API。1.编写Java代码;2.Java代码将SQL发送到MySQL服务端;3.MySQL服务端接收到SQL语句并执行该SQL语句;4.将SQL语句执行的结果返回给Java代码;JDBC具体实现流程1.创建工程,导入驱动jar包;2.注册驱动:3.获取连接: Java代码需要发送SQL给MySQL服务端,就需要先建立连接;4.定义SQL语句:;5.获取执行SQL对象:执行SQL语句需要SQL执行对象,而这个执行对象就是Stateme...原创 2022-07-05 10:57:07 · 1919 阅读 · 0 评论 -
Dom4J解析XML、Xpath检索XML
XML语法详解两种解析方式1.SAX解析2.DOM解析Dom常见的解析工具DOM解析解析文档对象模型Dom4J官网: https://dom4j.github.io/1.下载Dom4j框架;2.在项目中创建一个文件夹:lib;3.将dom4j-2.1.1.jar文件复制到 lib 文件夹;4.在jar文件上点右键,选择 Add as Library -> 点击OK;5.在类中导包使用;Dom4J的解析思想得到文档对象Document,从中获取元素对象和内容。SAXReader类Docume原创 2022-07-01 16:44:39 · 1333 阅读 · 0 评论 -
XML语法、约束
XML是可扩展标记语言(eXtensible Markup Language)的缩写,它是是一种数据表示格式,可以描述非常复杂的数据结构,常用于传输和存储数据。XML的特点一是纯文本,默认使用UTF-8编码;二是可嵌套;XML的使用场景XML内容经常被当成消息进行网络传输,或者作为配置文件用于存储系统的信息;XML文件的后缀名为:xml;第一行是文档声明XML的标签(元素)规则1.标签由一对尖括号和合法标识符组成: ,必须存在一个根标签,有且只能有一个;2. 标签必须成对出现,有开始,有结束: ;原创 2022-07-01 16:44:26 · 196 阅读 · 0 评论 -
Java动态代理Proxy类
Java中代理的代表类是:java.lang.reflect.Proxy提供了一个静态方法,用于为对象产生一个代理对象返回。建议阅读Proxy的文档说明。代理主要是对对象的行为额外做一些辅助操作,以实现对原有方法的扩展。关键步骤1.必须有接口,实现类要实现接口(代理通常是基于接口实现的);2.创建一个实现类的对象,该对象为业务对象,紧接着为业务对象做一个代理对象;动态代理的优点通过代理调用方法的执行流程代码示例Test.java......原创 2022-06-30 12:36:06 · 908 阅读 · 0 评论 -
Java自定义注解
Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。Java 语言中的类、构造器、方法、成员变量、参数等都可以被注解进行标注。注解的作用对Java中类、方法、成员变量做标记,然后进行特殊处理,至于到底做何种处理由业务需求来决定。例如:JUnit框架中,标记了注解@Test的方法就可以被当成测试方法执行,而没有标记的就不能当成测试方法执行。自定义注解就是自己做一个注解来使用。格式注意value属性,如果只有一个value属性的情况下,使用value属性的时候原创 2022-06-30 10:39:06 · 1425 阅读 · 0 评论 -
Java反射详解
1.反射是指对于任何一个Class类,在"运行的时候"都可以直接得到这个类全部成分;2.在运行时,可以直接得到这个类的构造器对象:Constructor;3.在运行时,可以直接得到这个类的成员变量对象:Field;4.在运行时,可以直接得到这个类的成员方法对象:Method;这种运行时动态获取类信息以及动态调用类中成分的能力称为Java语言的反射机制。反射的关键反射的第一步都是先得到编译后的Class类对象,然后就可以得到Class的全部成分。反射的基本作用、关键反射的核心思想是:得到编译以后的原创 2022-06-29 12:56:04 · 265 阅读 · 1 评论 -
Junit单元测试框架详解
JUnit单元测试就是针对最小的功能单元编写测试代码,Java程序最小的功能单元是方法,因此,单元测试就是针对Java方法的测试,进而检查方法的正确性。手动测试的缺点只有一个main方法,如果一个方法的测试失败了,其他方法测试会受到影响。无法得到测试的结果报告,需要程序员自己去观察测试是否成功。无法实现自动化测试。Junit单元测试框架JUnit是使用Java语言实现的单元测试框架,它是开源的,Java开发者都应当学习并使用JUnit编写单元测试;此外,几乎所有的IDE工具都集成了JUnit,这样我们就原创 2022-06-28 22:25:04 · 602 阅读 · 0 评论 -
线程的并行、并发、生命周期
正在运行的程序(软件)就是一个独立的进程, 线程是属于进程的,多个线程其实是并发与并行同时进行的。并发的理解1.CPU同时处理线程的数量有限;2.CPU会轮询为系统的每个线程服务,由于CPU切换的速度很快,给我们的感觉这些线程在同时执行,这就是并发。并行的理解在同一个时刻上,同时有多个线程在被CPU处理并执行。线程的状态也就是线程从生到死的过程,以及中间经历的各种状态及状态转换,理解线程的状态有利于提升并发编程的理解能力。Java线程的状态Java总共定义了6种状态,定义在Thread类的内部枚举原创 2022-06-28 12:18:14 · 166 阅读 · 0 评论 -
Java线程定时器
1、Timer是单线程,处理多个任务按照顺序执行,存在延时与设置定时器的时间有出入;2、可能因为其中的某个任务的异常使Timer线程死掉,从而影响后续任务执行。代码示例ScheduledExecutorService定时器ScheduledExecutorService是 jdk1.5中引入了并发包,目的是为了弥补Timer的缺陷, ScheduledExec...原创 2022-06-27 17:11:22 · 1252 阅读 · 0 评论 -
Java线程池详解:ExecutorService、ThreadPoolExecutor、Executors
线程池就是一个可以复用线程的技术。多线程不使用线程池带来的问题如果用户每发起一个请求,后台就创建一个新线程来处理,下次新任务来了又要创建新线程,而创建新线程的开销是很大的,这样会严重影响系统的性能。线程池的工作原理谁代表线程池JDK 5.0起提供了代表线程池的接口:ExecutorService。方式一:使用ExecutorService的实现类ThreadPoolExecutor自创建一个线程池对象;方式二:使用Executors(线程池......原创 2022-06-27 12:03:01 · 1559 阅读 · 0 评论 -
Java线程通信
所谓线程通信就是线程间相互发送数据,线程间共享一个资源即可实现线程通信。线程通信常见形式1.通过共享一个数据的方式实现;2.根据共享数据的情况决定自己该怎么做,以及通知其他线程怎么做;线程通信实际应用场景生产者与消费者模型:生产者线程负责生产数据,消费者线程负责消费生产者产生的数据。生产者线程生产完数据后唤醒消费者,然后等待自己,消费者消费完该数据后唤醒生产者,然后等待自己。线程通信的前提线程通信通常是在多个线程操作同一个共享资源的时候需要进行通信,且要保证线程安全。Ob......原创 2022-06-27 11:41:17 · 252 阅读 · 0 评论 -
Java线程同步:synchronized、Lock锁
为了解决线程安全问题。多个线程同时操作同一个共享资源的时候可能会出现业务安全问题,称为线程安全问题。线程安全问题出现的原因存在多线程并发,同时访问、修改共享资源如何保证线程安全?让多个线程实现先后依次访问共享资源,这样就解决了安全问题。线程同步的核心思想,把共享资源进行上锁,每次只能一个线程进入访问完毕以后解锁,然后其他线程才能进来。把出现线程安全问题的核心代码给上锁。每次只能一个线程进入,执行完毕后自动解锁,其他线程才可以进来执行。语法格式锁对象要求理论上锁对象只要对于当前同时执行的线程来说是同原创 2022-06-27 10:32:45 · 210 阅读 · 0 评论 -
Java多线程:Thread类常用API
获取线程名称getName()、设置名称setName()、获取当前线程对象currentThread()。至于Thread类提供的诸如:yield、join、interrupt、不推荐的方法 stop 、守护线程、线程优先级等线程的控制方法,在开发中很少使用。注意如果不设置线程名字的话,是会有默认线程名的:Thread-索引,如果要设置线程名,则需在线程类中声明构造器,然后使用,即类中已经定义了名字变量,直接使用即可。代码如下Thread类获得当前线程的对象注意1、此方法...原创 2022-06-26 16:19:06 · 229 阅读 · 0 评论 -
Java多线程详解、多线程的创建方式
线程(thread)是一个程序内部的一条执行路径。我们之前启动程序执行后,main方法的执行其实就是一条单独的执行路径;程序中如果只有一条执行路径,那么这个程序就是单线程的程序。多线程是什么多线程是指从软硬件上实现多条执行流程的技术。Thread类Java是通过java.lang.Thread 类来代表线程的。1.定义一个子类MyThread继承线程类java.lang.Thread,重写run()方法;2.创建MyThread类的对象;3.调用线程对象的start()方法启动线程(启动......原创 2022-06-27 10:32:33 · 159 阅读 · 0 评论 -
Java TCP通信详解:一对一、多对一通信、即时通信
TCP协议特点1.使用TCP协议,必须双方先建立连接,它是一种面向连接的可靠通信协议;2.传输前,采用“三次握手”方式建立连接,所以是可靠的 ;3.在连接中可进行大数据量的传输 ;4.连接、发送数据都需要确认,且传输完毕后,还需释放已建立的连接,通信效率较低;TCP三次握手确立连接TCP四次挥手断开连接TCP协议通信场景对信息安全要求较高的场景,例如:文件下载、金融等数据通信;在java中只要是使用java.net.Socket类实现通信,底层即是使用了TCP协议。方法方法示例代码接收端接原创 2022-06-28 17:01:59 · 2159 阅读 · 1 评论 -
Java UDP通信详解:单播、广播、组播
1.UDP是一种无连接、不可靠传输的协议;2.将数据源IP、目的地IP和端口封装成数据包,不需要建立连接 ;3.每个数据包的大小限制在64KB内;4.发送不管对方是否准备好,接收方收到也不确认,故是不可靠的;5.可以广播发送 ,发送数据结束时无需释放资源,开销小,速度快;UDP协议通信场景语音通话,视频会话等。UDP协议通信模型演示构造器常用方法构造器常用方法代码示例接收端实现步骤代码示例广播UDP如何实现广播使用广播地址:具体操作1.发送端发送的数据包的目的地写的是原创 2022-06-28 17:01:30 · 4175 阅读 · 1 评论 -
Java网络通信:IP、端口、协议、IP地址操作类-InetAddress
IP地址: 设备在网络中的地址,是唯一的标识;端口: 应用程序在设备中唯一的标识;协议: 数据在网络中传输的规则,常见的协议有UDP协议和TCP协议;IPV4由4个字节组成,每个字节十进制表示,字节间用 隔开,点分十进制表示法。IPV6由16个字节组成,每个字节用16进制表示,字节间用隔开,冒分十六进制表示法。IP地址形式分为公网地址和私网地址(局域网)。 的就是常见的局域网地址,范围即为。IP常用命令:查看本机IP地址:检查网络是否连通特殊IP地址本机IP 或者称为回送地址也可称本原创 2022-06-24 16:37:06 · 603 阅读 · 0 评论 -
Java IO框架commons-io
commons-io是apache开源基金组织提供的一组有关IO操作的类库,可以提高IO功能开发的效率。commons-io工具包提供了很多有关io操作的类。有两个主要的类FileUtils, IOUtils。FileUtils主要方法更多方法可以阅读官网文档:https://commons.apache.org/在官网下载包后导入使用即可。https://download.csdn.net/download/weixin_52341477/85736816...原创 2022-06-22 16:16:22 · 386 阅读 · 0 评论 -
Java Properties属性集对象
Properties属性集对象1.Properties代表的是一个属性文件,可以把自己对象中的键值对信息存入到一个属性文件中去;2.属性文件:后缀是.properties结尾的文件,里面的内容都是 key=value,可以用作存储系统配置信息;方法输出输入...原创 2022-06-22 15:49:59 · 426 阅读 · 0 评论 -
Java打印流、输出重定向
打印流可以实现方便、高效的打印数据到文件中去。打印流一般是指:PrintStream,PrintWriter两个类。两个打印流类都支持指定字符编码输出。构造器方法构造器方法PrintStream和PrintWriter的区别1.打印数据功能上是一模一样的,都是使用方便,性能高效;2.PrintStream继承自字节输出流OutputStream,支持写字节数据的方法;3.PrintWriter继承自字符输出流Writer,支持写字符数据出去;属于打印流的一种应用,可以把输出语句的打...原创 2022-06-22 15:43:48 · 312 阅读 · 0 评论 -
Java:对象序列化、反序列化
以内存为基准,把内存中的对象存储到磁盘文件中去,称为对象序列化。使用到的流是对象字节输出流:ObjectOutputStream。构造器ObjectOutputStream序列化方法注意对象必须实现序列化接口,才能输出。以内存为基准,把存储到磁盘文件中去的对象数据恢复成内存中的对象,称为对象反序列化。使用到的流是对象字节输入流:ObjectInputStream。构造器ObjectInputStream序列化方法输出对象读入对象...原创 2022-06-22 15:04:23 · 102 阅读 · 0 评论 -
Java多态详解
什么是多态多态的形式原创 2022-06-08 22:21:37 · 164 阅读 · 0 评论 -
Java:输入输出转换流
Java:字节输入流、字节输出流当代码编码和文件编码不一致时,读入的文件内容会产生乱码。可以通过转换流来解决。先提取文件的原始字节流,然后用字符输入流转换为需要的编码。代码示例字符输出转换流如果需要控制写出去的字符使用的编码,怎么办?1.可以把字符以指定编码获取字节后再使用字节输出流写出去:“我爱你中国”.getBytes(编码);2.也可以使用字符输出转换流实现;代码示例...原创 2022-06-20 17:10:25 · 1948 阅读 · 0 评论 -
Java:缓冲流
缓冲流也称为高效流、或者高级流。之前学习的字节流可以称为原始流。作用缓冲流自带缓冲区、可以提高原始字节流、字符流读写数据的性能。字节缓冲流性能优化原理1.字节缓冲输入流自带了8KB缓冲池,以后我们直接从缓冲池读取数据,所以性能较好;2.字节缓冲输出流自带了8KB缓冲池,数据就直接写入到缓冲池中去,写数据性能极高了;字节缓冲输入流BufferedInputStream,提高字节输入流读取数据的性能;字节缓冲输出流BufferedOu......原创 2022-06-19 21:49:59 · 253 阅读 · 0 评论 -
Java:字符输入流、字符输出流
Java:字节输入流、字节输出流Java:字符输入流、字符输出流Java: IO流资源的释放方式与字节流相比,字符流更适合读取文本数据。构造器方法读取字符数组字符输出流:FileWriter构造器、方法构造器方法流刷新与关闭字节流、字符流的适用场景1.字节流适合做一切文件数据的拷贝(音视频,文本);2.字节流不适合读取中文内容输出;3.字符流适合做文本文件的操作)读,写);Java:字节输入流、字节输出流Java:字符输入流、字符输出流Java: IO流资源的释放方原创 2022-06-17 16:42:55 · 3525 阅读 · 0 评论 -
Java: IO流资源的释放方式
Java:字节输入流、字节输出流Java: IO流资源的释放方式finally放在try-catch后面的,无论是正常执行还是异常执行代码,最后一定要执行,除非JVM退出。一般用于进行最后的资源释放操作。try-catch-finally格式在关闭资源时,应先判读资源是否为空(null)。try-with-resource注意案例需求:将某个磁盘的文件夹拷贝到另一个文件夹下去,包括文件夹中的全部信息代码示例Java:字节输入流、字节输出流Java: IO流资源的释放方式......原创 2022-06-17 15:32:44 · 1464 阅读 · 0 评论 -
Java:字节输入流、字节输出流
以内存为基准,把磁盘文件中的数据以字节的形式读取到内存中去。注意:在UTF-8编码中,一个中文占3个字节,此时用read方法读入,将会出现乱码问题。按字节数组读入需要注意的是当文本中有中文字符时,按字节数组读入仍可能存在乱码问题。若直接把一个文件读取到字节数组中,可能会因为文件过大,造成内存溢出。在可预见文件大小不会引起内存溢出的情况下,可以定义和文件相同大小的字节数组。这样就能一次读完。一次读完整个文件方式一自己定义一个字节数组与文件的大小一样大,然后使用读取字节数组的方法,一次性读取完成,但原创 2022-06-17 15:20:06 · 1255 阅读 · 0 评论 -
Java:Logback日志
日志用来记录程序运行过程中的信息,并可以进行永久存储。日志技术应该具备哪些特点和优势1.可以将系统执行的信息,方便的记录到指定的位置(控制台、文件中、数据库中)2.可以随时以开关的形式控制是日志的记录和取消,无需进入到源代码中去进行修改;日志体系结构Logback日志框架官网:https://logback.qos.ch/index.htmlLogback日志框架分为以下模块logback-core: 该模块为其他两个模块提供基础代码。(必须有)logback-classic: 完整实现了sl原创 2022-06-12 17:39:58 · 465 阅读 · 1 评论 -
Java异常详解
异常是程序在“编译”或者“执行”的过程中可能出现的问题,比如:数组索引越界、空指针异常、 日期格式化异常,等…注意: 语法错误不算在异常体系中。异常一旦出现了,如果没有提前处理,程序就会退出JVM虚拟机而终止,研究异常并且避免异常,然后提前处理异常,体现的是程序的安全, 健壮性。Error系统级别问题、JVM退出等,代码无法控制。Exceptionjava.lang包下,称为异常类,它表示程序本身可以处理的问题;RuntimeException及其子类运行时异常,编译阶段不会报错。 (空指针异常,数组原创 2022-06-12 15:29:55 · 179 阅读 · 0 评论 -
Java:Stream流体系
在Java 8中,得益于Lambda所带来的函数式编程, 引入了一个全新的Stream流概念。目的结合了Lambda表达式,用于简化集合和数组操作的API。1.先得到集合或者数组的Stream流;2.把元素放上去;3.然后就用这个Stream流简化的API来方便的操作元素;StreamTest.java2.Stream流的获取Stream操作集合或者数组的第一步是先得到Stream流,然后才能使用流的功能。可以使用Collection接口中的默认方法stream()生成流。3.Stream流的原创 2022-06-11 17:05:09 · 129 阅读 · 0 评论 -
Java: List、Set、Map不可变集合
什么是不可变集合?1.不可变集合,就是不可被修改的集合;2.集合的数据项在创建的时候提供,并且在整个生命周期中都不可改变。否则报错;为什么要创建不可变集合?1.如果某个数据不能被修改,把它防御性地拷贝到不可变集合中是个很好的实践;2.或者当集合对象被不可信的库调用时,不可变形式是安全的;如何创建不可变集合?在List、Set、Map接口中,都存在of方法,可以创建一个不可变的集合,这个集合不能添加,不能删除,不能修改。......原创 2022-06-11 11:54:20 · 1073 阅读 · 0 评论 -
Java遍历map:entrySet()、foreach
Java遍历map:entrySet()、foreach原创 2022-06-10 22:01:57 · 1119 阅读 · 0 评论 -
Java 集合工具类Collections:批量添加、排序、随机集合
Collections并不属于集合,是用来操作集合的工具类。若对自定义类排序,则需重写接口。下边这个例子和 Java TreeSet自定义类排序 相似,但在中定义完比较规则还须手动调用sort方法才行。Test.javaApple.java......原创 2022-06-10 20:33:21 · 738 阅读 · 0 评论 -
Java可变参数
1.可变参数用在形参中可以接收多个数据;可变参数的作用接收参数非常灵活,方便。可以不接收参数,可以接收1个或者多个参数,也可以接收一个数组可变参数在方法内部本质上就是一个数组可变参数的格式可变参数的注意事项1.一个形参列表中可变参数只能有一个;2.可变参数必须放在形参列表的最后面;解释: 若可变参数后面有单独的参数,那么传参时编译器不知道可变参数到哪里结束。...原创 2022-06-10 16:58:56 · 286 阅读 · 0 评论 -
Java TreeSet自定义类排序
想要使用TreeSet存储自定义类型,需要制定排序规则,具体实现如下。让自定义的类(如学生类)实现Comparable接口重写里面的compareTo方法来定制比较规则。Test.javaStuden.java方法二TreeSet集合有参数构造器,可以设置Comparator接口对应的比较器对象,来定制比较规则。Test.javaStuden.java...原创 2022-06-10 16:32:37 · 473 阅读 · 0 评论 -
Java Collection集合元素的删除问题
Java Collection集合元素的删除问题Java中遍历Collection的三种方式JavaCollection集合遍历并删除元素可能出现的:并发修改异常问题。原创 2022-06-10 10:49:39 · 380 阅读 · 0 评论 -
Java中遍历Collection的三种方式:迭代器、foreach
2.增强for循环1.增强for循环:既可以遍历集合,也可以遍历数组;2.它说JDK 5之后出现的,其内部原理是一个Iterator迭代器,这样写相当于是迭代器的简化写法;3.那么我们也可以确定,只有实现了Iterator接口的类才可以使用foreach;Collection继承了Iterator接口;代码示例3.foreach4.案例:存储自定义类型Test.javaStudent.java.........原创 2022-06-09 16:15:41 · 935 阅读 · 0 评论 -
Java接口 interface 详解
JDK8之前接口中只能是抽象方法和常量;接口不能实例化;接口中的成员都是public修饰的,写不写都是,因为规范的目的是为了公开化;代码示例接口的用法接口是用来被类实现(implements)的,实现接口的类称为实现类。实现类可以理解成所谓的子类。从上面可以看出,接口可以被类单实现,也可以被类多实现。接口实现的注意事项:Test.javaStudent.javaGo.java接口与接口的多继承知识回顾接口多继承的作用实际应用1.类似之前写的普通实例方法:必须用default修饰;2原创 2022-06-08 20:27:43 · 400 阅读 · 0 评论 -
Java:Lambda简化匿名内部类
Java:Lambda简化匿名内部类注意:Lambda表达式只能简化函数式接口的匿名内部类的写法形式什么是函数式接口?简化常见函数式接口简化Comparator接口的匿名形式Java Arrays类自定义排序原创 2022-06-08 11:21:40 · 1361 阅读 · 0 评论