![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 52
重剑DS
学的越多,越觉无知
展开
-
在Java中,内部类分为两种主要类型:非静态内部类和静态内部类
非静态内部类 B 持有对它的外部类 A 实例的隐式引用,也就是可以访问外部类的所有成员变量和方法,包括私有成员。非静态内部类 B 的字节码文件命名为 A$B.class。只能访问外部类的静态成员,不能直接访问外部类的实例成员。静态内部类 C 的字节码文件命名为 A$C.class。静态内部类 C 没有对外部类 A 实例的隐式引用。原创 2024-07-18 16:49:41 · 190 阅读 · 0 评论 -
wait和sleep在同步方面的区别
在 Java 中,wait和sleep都用于让线程进入等待状态,但它们在同步操作和线程管理方面有显著区别。原创 2024-07-08 18:40:51 · 550 阅读 · 0 评论 -
Java线程死锁及解决方法
多线程环境下,死锁即两个或两个以上的线程去争夺同一个共享资源,而导致互相等待的情况。原创 2024-07-08 13:10:53 · 1466 阅读 · 0 评论 -
用ThreadLocal解决线程隔离问题
结果:使用ThreadLocal解决上面线程隔离问题。结果:如果使用也可以完成一样的效果,但是却牺牲了程序的并发性。另一个需求场景:弊端使用ThreadLocal相比常规的解决方案的优势。原创 2024-07-07 21:46:28 · 862 阅读 · 0 评论 -
Java引用的4种类型:强、软、弱、虚
在Java中,引用的概念不仅限于强引用,还包括软引用、弱引用和虚引用(也称为幻影引用)。这些引用类型主要用于不同的内存管理策略,尤其是在垃圾收集过程中。原创 2024-07-07 21:01:47 · 449 阅读 · 0 评论 -
ThreadPoolExecutor - 管理线程池的核心类
行为:支持定时任务和周期性任务的线程池,核心线程数由 corePoolSize 决定,超出线程池和等待队列容量的任务会被拒绝并抛出异常。线程池可根据需求动态创建新的非核心线程,闲置超过 10 毫秒的线程会被终止并移出缓存,虽然话是这么说,但是由于 DelayedWorkQueue 是一个无界队列,通常情况下不会出现任务队列满的情况,因此非核心线程在 ScheduledThreadPoolExecutor 中被使用的机会较少,就主要还是依赖。换句话说,生产者线程和消费者线程必须直接在队列上进行任务的交接。原创 2024-07-07 14:00:45 · 936 阅读 · 0 评论 -
String类对象比较:==和equals的具体细节
【代码】String类对象比较:==和equals的具体细节。原创 2024-07-06 20:40:39 · 146 阅读 · 0 评论 -
Object的常用方法
【代码】Object的常用方法。原创 2024-07-05 21:05:39 · 128 阅读 · 0 评论 -
Bean类的设计规范:Bean规范
Bean规范类要求必须含有无参,公共的构造方法属性必须私有化,然后提供公共的 set 和 get 方法原创 2024-07-05 20:08:15 · 107 阅读 · 0 评论 -
匿名内部类
下面代码中,Person24 是一个抽象类,这意味着它不能被直接实例化,只能通过继承它的子类来实现其抽象方法。代码片段中展示了如何使用匿名内部类来实现一个抽象类的实例。下面代码片段中展示了如何使用匿名内部类来实现一个接口的实例。原创 2024-07-05 19:38:52 · 136 阅读 · 0 评论 -
Java接口和类
【代码】Java接口和类。原创 2024-07-05 16:34:51 · 152 阅读 · 0 评论 -
Java final关键字
Java提供了一种语法,可以在数据初始化后不被修改,使用关键字final,一般将final修饰的变量称之为常量,或者叫不可变变量。原创 2024-07-05 15:06:19 · 205 阅读 · 0 评论 -
四种封装 ThreadPoolExecutor 的线程池的使用以及直接使用 ThreadPoolExecutor ,优缺点分析
下面是手动创建线程和执行任务过程,可见挺麻烦的,而且线程利用率不高。池化思想:线程池、字符串常量池、数据库连接池。原创 2024-07-05 13:07:15 · 284 阅读 · 0 评论 -
Runnable和Callable的使用
【代码】Runnable和Callable的使用。原创 2024-07-04 20:39:29 · 393 阅读 · 0 评论 -
Java线程
但是Thread的下面三行run方法被重写了,也就不用管Runnable类的target了,虽然Runnable类的target的run方法被重写了,所以没机会执行Runnable类的target的run方法了。创建了一个实现了 Runnable 接口的匿名内部类的对象,然后这个Runnable类的匿名内部类的对象被传给Thread的target。在 Java 中,创建并启动一个新的线程通常有两种主要的方式:继承 Thread 类和实现 Runnable 接口。ps:若两个同时使用呢?原创 2024-07-04 19:47:58 · 427 阅读 · 0 评论 -
x.java => 字节码文件x.class => 运行
javac.exe.java.class字节码java.exe.class字节码.class字节码。原创 2024-07-04 09:45:44 · 204 阅读 · 0 评论 -
Java IO - 文件流、文件复制、缓冲流、字符流
【代码】Java IO - 文件流、文件复制、缓冲流、字符流。原创 2024-07-03 20:39:36 · 84 阅读 · 0 评论 -
for循环中list触发fast-fail或不触发的原理和方法
想要在循环时进行增删操作,也就是进行这类对集合结构性有影响的操作,就要保证数据隔离性,下面是三种数据隔离性的处理方式,本质都是复制东西,只是复制的东西有所不同。首先两者拿的是同一个迭代器,并且两者不同步,一个都遍历结束了,另一个都还没开始就无法遍历集合了,但是他本来循环从头开始遍历集合的所有数据的。for-each循环对集合进行增删也可能抛出异常,因为for-each在反编译下可以发现就是迭代器的语法糖,所以涉及到对迭代器的使用。比如有两个线程都需要使用迭代器进行遍历集合的操作,如果通过直接实现。原创 2024-07-03 13:05:44 · 1389 阅读 · 0 评论 -
TreeMap 和 TreeSet 的基本情况、特性以及使用场景,并对比它们与 HashMap 和 HashSet
选择TreeSetTreeMapHashSet或HashMap需要有序集合/映射,范围查询:选择TreeSet或TreeMap。需要快速查找、插入和删除,无序要求:选择HashSet或HashMap。理解各自的特性和使用场景,能够更高效地解决问题。原创 2024-06-30 18:51:19 · 376 阅读 · 0 评论 -
实现Set接口的HashSet
当向 HashSet 中添加重复的元素时,HashSet 会检测到并拒绝添加该元素。HashSet 的底层实现实际上依赖于 HashMap,而 HashMap 的底层结构确实是。实践任务:创建一个程序,使用HashSet去除重复的元素。原创 2024-06-30 14:44:48 · 286 阅读 · 0 评论 -
实现List接口的ArrayList和LinkedList
抽象类在 Java 中是用于定义类的骨架的类,包含具体方法(有方法体)和抽象方法(没有方法体)。抽象类不能被实例化,必须被子类继承,并且,如果子类不是抽象类,那么子类必须实现所有抽象方法。抽象方法和具体方法:抽象类可以包含抽象方法和具体方法。抽象方法没有方法体,具体方法有方法体。子类必须实现抽象方法,或者自身也声明为抽象类。成员变量:抽象类可以包含成员变量,可以使用各种访问修饰符(public、protected、private)。构造方法:抽象类可以有构造方法,但不能用来创建对象实例。原创 2024-06-29 17:32:35 · 430 阅读 · 0 评论 -
Java访问修饰符的区别
但是默认的不加显示修饰符的包级私有(package-private)方法,就算你继承了,是它的子类,但是父类和子类不同同一个包下,那就是无法访问包级私有(package-private)方法。我感觉这里就是核心了,可以发现在不同包下,只要继承了不同包下的类,就可以访问它的protected类型方法,即使不在同一个包下。默认(无修饰符):包级私有(package-private),只有在同一个包中可以访问。protected:受保护的,同一个包中的类和所有子类(可跨包)可以访问。原创 2024-06-29 12:27:58 · 284 阅读 · 0 评论 -
java中的基本数据类型和引用数据类型的根本区别
这些区别使得基本数据类型和引用数据类型在 Java 中有着不同的特性和行为。理解这些区别对于编写 Java 程序非常重要,尤其是在处理参数传递、对象引用和内存管理时。在 Java 中,基本数据类型和引用数据类型有着根本的区别。原创 2024-06-24 15:16:01 · 148 阅读 · 0 评论 -
[Java] Java Calendar设置时区实例
设置时区GMT 就是格林威治标准时间的英文缩写(Greenwich Mean Time 格林尼治标准时间),是世界标准时间,gmt+8 是格林威治时间+8小时,中国所在时区就是gmt+8 。//设置时区为"GMT+08:00"TimeZone tz = TimeZone.getTimeZone("GMT+08:00"); // 中国时区Calendar calendar = Calendar.getInstance(); calendar.setTimeZone(tz); // 时区转换..原创 2021-12-05 21:49:09 · 4622 阅读 · 0 评论