![](https://img-blog.csdnimg.cn/20210412214524697.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java Knowledge-Points
文章平均质量分 71
java小知识点
不会叫的狼
人类最大的进步就是学会共享!
展开
-
Stream流 - 取最大对象、最小对象
Stream流 - 取最大对象、最小对象原创 2023-06-12 15:25:21 · 2255 阅读 · 0 评论 -
Stream流 - 两个list集合对象属性的合并、对象属性值运算
Stream流 - 两个list集合对象属性的合并、对象属性值运算原创 2023-05-19 13:50:47 · 7360 阅读 · 0 评论 -
Java中 :: 方法引用的用法
:: 是Java 8 引入的新特性之一,被称作为方法引用。使用 “::” 可以进一步简化一些使用了lambda表达式的代码,让代码更加简洁。类的静态方法的引用对象的实例方法的引用父类方法的引用构造器引用.........原创 2022-08-29 16:51:47 · 1109 阅读 · 0 评论 -
Java枚举-enum
1、枚举用于声明一组常量。可与switch结合使用,可以直接判断枚举类型。2、如果枚举类中只有一个对象,则可以作为单例模式的实现方式。3、枚举类内置的方法:values()、valueOf()、ordinal(),枚举成员默认都被 final、public, static 修饰4、可以自定义枚举方法,编写属性对应构造方法、get方法5、枚举可以实现接口原创 2022-06-02 01:07:16 · 206 阅读 · 0 评论 -
Java类加载器-ClassLoader
1、ClassLoader用来加载class字节码文件,生成类对象。2、系统内置的ClassLoader通过双亲委托机制来加载指定路径下的class和资源。3、ContextClassLoader与线程相关,可以获取和设置类加载器。4、灵活运行自定义ClassLoader,可以解决类冲突问题,实现热加载以及热部署,甚至可以实现jar包的加密保护。转载 2022-05-27 18:21:02 · 1827 阅读 · 0 评论 -
JVM-Java Virtual Machine(Java虚拟机)
1、JVM内存模型包括线程共享区域、线程私有区域。2、线程共享区域:包括堆和方法区,堆上存放对象和数组,方法区存放类的信息、静态变量和常量。3、线程私有区域:包括虚拟机栈、本地方法栈和程序计数器。4、虚拟机栈中是一个个栈帧,每个栈帧对应一个被调用的方法,本地方法栈执行的是本地方法。5、程序计数器中保存的是当前需要执行的指令地址。......原创 2022-05-30 01:23:34 · 1249 阅读 · 0 评论 -
JMM-Java Memory Model(Java内存模型)
1、JMM屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的并发效果。2、线程的工作内存是主内存的副本拷贝3、JMM三大特性:原子性,可见性,有序性4、JMM八种内存交互操作:lock read load use assign store write unlock5、volatile:保证线程间变量的可见性、禁止CPU进行指令重排序...原创 2022-05-30 17:33:54 · 194 阅读 · 0 评论 -
Java四大引用
1、Java四大引用:强引用、软引用、弱引用、虚引用。2、强引用:不可能被垃圾回收器回收的,造成 Java 内存泄露的原因之一。3、软引用:只有当内存不足时垃圾回收器才会去清理这些对象。适合用在缓存中。4、弱引用:无论内存够不够,只要垃圾回收器启动,弱引用关联的对象肯定被回收。解决内存泄露的问题5、虚引用:管理堆外内存的原创 2022-05-25 02:12:48 · 272 阅读 · 0 评论 -
Java常见拷贝以及框架常见拷贝
1、System.arraycopy()实现数组拷贝,native方法,效率高。2、Arrays.copyOf()生成新的数组对象,指定数组长度。3、Apache的BeanUtils.copyProperties浅拷贝,populate方法可以Map集合封装JavaBean4、Spring的BeanUtils、CGLIB BeanCopier浅拷贝,CGLIB BeanCopier效率高5、orika实现对象拷贝是深拷贝原创 2022-05-22 02:28:59 · 450 阅读 · 0 评论 -
Java对象拷贝
1、clone(浅拷贝)会创建一个对象的副本,是native方法,效率高。2、浅拷贝,如果原型对象的成员变量是值类型,将复制一份给拷贝对象;如果原型对象的成员变量是引用类型,则将引用对象的地址复制一份给拷贝对象。原型对象和拷贝对象的引用类型变量指向相同的内存地址。3、深拷贝,无论原型对象的成员变量是值类型还是引用类型,都将复制一份给拷贝对象。4、建议使用序列化的方式来实现对象的深拷贝。原创 2022-05-22 00:32:19 · 2588 阅读 · 0 评论 -
Java创建对象方式
Java创建对象有5种方式:1、通过 new 关键字2、通过 Class 类的 newInstance() 方法3、通过 Constructor 类的 newInstance 方法4、clone 方法5、序列化原创 2022-05-21 18:08:52 · 648 阅读 · 0 评论 -
动态修改属性的注解值
思路:1、先获取需要修改的 Field2、通过 Field 的方法 getDeclaredField 获取需要修改的注解3、Proxy.getInvocationHandler(anno) 获取该注解代理实例所持有的 InvocationHandler4、获取 AnnotationInvocationHandler 的 memberValues 字段5、获取 memberValuesMap,通过该Map 对注解属性值获取修改原创 2022-08-21 23:58:23 · 1832 阅读 · 0 评论 -
动态给类添加属性
思路:1、通过commons-beanutils包下的类 PropertyUtilsBean 获取目标对象的属性 2、将需要新增的属性加入原对象的属性集合 3、通过cglib包下的类 BeanGenerator 创建新的Bean 4、遍历新创建的bean属性,为新增的属性赋值原创 2022-08-21 23:55:01 · 597 阅读 · 0 评论 -
Java注解和反射
1、先通过反射获取类对象、Method对象、Field对象,然后通过这些对象调用方法,获取相应的注解信息。2、getAnnotation(Class annotationClass):获取对应类型的注解3、getAnnotations():获取全部注解4、getAnnotationsByType(Class annotationClass):一般用于@Repeatable修饰的注解...原创 2021-08-30 00:15:48 · 460 阅读 · 0 评论 -
Java-注解
1、注解可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明、注释、标注。2、基本内置注解:@Override、@Deprecated、@SuppressWarnings、@FunctionalInterface3、元注解:@Target、@Retention、@Inherited、@Documented、@Repeatable4、自定义注解 注解类型声明为 @interface。...原创 2021-08-30 00:14:39 · 281 阅读 · 0 评论 -
Java-反射性能优化和工具包ReflectASM
1、Class.forName反射方法比较耗时,可以先把Class.forName返回的Class对象缓存起来,下次使用直接读取缓存,提高效率2、ReflectASM通过字节码生成的方式实现了更为高效的反射机制。3、ConstructorAccess反射来调用构造方法、4、FieldAccess反射获取属性5、MethodAccess反射调用方法6、reflectASM效率明显高于Java反射获取原创 2021-08-29 23:58:37 · 1247 阅读 · 1 评论 -
asm(Java字节码操控框架)和 CGlib(Code Generation Library)
1、asm 是一个 Java 字节码操控框架。它能够以二进制形式修改已有类或者动态生成类。2、CGLib基于asm,将代理对象类的class文件加载进来,通过修改其字节码动态生成子类,在子类中采用方法拦截的技术拦截所有父类方法的调用并顺势织入横切逻辑。3、FastClass可以直接定位到要调用的方法进行调用,这样省去了反射调用,所以效率比JDK动态代理快。...原创 2022-06-01 00:48:37 · 2122 阅读 · 0 评论 -
Java-动态代理
1、静态代理:委托类和代理类实现共同的接口,委托类传参代理类构造方法,代理类增加功能。2、JDK动态代理利用反射机制动态生成实现代理接口的类,在调用具体方法前调用InvokeHandler来处理,使用invoke()进行面向切面的处理。3、CGLIB动态代理利用继承机制动态生成子类,在调用具体方法前调用MethodInterceptor来处理,使用 intercept()进行面向切面的处理,调用相应的通知。原创 2021-08-30 00:35:51 · 290 阅读 · 0 评论 -
Java-反射
1、Java在将.class字节码文件载入时,JVM将自动为之创建一个Class对象,用于表示这个类的类型信息。代表该.class字节码文件,从该Class对象中可以获得类的许多基本信息,这就是反射机制基础。2、Constructor类3、Field类4、Method类原创 2021-08-29 12:41:22 · 1369 阅读 · 0 评论 -
Http请求-RestTemplate
是从 Spring3.0 开始支持的一个 HTTP 请求工具,它提供了常见的REST请求方案的模版,例如 GET 请求、POST 请求、PUT 请求、DELETE 请求以及一些通用的请求执行方法 exchange 以及 execute。GETHEADPOSTPOSTPOSTputPUTdeleteDELETEexchangeexecutecallback:提供常规的 Rest API(GET、POST、DELETE 等)方法调用;原创 2023-03-14 23:39:34 · 1306 阅读 · 0 评论 -
Http请求-HttpURLConnection、HttpClient
常见的Http请求方式原创 2023-03-11 01:07:36 · 639 阅读 · 0 评论 -
UDP和TCP编程
UDP特点:不建立连接;将数据源和目的封装成数据包中;DatagramSocket与DatagramPacketclient发送端思路建立udp的socket服务。将要发送的数据封装成数据包。通过udp的socket服务,将数据包发送出。关闭资源。client发送端代码111server接收端思路建立udp的socket服务。通过receive方法接收数据。将收到的数据存储到数据包对象中。通过数据包对象的功能来完成对接收到数据进行解析。可以对资源进行关闭。serve原创 2021-08-08 00:54:46 · 771 阅读 · 0 评论 -
网络编程基础
概述计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。网络编程网络编程就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换。网络编程最主要的工作就是在发送端把信息通过规定好的协议进行组装包,在接收端按照规定好的协议把包进行解析,从而提取出对应的信息,达到通信的目的。中间最主要的就是数据包的组装,数据包的过滤,数据包的捕获,数据包的分析,数据处理等。网络模型原创 2021-07-26 23:55:55 · 108 阅读 · 0 评论 -
Java并发-ThreadLocal
1、ThreadLocal为变量在每个线程中都创建了一个副本,且该副本只能由当前 Thread 使用,其它 Thread 不可访问,那就不存在多线程间共享的问题。2、Synchronized用于线程间的数据共享,而ThreadLocal则用于线程间的数据隔离。3、Thread线程包含ThreadLocalMap属性,ThreadLocal的弱引用作为key。4、ThreadLocal 变量通常被private static修饰。...原创 2022-05-31 02:10:38 · 615 阅读 · 0 评论 -
Java定时器Timer和第三方定时器Quartz
概述定时器在应用广泛,比如定时统计数据生成报表、每隔设定的时间提醒用户等。Java.util包自带的定时器Timer提供简单的定点执行功能,而Quartz是一个第三方提供的定时器框架。对比Timer优点:java.util包自带的,Timer的任务是通过创建TimerTask子类进行实现,使用方便。缺点:定时器没有持久性机制。定时器不能灵活的调度(只能设置开始时间和重复间隔,没有基于日期,一天中的时间等)定时器不使用线程池(每个定时器一个线程)定时器没有真正的管理方案,必须编原创 2022-01-05 00:32:45 · 1948 阅读 · 0 评论 -
异步执行结果-Callable、Future、FutureTask
异步执行结果-Callable、Future、FutureTask原创 2023-02-17 17:44:39 · 246 阅读 · 0 评论 -
线程池的使用场景
线程池的使用场景原创 2023-02-20 22:56:56 · 6093 阅读 · 0 评论 -
线程池整理汇总
线程池原创 2023-02-11 13:46:33 · 948 阅读 · 0 评论 -
Java多线程(下)
1、线程安全问题的依据:是否有多线程环境、是否有共享数据、是否有多条语句操作共享数据。2、同步机制synchronized:同步代码块(对象)、同步方法(this)、静态同步方法(类的字节码对象)。3、Collections.synchronizedList() :将集合转换成线程安全。4、Lock锁:lock、unlock。5、避免死锁。...原创 2021-06-17 01:06:40 · 299 阅读 · 0 评论 -
线程间通信
1、wait():使得当前线程进入阻塞等待状态,并且会释放执行wait的锁资源。2、notify():唤醒在此对象监视器上等待的单个线程。3、将共享资源类改为线程安全类,线程只需要直接调用同步方法即可,不需要编写同步代码逻辑。4、Timer:定时器、TimerTask:执行任务5、线程生命周期:新建、就绪、运行、堵塞(同步阻塞、等待阻塞、其他阻塞)、销毁原创 2021-06-27 00:45:59 · 253 阅读 · 0 评论 -
Java多线程(上)
1、进程是资源分配的最小单位。2、线程是CPU调度的最小单位。3、线程实现方式:继承Thread类、实现Runnable接口、匿名内部类4、线程调度:getPriority、setPriority。Java使用的是抢占式调度模型。5、线程控制:sleep、join、setDaemon、yield、stop、interrupt。6、线程生命周期:新建、就绪、运行、阻塞、销毁。原创 2021-06-08 00:13:16 · 311 阅读 · 0 评论 -
IO流(下)
1、DataInputStream:基本类型2、ByteArray*:字节数组、CharArray*:字符数组、String*:字符串3、PrintStream、PrintWrite可以传参File、String、OutputStream,可以指定字符集,可以指定自动刷新,还可以写入任意类型数据。4、ObjectInputStream:序列化流5、Properties:属性集合类6、RandomAccessFile:随机访问流、SequenceInputStream:合并流原创 2021-05-28 00:20:28 · 162 阅读 · 0 评论 -
Java字符编码及获取文件编码
1、字符编码:iso8859-1单字节编码、GBK双字节编码、unicode定长双字节(也有四字节的)编码,Java默认编码、utf-8不定长编码。2、编码:getBytes(charset)、解码:String(byte bytes[], String charsetName)。3、setCharacterEncoding():设置http请求或者相应的编码。4、UTF-8编码可以用GB2312/GBK和ISO8859-1解码后再编回去;GB2312/GBK编码后只能用ISO8859-1解码后再编回原创 2022-05-05 00:41:43 · 3230 阅读 · 0 评论 -
IO流(上)
1、IO流:字节流和字符流2、字节流:FileInputStream BufferedInputStream ByteArrayInputStream DataInputStream ObjectInputStream PipedInputStream PrintStream3、字符流:FileReader BufferedReader InputStreamReader CharArrayReader StringReader PipedReader PrintWriter原创 2021-05-18 00:44:34 · 255 阅读 · 0 评论 -
File类
1、File:文件和目录路径的表示。构造方法参数可以是目录、文件名、File对象。2、创建:createNewFile、mkdir、mkdirs;删除:delete;重命名:renameTo;判断:isDirectory、isFile、exists3、获取:getPath、getName、length;String[] list()、File[] listFiles():获取目录下的所有文件或者文件夹原创 2021-05-17 19:32:30 · 184 阅读 · 0 评论 -
Java异常
1、Throwable派生出Error类和Exception类。Error:JVM本身的错误,Exception:程序运行时发生的异常事件。2、Exception分为两类:运行时异常(RuntimeException及其子类)和编译时异常(Exception 中除 RuntimeException 及其子类之外的异常)。3、受检异常:编译时异常;非受检异常:运行时异常和错误(Error)。原创 2021-05-10 23:52:12 · 317 阅读 · 0 评论 -
Stream流 - 聚合操作和遍历操作
# 聚合操作将最终处理的结果进行聚合输出 * `min/max`:最值操作,需要比较器 * `count`:统计操作,统计数据个数 * `collect`:收集操作,使用官方的Collectors提供的收集器 * `findFirst/findAny`:查找操作,返回的类型为Optional * `noneMatch、AllMatch和anyMatch`:匹配操作,检查数据流中是否存在符合条件的数据,返回一个boolean值 * `reduce`:规约操作,将数据流的值规约为一个值原创 2022-08-30 14:42:34 · 3004 阅读 · 0 评论 -
Stream流 - 获取Stream和转换操作
- 获取Stream * Arrays.stream(arr) * list.stream() * Stream.of() * 从输入流中获取数据的方法 * 基本类型Stream:IntStream、LongStream 和 DoubleStream- 转换操作 * map:转换操作符,用于映射每个元素到对应的结果 * flatMap:合并转换 * filter:过滤操作,过滤满足条件的数据 * limit:限流操作 * skip:跳过操作 * distinct原创 2022-08-29 19:02:17 · 4438 阅读 · 0 评论 -
Collections-集合工具类
1、Collections:是针对集合操作的工具类,都是静态方法,为List接口提供排序等一系列功能。解决List不能排序的问题。2、排序分为:自然排序、比较器排序。3、二分查找:binarySearch、最大值:max、反转:reverse、随机置换:shuffle4、public static原创 2021-05-09 01:10:31 · 416 阅读 · 0 评论 -
集合间嵌套使用
1、ArrayList嵌套HashMap一般用于将多个键值对集合进行汇总。2、HashMap嵌套ArrayList一般用于将单列集合进行分类,并设置分类的属性。3、HashMap嵌套HashMap一般用于将多个键值对集合进行分类,并设置分类的属性。4、多层嵌套一般用于需要多层分类归纳的情况。原创 2021-05-08 15:38:21 · 428 阅读 · 0 评论