Java
文章平均质量分 69
少年.
这个作者很懒,什么都没留下…
展开
-
BigDecimal的这四个大坑,你都知道吗?
BigDecimal是Java中的一个类,提供了更精确的数字运算,在金融场景中经常使用到。在使用BigDecimal的时候一定要注意,否则可能会付出惨重的代价。原创 2024-06-13 22:42:36 · 1110 阅读 · 0 评论 -
线程的六种状态
RUNNABLE对应操作系统的Running和Ready两种状态,分别表示正在运行和等待分配CPU资源。超时等待状态,线程等待一个时间的流逝,经过这段时间后,该线程由系统唤醒,也可以提前唤醒。方法(其实Thread.join()方法就是调用了Object.wait()方法)、代码块但未获得对应的锁,线程进入BLOCKED阻塞状态。等待状态,一般用于等待其他线程执行特定的操作。方法后,该线程进入RUNNABLE状态。创建一个线程,并且没有调用该线程的。方法,此时该线程处于NEW状态。线程调用了没有参数的。原创 2022-09-28 16:54:44 · 276 阅读 · 1 评论 -
ThreadLocal详解
从ThreadLocal这个类名可以理解为,ThreadLocal表示线程的“本地变量”。即每个线程都拥有该变量副本,达到人手一份的效果,各用各的,这样就可以避免共享资源的竞争。原创 2022-07-19 16:12:26 · 166 阅读 · 0 评论 -
Java中的强引用、软引用、弱引用、虚引用
和,无论使用哪种方法,都和“”有关系。在JDK1.2版本之前,一个对象只有“被引用”和“未被引用”两种状态,在JDK1.2版本之后,Java对引用的概念进行了扩充,将引用分为强引用(StronglyReference)、软引用(SoftReference)、弱引用(WeakReference)、和虚引用(PhantomReference)...原创 2022-07-15 15:13:10 · 325 阅读 · 0 评论 -
Java中的深拷贝与浅拷贝
浅拷贝:对基本类型数据进行值传递,对引用类型数据进行引用传递的拷贝深拷贝:对基本类型数据进行值传递,对引用类型数据创建一个新的对象,并复制其内容在Java中,所有的对象都继承自,在类中提供了一个方法来供我们对Java对象进行拷贝:这个方法是的,所以不需要我们来实现。不过需要注意的是,这个方法还是的,这意味着方法只在包或其子类可见。方法还抛出了一个异常,通过源码注释可以知道,当调用了方法的对象类没有实现接口,或者无法克隆对象的时候,会抛出该异常,也就是说,如果要成功的调用接口,首先该类要实现接口。Clon原创 2022-07-13 16:37:55 · 6432 阅读 · 0 评论 -
Java、Spring定时任务的实现
Jdk自带的库中,有两种方式可以实现定时任务,一种是,另一种是。创建一个就创建了一个线程,可以用来调度任务有四个构造方法,可以指定线程的名字以及是否设置为为守护线程。默认名字,默认不是守护线程。主要有三个比较重要的方法::终止任务调度,取消当前调度的所有任务,正在运行的任务不受影响:从任务队列中移除所有已经取消的任务:开始调度任务,提供了几个重载方法:延时执行,表示毫秒后执行一次任务示例:弊端:Timer是单线程的,并且不会抛出异常,一旦定时任务抛出异常,将会导致整个线程停止,即定时任务停止。因为的原创 2022-07-07 17:22:59 · 545 阅读 · 0 评论 -
java动态代理
"代理"这个词相信大家并不陌生,简单来说就是代替厂家来售卖商品,代理替代厂家售卖商品,顾客找代理购买商品。也就是说:1)顾客和厂家之间是不可见的,顾客不知道背后的厂家是谁。2)代理可以对顾客进行“定位”,更精确的售卖给需要的客户群体。代理模式:为其他对象提供一种代理以控制对这个对象的访问,也就是创建一个代理对象作为客户端和目标对象之间的中介,主要目的就是保护目标对象或增强目标对象通过使用代理模式,通常有以下两个优点:\1) 可以隐藏被代理类的实现\2) 可以实现客户与被代理类间的解耦,在不修改被代理类代码的原创 2022-07-04 16:19:45 · 2376 阅读 · 0 评论 -
ArrayList源码分析(JDK8)
ArrayList是基于数组实现的集合类正是基于数组的数据结构的原因,ArrayList具有增删慢,查询快的特点:ArrayList允许空值和重复元素,当ArrayLIst中的元素数量大于底层允许数量的时候,ArrayList会通过扩容机制生成一个更大的数组ArrayList是非线程安全的RandomAccess 是一个标记接口,标识实现该接口的类支持快速随机访问。实现了RandomAccess后,使用for循环比使用迭代器遍历ArrayList效率更高,也就是代码片段一比代码片段二更快标记接口Clon原创 2022-07-03 15:46:18 · 270 阅读 · 0 评论 -
使用itext为PDF添加批注文字
maven依赖<dependency> <groupId>com.itextpdf</groupId> <artifactId>itext-asian</artifactId> <version>5.2.0</version></dependency><dependency> <groupId>com.itextpdf</groupId>原创 2021-11-01 09:39:02 · 1482 阅读 · 1 评论 -
多线程死锁的产生以及如何避免死锁
当两个线程互相等待对方释放资源的时候,就会发生死锁,一旦产生死锁,程序不会发生任何异常,也不会给出提示,所有的线程都处于阻塞状态,无法继续A线程持有a锁,等待获取b锁,同时B线程持有b锁,等待获取a锁产生死锁的必须满足四个条件互斥条件:一个资源每次只能被以一个进程使用,若有其他进程请求该资源,则请求只能等待请求与保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已经被其他线程所占有,此时请求进程被阻塞,但自己已获得的资源保持不放不可剥夺条件:进程所获得的资源在未使用完毕之前,不原创 2020-09-24 20:36:56 · 548 阅读 · 0 评论 -
java反射简单理解使用
Java反射机制是在运行状态中(和编译无关),对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。获取反射的三种方法使用.class 方法,根据类名获得使用对象.getClass() 方法,根据对象获得使用Class.forName() 静态方法,根据类的全路径名获得public class Test_01 { public static void main(St原创 2020-09-04 17:31:41 · 135 阅读 · 0 评论 -
Java网络编程文件上传简单案例及优化
流程简单分析【客户端】输入流,从硬盘读取文件数据到程序中。【客户端】输出流,写出文件数据到服务端。【服务端】输入流,读取文件数据到服务端程序。【服务端】输出流,写出文件数据到服务器硬盘中。客户端实现public class C_Test_02 { public static void main(String[] args) { try { Socket socket = new Socket(InetAddress.getLocalHost(原创 2020-09-01 20:07:43 · 220 阅读 · 0 评论 -
java网络编程简单理解
网络编程软件结构C/S结构:全称为Client/Server结构,是指客户端和服务器结构**B/S结构:**全称为Browser/Server结构,是指浏览器和服务器结构协议分类通信协议是比较复杂的,java.net包中包含的类和接口,他们提供底层次的通信细节,我可以直接使用这些类和接口来专注于网络程序的开发,而不用考虑通信细节。java.net包中提供了两种常见的网络协议的支持:**UDP:**用户数据报协议(User Datagram Protocol)。UDP是无连接通信协议,即在数据传原创 2020-09-01 16:48:28 · 281 阅读 · 0 评论 -
File类
File类java.io.file类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作构造方法public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。String pathname = "D:\\aaa\\aaa.txt";File file1 = new File(pathname);public File(String parent, String child) :从父路径名字符串和子路径名原创 2020-08-27 15:54:07 · 136 阅读 · 0 评论 -
java多线程生产者消费者案例、虚假唤醒问题
package com.producersAndConsumers;public class Test { public static void main(String[] args) { SalesPerson salesPerson = new SalesPerson(); Product product = new Product(salesPerson); Consumer consumer = new Consumer(salesPers原创 2020-08-26 17:00:16 · 218 阅读 · 0 评论 -
Lambda表达式简单理解
Lambda表达式Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。使用 Lambda 表达式可以使代码变的更加简洁紧凑。Lambda表达式省去面向对象的条条框框,格式有3个部分组成:参数、箭头、代码(参数类型 参数名称)->{ 代码语句 }小括号内的语法与传统方法参数列表一致:无参数则留空;多个参数则用逗号分隔。`->`是新引入的语法格式,代表指向动作。大括号内的语法与传统方原创 2020-08-26 16:37:45 · 538 阅读 · 0 评论 -
ArrayList数组扩容
ArrayList的默认的无参构造方法为:private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; public ArrayList() { this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;}DEFAULTCAPACITY_EMPTY_ELEMENTDATA是一个空数组,所以ArrayList默认创建一个初始长度为0的空数组。调用add()方法向A原创 2020-08-20 20:05:43 · 435 阅读 · 0 评论 -
Integer内部缓存
Integer内部缓存在Java中,每次创建对象都要进行内存分配操作,为了减少频繁地创建对象,许多地方采用池来存放对象,如String中的字符串池,对于基本类型,对应的包装类中皆有缓存来避免频繁创建对象,如Integer。Integer中的IntegerCache静态内部类:private static class IntegerCache { static final int low = -128; static final int high; static final In原创 2020-08-19 17:37:51 · 335 阅读 · 0 评论 -
java final关键字
final关键字用于修饰不可改变的内容,可以用于修饰类、方法、变量(包括成员变量和局部变量)被final修饰的类,不能被继承public final class Test {} // 修饰类被final修饰的方法,不能被重写public final void aa(){} // 修饰方法被final修饰的变量,不能被重新赋值public final int num=0;// 修饰变量**局部变量——引用类型:**引用类型的局部变量被final修饰后,只能指向一个对象,地址不能改变。但是原创 2020-08-18 19:23:51 · 91 阅读 · 0 评论 -
java内部类的简单理解
内部类在Java中可以将一个类定义在另一类或方法里面,这样的类称为内部类。广泛意义上内部类一般包括四种:成员内部类、局部内部类、匿名内部类、静态内部类// 外部类outerpublic class Outer{ // 内部类Inner class Inner{ }}1. 成员内部类成员内部类是最普通的内部类,也称作普通内部类成员内部类当成Outer的成员信息存在可以是任何的访问修饰符内部类的内部不能有静态信息内部类也是类,该继承继承,该重写重写,该重载重载,原创 2020-08-18 19:23:06 · 165 阅读 · 0 评论 -
java分割txt文件
import java.io.*;/*** * 分割大文件 */public class SplitFileUtil { // 使用示例 public static void main(String[] args) { // 目标文件 String targetFile = "C:\\Users\\YY\\Desktop\\《人性的弱...原创 2020-03-30 21:19:35 · 755 阅读 · 0 评论 -
解决IDEA控制台junit不能用Scanner输入
**问题:**IDEA在Junit测试中使用了Scanner,但是控制台一直转圈,无法输入解决:在配置文件idea.exe.vmoptions、idea64.exe.vmoptions**中添加,-Deditable.java.test.console=true好像一个是32位的,一个是64位的,(不确定的话就都加上吧。。。)https://intellij-support.jetb...原创 2020-03-23 18:46:11 · 359 阅读 · 0 评论 -
java的几种基本数据类型,各占多少字节?
bit:位,计算机中存储数据的最小单位,一个位代表一个0或1(即二进制),每8位组成一个字节(1 byte = 8 bit)byte:字节,用来计算存储容量的基本计量单位,,通常一个汉字占两个字节java中有8种基本数据类型注:整型数据默认为int类型,默认值为0,如果一个整数的值超出了int的表示范围,可以用long类型表示,例子: long a = 100000L,Long b =...原创 2020-02-29 18:51:21 · 2637 阅读 · 1 评论 -
String、StringBuffer、StringBuilder的区别,String为什么是不可变的
String是字符串常量StringBuffer、StringBuilder是字符串变量为什么String是字符串常量看一个例子:String s = "abcd" ;s = s+1; System.out.println(s);在视觉上看s确实变了,实际上这里第一行的s是对String对象的引用,指向String对象”abcd”,第二行又创建了一个新的String对象来存储新的值...原创 2020-02-28 18:20:18 · 270 阅读 · 0 评论