- 博客(91)
- 收藏
- 关注
原创 AtomicBoolean 的详细说明
通过使用 AtomicBoolean,可以确保所有操作的原子性和内存可见性,避免竞态条件和数据不一致的问题。避免滥用:虽然 AtomicBoolean 在多线程环境中非常有用,但在不需要原子性操作的场景中,使用普通 boolean 变量更简洁和高效。正确使用:在实际应用中,应根据具体需求选择合适的方法(如 set()、compareAndSet()),避免不必要的复杂性。
2025-04-08 15:42:48
713
原创 AtomicBoolean
通过这次的学习,可以了解AtomicBoolean的基本概念、核心方法以及其在多线程环境中的重要作用。通过实际案例的分析和编写,对如何正确使用AtomicBoolean有了更直观的理解。同时,也意识到在多线程编程中,选择合适的同步机制和原子类对于确保程序的正确性和性能至关重要。
2025-04-08 15:34:02
743
原创 Java注解入门
从JDK5开始,Java增加对元数据的支持,也就是注解,注解与注释是有一定区别的,可以把注解理解为代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。通过注解开发人员可以在不改变原有代码和逻辑的情况下在源代码中嵌入补充信息。 目录 * * Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。 * Java 语言中的类、方法、变量、参数和包等都可以被标注。和 Javadoc 不同, * Java 标注可以通过反射获取标注内容。
2021-07-21 21:13:01
206
原创 HTML入门
简单入门学习 目录1、第一个网页2、基本标签3、图像标签4、链接标签5、列表6、表格7、媒体元素8、界面结构9、内联框架10、表单 1、第一个网页 <!-- html注释 --> <!-- DOCTYPE:告诉浏览器,需要使用什么规范 --> <!DOCTYPE html> <html lang="en"> <!-- head标签代表网页头部 --> <head> <!-- meta描述性标签,用来描述网站的一些信息
2021-07-10 21:20:54
428
原创 Java1.8新特性
新特性 目录一、Lambda表达式二、函数式接口 一、Lambda表达式 * * Lambda表达式 * 是一种没有名字的函数,也可称为闭包,是Java8的新特性 * 本质上是一段匿名内部类,也可以是一段可传递的代码。也称箭头函数 * 特点: * 允许把函数作为一个方法的参数(函数作为参数传递到方法中) * 使用Lambda表达式可以让代码变得更加简洁 * 应用场景: * 列表迭代、Map映射、Reduce聚合、想替代一个不想命名的函数或类,该函数或
2021-06-08 22:56:01
1203
原创 Java网络编程入门
则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。 目录一、基础点二、TCP三、UDP 一、基础点 * * 网络编程概述 * Java中提供网络类库,可以实现网络连接,底层由JVM控制,且Java实现跨平台的网络库 * 程序员所面对的是一个统一的网络编程环境 * 计算机网络:把分布在不同地理区域的计算机和专门的外部设备用通信线路互连成一个规
2021-06-05 22:08:18
380
3
原创 Java正则表达式入门
则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。 目录一、正则表达式二、Matcher匹配器三、字符串去重demo 一、正则表达式 * * 正则表达式,定义了字符串模式,可以用来搜索、编辑或处理文本并不限于某一种语言,在任何语言中都有,有细微差别 * Java中在1.4推出java.util.regex包,为java提供了使用正则表达式的应用
2021-06-03 22:22:29
320
原创 Java中多线程、三
线程是程序中执行的线程,Java虚拟机允许应用程序同时运行多个执行线程。 目录一、线程池二、模拟实现3个窗口同时卖票 一、线程池 * * 线程池 * 背景:经常创建和销毁、使用量特别大的资源,比如并发情况下的线程,对性能影响很大 * 思路:提取创建好多个线程,放入线程池中,使用时直接获取,使用完放回线程池中,可以避免频繁创建、 * 销毁,实现重复利用。类似于生活中的公共交通工具 * 好处: * a: 提高相应速度(减少创建、销毁新线程的时间) *
2021-05-29 22:45:29
108
原创 Java中多线程、二
线程是程序中执行的线程,Java虚拟机允许应用程序同时运行多个执行线程。 目录一、守护线程与定时器二、死锁三、线程通信四、经典面试题:生产者和消费者五、多线程下单例模式 一、守护线程与定时器 * * 守护线程(兜底线程) * 每个程序运行中,都会默认开启一个守护线程,用于监听程序 * 当程序执行完,没有任何一个线程在哪执行时,JVM就需要退出,这时守护线程也会退出,主要完成垃圾回收等功能 * 可以使用Thread.setDaemon()方法,把某个线程设置为守护线程 * 但必须
2021-05-28 22:45:28
166
原创 Java中多线程、一
线程是程序中执行的线程,Java虚拟机允许应用程序同时运行多个执行线程。 目录一、线程创建方式二、线程优先级三、线程生命周期四、线程控制五、线程同步机制 一、线程创建方式 /* * 程序、进程、线程: * 程序(program):为了完成特定任务,用某种语言编写的一组指令的集合。指一段静态的代码,静态对象 * 进程(process):是程序的一次执行过程,或是一个正在运行的程序。是一个动态的过程 * 有其产生、存在和消亡的过程(生命周期) * 系统会在运行时为每个进程分
2021-05-27 22:31:16
201
原创 JDBC中使用的jar包
无需C币,直接下载 MySQL连接:mysql-connector-java-8.0.16.jar 链接:https://pan.baidu.com/s/139TmVwqftBZyrwgL9DXgWg 提取码:0w0q 复制这段内容后打开百度网盘手机App,操作更方便哦 DBCP连接池:commons-dbcp-1.4.jar和commons-pool-1.6.jar 链接:https://pan.baidu.com/s/1E83JtTSI6DsKEkWB64doXA 提取码:d468 复制这段内容后打开
2021-05-27 18:24:24
1992
1
原创 Java中IO(五、java.io.File类)
文件和目录路径名的抽象表示 目录一、File类二、使用File类实现文件递归复制util工具类测试util类用户类 一、File类 /* * java.io.File类:文件和文件路径的抽象表示形式,与平台无关 * 在操作系统层面,一切皆文件。文件是操作系统保存数据和逻辑的唯一形式 * File能新建、删除、重命名文件和目录,但是不能访问文件内容本身 * 如果需要访问文件内容本身,需要使用输入/输出流 * File 类不具有从文件读取信息和向文件写入信息的功能,它仅描述文件本身
2021-05-26 22:46:41
265
原创 Java中IO(四、基本数据流与对象流)
DataInputStream数据输入流允许应用程序以独立于机器的方式从底层输入流中读取基本的Java数据类型,对于多线程访问,DataInputStream不一定安全。 ObjectOutputStream将Java对象的原始数据类型和结构写入OutputStream。可以使用ObjectInputStream读取(重构)对象。对象的持久存储可以通过使用流的文件来完成。如果流是网络套接字流,则可以在另一个主机上或在另一个进程中重构对象。 ObjectInputStream反序列化使用的是ObjectOut
2021-05-24 22:36:59
419
4
原创 LeetCode_4_输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)
/* * 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。 示例 1: 输入:head = [1,3,2] 输出:[2,3,1] 限制:0 <= 链表长度 <= 10000 * 方法1:利用递归的思想实现 * 由题意知:逆序返回每个节点值,那么将末尾节点依次添加到list中,然后将list转换为数组即可 * 递归:每次传入head节点,如果节点值为null,直接返回,终止递归 * 如果非null,递归查找下一
2021-05-17 22:52:57
621
原创 Java中IO(三、转换流与打印流)
InputStreamReader是从字节流到字符流的桥梁,它读取字节并使用指定的字符集将其解码为字符,通常将InputStreamReader包装在BufferedReader中使用。PrintStream为另一个输出流添加了功能,即方便地打印各种数据。 目录一、转换流二、打印流三、使用打印流完成文件复制 一、转换流 /* * 转换流 * 输入流:InputStreamReader,将字节输入流转换成字符输入流 * 输出流:OutputStreamWriter,将字节输出流转换成字符输出流
2021-05-14 22:52:56
116
原创 LeetCode_3_实现一个函数,把字符串s中的每个空格替换成“%20“
/* * 请实现一个函数,把字符串s中的每个空格替换成"%20"。 * 示例 1: 输入:s = "We are happy." 输出:"We%20are%20happy." * 在Java中,字符串被设计为(不可变)类型,即无法直接更改原字符串来完成替换空格。因此需要重新new一个字符串 * 思路1:考虑到空格替换后大小改变,由于StringBuilder是可变长的字符串缓冲区,可new一个StringBuilder * 根据需求依次添加字符即可。先转为字符数组,循环遍历,遇到
2021-05-14 22:30:13
385
原创 LeetCode_2_二维数组中的查找
/* * 剑指 Offer 04. 二维数组中的查找 * 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。 * 请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 * 现有矩阵 matrix 如下: [ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14
2021-05-10 22:53:51
177
原创 LeetCode_1_找出数组中重复的数字
/* * 找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。 * 数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。 * 请找出数组中任意一个重复的数字。 示例 1: 输入: [2, 3, 1, 0, 2, 5, 3] 输出:2 或 3 * 原地置换法: * 由题意知,数组中所有数字都在0~n-1的范围内,因此,我们希望每个索引(位置)上的 * 数
2021-05-08 22:54:49
259
原创 Java中IO(二、缓冲流)
缓冲流 创建BufferedInputStream时,将创建一个内部缓冲区数组。当读取或跳过流中的字节时,根据需要从包含的输入流中重新填充内部缓冲区,每次填充多个字节。 目录缓冲流一、BufferedInputStream二、BufferedOutputStream三、BufferedReader三、BufferedWriter 一、BufferedInputStream /* * BufferedInputStream * 缓冲流,是包装流,创建对象的时候,传入的参数不是文件地址,而是文件流对象
2021-04-30 23:15:36
261
1
原创 Java中IO(一、文件流)
文件流 FileInputStream从文件系统中的文件获取输入字节。哪些文件可用取决于主机环境。 FileInputStream用于读取原始字节流,如图像数据。要读取字符流,请考虑使用FileReader。 目录文件流一、IO二、FileInputStream三、FileReader四、FileOutputStream 一、IO /* * 数据结构 * 数据结构是计算机存储和组织不同数据的方式,不同数据结构根据存储的方式、操作以及特性加以区分 * 当前SE基础中接触到有以下几类: *
2021-04-30 23:05:57
228
1
原创 Java集合中Map
Map Map将键映射到值的对象,不能包含重复的键,每个键最多只能映射到一个值。 这个接口取代了Dictionary类,Dictionary类是一个完全抽象的类,而不是一个接口。 Map接口提供了三个集合视图,允许将Map的内容视为一组键、一组值或一组键值映射。map的顺序定义为映射集合视图上的迭代器返回其元素的顺序。一些map实现,比如TreeMap类,对它们的顺序做了特定的保证;其他的类,比如HashMap类,则不然。 注意:如果使用可变对象作为映射键,则必须谨慎。当对象是map中的键时,如果对象的值以
2021-04-29 21:18:15
319
原创 Java集合中Set
Set Set是继承了Collection接口的抽象接口,不包含重复元素的集合。简单地说,集合不包含一对元素e1和e2,例如e1.equals(e2),最多包含一个空元素。 目录Set一、Set二、TreeSet三、比较器Comparable和Comparator四、HashSet 一、Set /* * Set元素特点:无序(添加顺序)不可重复 * TreeSet: 底层红黑树 * HashSet: 底层散列表 * */ public class _01_Collection_Set {
2021-04-29 20:53:28
200
原创 Java集合中List
List列表 List是有序的集合(也称为序列)。通过List可以精确控制每个元素在列表中的插入位置。可以通过整数索引(在列表中的位置)访问元素,并在列表中搜索元素。与集合不同,列表通常允许重复的元素。简单地说,列表通常允许成对的元素e1和e2,例如e1.equals(e2),如果它们允许空元素,则通常允许多个空元素。 目录List列表一、List二、ArrayList三、ArrayList常用方法四、LinkedList总结 一、List /* * List元素特性:有序(添加顺序)可重复 *
2021-04-26 13:38:01
122
原创 Java中集合
Java中集合类 Collection 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录Java中集合类 Collection概述一、迭代器二、所有Collection子类都有的两个方法1.引入库2.读入数据总结 概述 /* * Collection:使程序能够存储和操纵元素不固定的一组数据,集合类属于java.util包中 * 数组:长度固定,
2021-04-26 13:11:00
107
原创 Java中异常机制
概述 /* * 如果程序报错,会终止程序生命周期执行(错误代码后代码不再执行) * 1 异常机制 * 异常时错误的一种说法 * 在Java中有一个模拟所有异常和错误的类(Throwable),所有异常都必须继承这个类 * 目的:增强程序的鲁棒性、健壮性 * * 异常对于程序员在编程时,是对于某些高风险的操作规定了一个提醒机制,对于系统来说 * 就是处理异常的触发机制 * * 2 异常的处理形式 * try...catch... : 解决异常,一般用在客户端 * throws : 抛
2021-04-24 10:12:53
228
原创 Java中enum枚举类型、Math类、大数
enum枚举类型 /* * Enumerate:enum枚举类型 * 可看做是一个常量的集合 * 当需要一系列有限的值,用的较多,且不更改的情况(使用常量时) * 使用枚举,更容易发现错误,在编译阶段会对类型进行检查,减少错误 * */ public class _01_Enum { public static void main(String[] args) { String username = "admin"; String password =
2021-04-22 22:49:14
228
原创 Java中Data类的简单使用
import java.util.Calendar; /* * 日历类 * 获取年月日 时分秒 星期 * */ public class _01_Calendar { public static void main(String[] args) { // 创建日历对象 Calendar c = Calendar.getInstance(); // 获取本周第几天(周日是第一天)。星期表示为0~6 System.out.print
2021-04-21 22:55:24
1210
原创 Java包装类
简介 /* * 包装类:封装了基本类型的操作,方便使用 * byte -- java.lang.Byte * short -- java.lang.Short * int -- java.lang.Integer * long -- java.lang.Lang * float -- java.lang.Float * double -- java.lang.Double * char -- java.lang.Character * boolean -- java.lang
2021-04-21 22:47:41
89
原创 Java字符串String(详细)
简介 /* * java.lang.String:字符串类,并且该类加final修饰 * 底层是char数组 private final char value[]; * 字符串中很多特性与数组一致 * 1 字符串一旦创建不可更改 * 2 为了提升字符串的访问效率,Java提出字符串常量池,相当于一个缓冲区。存在于方法区中 * 引用类型对象保存在堆内存,字符串保存在静态区的字符串常量池中 * 3 在程序执行过程中,如果用到某个字符串,如“abc”,虚拟机会先去常量池中搜索, *
2021-04-20 22:53:26
460
原创 Java面向对象demo(学生类)
测试类 public class StudentTest { public static void main(String[] args) { // 设置person属性 // 由于需要设置讲师、辅导员、学生类的属性值(姓名、性别),这是全部类继承person // 故person的多态方式实现,这里使用匿名对象传参 // 避免使用 中文 作为引用变量名 Person 孙 = setPerson(new Teach
2021-04-19 22:49:09
433
原创 Java设计模式(单例模式、工厂模式)
/* * 设计模式: * 代表最佳的实现方式,是有经验的开发人员通过开发总结出来的一些经验和错误,用来解决一系列问题 * 是前人对代码开发的经验总结,不是特定的语法结构,而是一套用来提供 可复用性、可维护性、 * 可读性、健壮性、安全性 的解决方案 * 将常用的编码方式总结出来,形成固定的结构 * 开发中使用设计模式,等同于使用前人的经验,可避免很多错误及问题 * * 单例模式:只让某个类创建一个对象 * 实现步骤 * 要控制
2021-04-13 22:40:43
145
原创 Java内部类
/* * 内部类: * 当一个事物的内部,还有一个部分需要一个完整的结构进行描述,而这个类的内部完整的结构又只为外部事物提供服务 * 那么整个内部的完整结构最好使用 内部类 * 在Java中,允许一个类的定义位于另一个的内部,前者为内部类,后者为外部类 * innerclass一般用在定义它的类或语句块之内,在外部引用它的时候必须给出完整的名称 * 重要作用:可以访问外部类的私有化数据 * 变量: * 成员变量:成员内部类 * 静态变量:静态内部类 * 局部变量:局部内部类
2021-04-12 22:47:09
101
原创 Java中Object类的几个常用方法
equals 方法 /* * Object:是Java中提供的一个根类 * 所有类都直接或间接的继承了 Object * 如果一个类没有显示继承父类,那么该类默认继承 Object * Object 中的方法是所有类都有的功能 * Object xxx = new xxx; 可以发生多态 * 如果一个方法需要传递数据,却不能确定数据的类型的时候,可以写 Object * * 学习方法 * 1 该方法属于哪个类 * 2 是什么方法(静态/成员) * 3 功能、入参、出参分别是?
2021-04-12 22:41:28
494
原创 Java接口
/* * 引用数据类型:类、数组、接口 * 接口是一种引用数据类型,可看做是一种特殊的类,是Java为了解决没有多继承引起的功能变弱的问题 * 一个类只能有一个父类,但可以实现多个接口 * 接口不能代表一类实体,只能代表功能或属性,单纯的规范,时功能或属性独立出来,而不依赖于实体 * * 创建接口方式:class变成interface,父子关系由extends变成implements * 类和类:使用extends实现,单继承 * 类和接口:使用implements实现,以逗号隔开,如:cl
2021-04-12 22:25:15
80
原创 Java覆写Override
/* * 覆写:覆盖/重写/覆写 * 覆写特指成员方法,通过覆写实现特有的功能 * 子类有自己的特有属性 * 可以覆写父类的成员方法 * 应用场景 * 1 什么时候需要重写 * 如果父类无法满足子类需求,需将父类中的方法重写 * 2 重写条件 * 1 必须具有继承关系 * 2 方法名必须相同,返回值必须相同,参数列表必须相同 * 3 不能比原方法具有更宽泛的异常 * 4 不能比原方法具有更低的访问权限 * 5 特指成
2021-04-11 22:45:08
123
原创 Java关键字super
/* * super * super保存了父类型特征 * 在子类中访问父类的属性 * * 用法: * 1 用于成员/构造方法中区分子类和父类同名的成员属性 * 2 用于子类构造方法中,调用父类构造方法(必须出现在子类构造方法的第一行) * 如果子类构造方法中 没有this(xxx) 也没有super(xxx) 那么默认会有一个super()去调用父类的无参构造 * this和super都必须出现在构造方法的第一行,那意味着他两不能同时出现 * this和super都不能出
2021-04-11 22:44:53
120
原创 Java继承
/* * 继承: * 提高代码的复用性,父类的功能,更一般化的字段和方法放在超类中。子类可以直接使用,且派生类通过扩展超类而特殊化,使子类功能更加强大 * Java中只支持单继承,一个类只有一个父类 * 使用extends关键字表示 * 继承是个体与个体之间的继承 * 私有化属性不能被继承 * 一个类如果没有显示继承另外一个类,则该类默认继承 Object * java.lang.Object 是Java中所有类的超类,Object中的属性及方法所有类共享 * * 目的:
2021-04-11 22:44:26
68
原创 Java详细基数排序
/* * 基数排序 * 思想:借助“分配”和“收集”类中操作对关键字进行排序。若关键字是数值,且值为[0~999] * 则可把每一位十进制数看成一个关键字,且关键字由{1,10,100}组成 * 只要从最低位关键字起,按照关键字的不同值(可采用求余数)将序列“分配”到RADIX个队列中 * 再重新“收集”起来。重复执行d次(若关键字为{1,10,100},d=3),即可实现排序 * 思路:1 给定一个正整数序列,首先查找关键字。关键字由每一位十进制组成,通过序列最
2021-04-11 22:43:58
193
原创 Java关键字abstract
/* * 抽象方法 * abstract是修饰符 * 使用abstract修饰的类是抽象类 * 使用abstract修饰的方法是抽象方法,抽象方法没有方法体,只有功能定义,没有功能实现,用于让子类实现 * 实现抽象方法就是给抽象方法加上方法体,去掉abstract修饰符 * * 抽象类的目的:该类不能被实例化对象,只能被继承 * 抽象方法一定在抽象类中 * 抽象类中不一定有抽象方法,也可以没有 * 如果想让某个类不能创建对象,也可以把该类创建为抽象类 * 抽象类有构造方法,通
2021-04-10 22:47:55
107
原创 Java多态
/* * JVM特性:多线程、跨平台、面向对象、自动垃圾回收机制 * * 面向对象特征:封装性、继承性、动态性(多态)、抽象 * * 多态相关知识点: * 软件设计六大原则 * 1 单一职责原则:功能职责单一,只拥抱一种变化 * 2 里氏替换原则:所有在使用父类的情况下,都可以使用子类 * 3 依赖倒置原则:高层通过抽象依赖底层 * 4 接口隔离原则:不应该依赖于它不需要的接口 * 5 迪米特原则:最少只是原则,减少程序的耦合 *
2021-04-09 22:51:01
98
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人