Java基础
文章平均质量分 56
青衫客36
这个作者很懒,什么都没留下…
展开
-
CyclicBarrier & CountDownLatch
可重复使用:它的设计允许在多个循环或阶段中重复使用,当一组线程到达屏障后,屏障会自动重置,进入下一轮等待。是一次性的:它的计数器一旦到达 0,就无法再次使用,只能用于一次性任务协调。如果需要再次使用,必须创建新的实例。原创 2024-09-11 23:01:40 · 755 阅读 · 0 评论 -
Java泛型中的PECS 原则
使用extends时,集合主要用作生产者,从中读取数据。由于集合的元素至少是指定类型的子类,可以保证类型安全。: 使用super时,集合主要用作消费者,向其中写入数据。由于集合的元素至少是指定类型的父类,可以安全地向集合中添加数据。通过理解和遵循 PECS 原则,可以编写出更加灵活和类型安全的泛型代码。这种设计能够更好地利用 Java 泛型的优势,确保代码在处理不同类型的集合时保持类型安全。原创 2024-08-06 20:53:08 · 922 阅读 · 0 评论 -
Java泛型中的extend 和 super
extends:用于指定类型参数的上界,通常用于生产者(只读)的场景。super:用于指定类型参数的下界,通常用于消费者(只写)的场景。PECS 原则:Producer Extends, Consumer Super,指导何时使用extends和super。通过理解和正确使用extends和super,可以编写出类型安全且灵活的泛型代码,满足各种不同的需求。原创 2024-08-06 20:50:19 · 434 阅读 · 0 评论 -
Java基础- equals() 和 hashCode()
方法,以确保遵守Java的约定,并保证对象可以在Java的所有集合中正确地工作。返回的值)不同,这将导致集合无法正确地存储或检索对象。方法,这是因为Java的集合框架的设计遵循了一致性的原则,即如果两个对象通过。中,我们可能会发现无法查找到刚刚放入的对象,因为查找过程依赖于。方法它们应该是相等的),从而破坏集合的唯一性约束。方法的文档明确规定了这一点,即如果两个对象根据。方法来改变对象的相等性逻辑时,同样需要重写。方法比较是相等的,那么这两个对象的。方法是相等的,那么在两个对象上调用。),但它们的哈希码(原创 2024-02-03 20:44:32 · 406 阅读 · 0 评论 -
Java基础- default 和 protected
是两种不同的访问修饰符,它们用来设置类、变量、方法和构造器的访问级别。理解这两者之间的区别对于管理Java程序中的访问权限非常重要。了解这些区别可以帮助在Java程序设计中更好地控制类成员的访问权限,从而提高代码的封装性和安全性。原创 2024-02-03 20:11:52 · 1012 阅读 · 0 评论 -
Java- @FunctionalInterface声明一个接口为函数式接口
是 Java 8 中引入的注解,用于声明一个接口是函数式接口。函数式接口是指仅包含一个抽象方法的接口,可以用于支持 Lambda 表达式和方法引用。注解确保该接口只包含一个抽象方法,从而确保其满足函数式接口的定义。以下是使用注解是一种良好的实践,因为它可以提醒开发者该接口是用于支持函数式编程的,同时编译器也能够在编译时进行验证,确保接口的设计满足函数式接口的要求。原创 2024-01-24 22:58:41 · 490 阅读 · 0 评论 -
Java- 流式处理
流式处理(Stream API)是Java 8 中引入的一项功能,它提供了一种更为声明式和函数式的方式来处理集合数据。通过使用流,可以更轻松、清晰地执行各种集合操作,如过滤、映射、聚合等。流可以用于处理数组、集合等数据源。流式处理提供了一种更简洁、可读性更高的方式来处理集合数据,同时也能够更好地利用多核架构,提高性能。原创 2024-01-24 22:52:59 · 2376 阅读 · 0 评论 -
Java- 常用的函数式接口
这些函数式接口使得在Java中更容易实现函数式编程的概念,通过Lambda表达式或方法引用,可以简洁地表示各种不同类型的函数。是一些常用的函数式接口,用于表示不同类型的函数。原创 2024-01-24 22:44:46 · 557 阅读 · 0 评论 -
Java并发- ABA问题
ABA问题是在并发编程中出现的一种问题,特别是在使用非阻塞算法时。它主要发生在某些数据结构(如栈、队列、链表等)的原子操作中。ABA问题的名称来自于数据结构中元素的状态变化序列:元素最初处于状态A,然后被改变为状态B,最后又被改回原先的状态A。原创 2024-01-22 19:59:25 · 424 阅读 · 0 评论 -
浅谈Java序列化
假设我们有一个Person类,其中包含一些基本信息和一个不可序列化的字段(如线程)。我们可以自定义序列化和反序列化过程来处理这个不可序列化的字段。// 敏感信息,不希望序列化 public Employee(String name , int age , String ssn) {原创 2024-01-22 19:53:53 · 1038 阅读 · 0 评论 -
Java并发- wait set & entry set
在Java多线程编程中,wait set(等待集)和entry set(入口集)是两种不同的线程队列,它们用于管理线程同步和通信。它们的主要区别在于它们的用途和工作方式。wait()notify()总结来说,等待集用于线程间的协调和条件等待,而入口集用于管理对对象锁的竞争。两者都涉及线程等待的情况,但等待的原因和机制不同。在等待集中的线程是在等待某个条件的变化,而在入口集中的线程是在等待获取锁。原创 2024-01-21 17:47:35 · 778 阅读 · 0 评论 -
Java多线程- 生产者消费者
【代码】Java多线程- 生产者消费者。原创 2024-01-21 17:21:46 · 369 阅读 · 0 评论 -
Java基础- Function接口
整个流程是这样的:从employees列表创建一个流,过滤掉服务年限不超过 5 年的员工,然后将剩余员工的信息通过函数转换成字符串,最后将这些字符串收集到一个新的列表中。这个流水线式的处理方式使得对集合的操作既高效又易于理解。原创 2024-01-10 22:20:47 · 519 阅读 · 0 评论 -
Java基础- 泛型
如果一个泛型方法包含多个泛型类型参数,这些类型参数会在方法的声明中一起被指定。这允许方法在不同类型的参数上操作,而这些类型彼此之间可以是完全独立的。泛型方法的优点在于,我们可以编写一个方法,它可以在不同类型的数据上工作,而不需要针对每种数据类型编写重复的代码。泛型方法允许在方法级别上指定类型参数,提供了极大的灵活性和类型安全性。是一个类型参数,它将在整个方法中代表某个类型。是泛型方法的关键部分,它使得方法能够灵活地处理不同类型的数据,同时保持类型安全和清晰的代码结构。方法中,我们传递了一个。原创 2024-01-10 22:05:08 · 456 阅读 · 0 评论 -
JVM- 为什么G1垃圾回收器需要有大对象区
在垃圾回收的上下文中,大对象指的是那些占用大量内存空间的对象。:在G1垃圾回收器中,堆被划分为多个小块(Region),大对象区是特殊类型的Region,专门用于存放大对象。这种设计使得回收大对象更加高效,因为G1可以直接回收整个包含大对象的区域,而不需要逐个检查区域中的小对象。总的来说,G1垃圾回收器中的大对象区是对传统垃圾回收策略的一种优化,旨在提高处理大型对象时的性能和效率,同时减少内存碎片和停顿时间。:在传统的垃圾回收器中,大对象可能会被分散存储在堆内存的不同部分,从而导致内存碎片。原创 2023-12-18 17:46:13 · 815 阅读 · 0 评论 -
Java基础- transient关键字
transient关键字在Java中是一个重要的特性,用于控制对象序列化过程中哪些属性应该被忽略。正确使用它可以帮助提高程序的安全性和效率。原创 2023-12-01 13:20:27 · 415 阅读 · 0 评论 -
Java基础- 自定义类加载器
在 Java 中实现自定义类加载器通常涉及继承类并重写其findClass方法。自定义类加载器允许你从非标准来源(如网络、加密文件或其他媒体)加载类。原创 2023-11-30 13:48:22 · 2344 阅读 · 0 评论 -
JVM- 浅谈Java 类加载过程
类的加载是一个相对复杂的过程,涉及查找、读取、解析类数据,并在 JVM 内部创建相应的表示。这个过程是整个类生命周期中最初的阶段,为后续的链接、初始化等阶段奠定基础。由于 JVM 规范对类加载器的实现没有严格限制,因此不同的 JVM 实现或不同的类加载器可能在具体实现上有所差异。链接阶段是类加载过程的重要组成部分,它确保了类或接口被正确地整合到 JVM 的内部结构中。通过验证、准备和解析这三个子阶段,JVM 确保了代码的安全性和稳定性,同时为后续的初始化阶段做好准备。原创 2023-11-29 00:00:11 · 1136 阅读 · 0 评论 -
JVM字节码- long/double类型的比较
在 Java 虚拟机(JVM)字节码中,对于double和long类型的比较,没有直接等价于iflt(用于整型比较)这样的指令。相反,比较double和long类型的值涉及到一些不同的步骤和指令。原创 2023-11-27 14:12:05 · 589 阅读 · 0 评论 -
JVM基础- 垃圾回收器
每种垃圾回收器都有其优势和特定的应用场景。选择合适的垃圾回收器取决于应用的需求,比如对延迟的敏感度、堆的大小、处理器的核心数等。理解不同垃圾回收器的工作原理和特点对于优化Java应用性能和稳定性至关重要。原创 2023-11-20 16:39:09 · 616 阅读 · 0 评论 -
Java基础- Java 中的引用类型
定义:当在代码中创建一个对象并将其赋值给一个引用变量时,这个引用就是强引用。在这个例子中,obj是一个指向Object实例的强引用。内存管理:只要对象至少被一个强引用所持有,垃圾回收器就永远不会回收它。因此,强引用防止了其所指向的对象被垃圾回收器回收。内存泄漏风险:如果强引用被过度使用或不当管理,可能导致内存泄漏。当不再需要某个对象时,应该将其对应的强引用设为nullobj = null;// 对象现在可以被垃圾回收生命周期。原创 2023-11-19 21:23:22 · 274 阅读 · 0 评论 -
JVM中的 -Xms参数 设置 JVM 的初始堆大小
在 Java 虚拟机(JVM)的配置中,-Xms是一个启动参数,用于设置 JVM 的初始堆大小(Initial Heap Size)。这个参数对于优化 Java 应用程序的性能非常重要,特别是在处理需要大量内存的应用程序时。原创 2023-11-19 17:45:33 · 2129 阅读 · 0 评论 -
Java基础- StringBuilder & StringBuffer
是 Java 标准库中的一个类,用于创建和操作动态(可变的)字符串。与String类的实例不同,的实例可以在不创建新对象的情况下被修改。这使得在处理需要频繁修改字符串内容的情况下比String类更加高效。以下是。原创 2023-11-19 17:42:39 · 113 阅读 · 0 评论 -
Java基础- 浅谈javac和javap
文件信息:类文件的路径。Last modified 2023年11月18日;:最后修改时间和文件大小。:文件的 MD5 校验和。:源文件名称。类信息:公共类。:类文件格式的版本号,这里是 Java 11(major version 55)。:类的访问标志,表示这是一个公共类,并使用super关键字。:类自身和父类的引用。:类实现的接口数量、字段数量、方法数量和属性数量。原创 2023-11-18 23:57:12 · 672 阅读 · 0 评论 -
多线程引发的问题
Java中的i++不是原子操作,当i = 0时,两个线程分别对i进行++100次,值是多少?答:2 ~ 200。原创 2022-10-23 20:40:06 · 309 阅读 · 0 评论 -
浅谈JVM中的即时编译器(Just-In-Time compiler, JIT)
Java虚拟机(JVM)中的即时编译器(Just-In-Time compiler, JIT)是一个非常重要的组件,它负责将字节码转换为本地机器代码。然而,通过使用JIT,这个过程会变得更加高效。总的来说,JIT编译器是JVM中非常重要的组件,它可以显著提高Java程序的性能。】在运行时进行的优化利用了程序执行时的实际数据和行为,这些优化是静态编译时无法完成的。这些运行时优化利用了程序的实际执行情况和行为,使JIT编译器能够生成高度优化的代码,尤其是针对那些动态或不确定性很高的应用程序。原创 2023-08-09 14:40:31 · 1013 阅读 · 0 评论 -
Java基础-对象反序列化
【代码】Java基础-对象反序列化。原创 2022-11-28 19:12:53 · 598 阅读 · 0 评论 -
Java基础-对象序列化
【代码】Java基础-对象序列化。原创 2022-11-28 18:57:10 · 391 阅读 · 0 评论 -
Java基础-匿名内部类
匿名内部类可以作为方法的实际参数进行传输。原创 2022-11-28 14:26:50 · 85 阅读 · 0 评论 -
Java基础-内部类
注意:在成员内部类中访问所在外部类对象,格式:外部类名.this。原创 2022-11-28 13:57:18 · 131 阅读 · 0 评论 -
Java基础-static关键字
static修饰符原创 2022-11-28 11:38:52 · 122 阅读 · 0 评论 -
Java基础-继承
子类初始化之前,一定要调用父类构造器先完成父类数据空间的初始化。super(),不写也存在。原创 2022-11-28 11:11:58 · 424 阅读 · 0 评论 -
Java基础-继承
对外是一个对象,内部还是两个空间,子类信息还是放在子类空间中,父类信息还是放在父类空间中。原创 2022-11-27 22:42:51 · 70 阅读 · 0 评论 -
Java7对资源释放操作的简化
在try()括号中放置资源对象(用完会自动关闭),该对象必须继承 AutoCloseable接口才可以,否则会报错。连接资源被成功释放了!原创 2022-10-25 22:34:36 · 580 阅读 · 0 评论 -
Java基础-I/O文件复制
使用字节流实现复制文件的操作。原创 2022-10-25 22:10:39 · 250 阅读 · 0 评论 -
Java基础-I/O流(文件字节流)
注意,编码前的字符集和编码好的字符集要必须一致,否则会出现中文字符乱码,英文和数字在任何国家的编码中都不会乱码(编码都占1个字节)。ab3abcd我ff爱ff你d花bb花cd。字符串常见的字符底层组成是什么样的?读取了多少个字节: 31。原创 2022-10-24 21:46:24 · 1220 阅读 · 0 评论 -
反射的补充
泛型只是在编译阶段可以约束集合只能操作某种数据类型,在编译成Class文件进入运行阶段时,其真实类型都是ArrayList了,泛型相当于被擦除了。反射是作用在运行时的技术,此时集合的泛型将不能产生约束了,此时可以为集合存入其他任意类型的元素。反射为何可以给约定了泛型的集合存入其他类型的元素?使用反射编写迷你版MyBatis框架。反射可以绕过编译阶段为集合添加数据。[23, 22, 黑马]原创 2022-10-24 15:09:43 · 64 阅读 · 0 评论 -
Java基础-反射
反射的第一步:获取Class类对象,如此才可以解析类的全部成分。Constructor类中用于创建对象的方法。使用反射技术获取构造器对象并使用。1、利用反射技术获取成员变量的方式。获取Class类的对象的三种方式。使用反射技术获取构造器对象并使用。2、反射得到成员变量可以做什么?给通过反射得到的成员变量赋值。获取类中的全部成员方法对象。反射的基本作用、关键?原创 2022-10-24 13:08:29 · 524 阅读 · 0 评论