Java基础
文章平均质量分 50
记录Java基础的全流程
棠微风
这个作者很懒,什么都没留下…
展开
-
String类中使用正则表达式
String类的matches方法的底层 是调用的Mather类的matches方法,是进行字符串的整体匹配。原创 2024-05-25 10:42:58 · 393 阅读 · 0 评论 -
正则表达式——反向引用
可以用圆括号组成一个比较复杂的匹配模式,那么一个圆括号的部分可以看作是一个子表达式/一个分组。原创 2024-05-25 10:42:01 · 309 阅读 · 0 评论 -
正则表达式常用类
pattern对象是一个正则表达式对象,Pattern 类没有公共构造方法。要创建一个Pattern对象,需要调用其公共静态方法,来返回一个Pattern对象。该方法接受一个正则表达式作为它的第一个参数,如Pattern r = Pattern.compile(pattern);Matcher对象是对输入字符串进行解释和匹配的引擎。与Pattern类一样, Matcher也没有公共构造方法。需要调用Pattern对象的matcher方法来获得一个Matcher对象。原创 2024-05-10 22:35:46 · 263 阅读 · 0 评论 -
正则表达式语法详解
想要灵活的运用正则表达式,必须了解各种元字符的功能。元字符从功能上大致分为:限定符、选择匹配符、分组组合和反向引用符、特殊字符、字符匹配符、定位符。原创 2024-05-09 21:24:59 · 774 阅读 · 0 评论 -
正则表达式底层实现讲解
(2)找到后,将子字符串的开始索引记录到matcher对象的属性 int[] groups的groups[0](如groups[0] = 0),把子字符串的结束索引+1的值记录到 groups[1](groups[1] = 3);(2)找到后,将子字符串的开始索引记录到matcher对象的属性groups的groups[0] = 0,把子字符串的结束索引+1的值记录到 groups[1] = 4;(3)记录第1组()匹配到的字符串为groups[2] = 0,groups[3] = 2;原创 2024-05-09 00:32:34 · 342 阅读 · 0 评论 -
IO流——Properties类
(1)Properties类是专门用于读写配置文件的集合类。(2)配置文件的格式:键=值注意:键值对之间不需要有空格,值不需要用引号,默认类型是String。原创 2024-05-01 23:02:25 · 240 阅读 · 0 评论 -
IO流实现文件拷贝
注意:BufferedReader和BufferedWriter是按照字符进行操作,不要去操作二进制文件(声音、视频、doc),如果读取二进制文件可能会造成文件损坏。②创建文件输出流,将读取的文件数据 写入到指定的文件。①创建文件输入流,将文件读入到程序中。可以操作文本文件 或 二进制文件。原创 2024-05-01 23:01:20 · 21 阅读 · 0 评论 -
节点流和处理流 详解
(2)PrintStream是字节打印流,在默认情况下,输出数据的位置是标准输出,即输出到显示器。(2)ObjectInputStream和ObjectOutputStream是对象处理流,提供了对基本类型或对象类型的序列化和反序列化的方法。(2)BufferedOutputStream是字节流,实现缓冲的输出流,可以将多个字节写入底层输出流中,而不必对每次字节写入调用底层系统。①InputStreamReader:Reader的子类,可以将InputStream(字节流)包装成Reader(字符流)。原创 2024-04-27 23:15:45 · 392 阅读 · 0 评论 -
IO流——节点流和处理流的介绍和对比
(1)节点流可以从 特定的数据源(存放数据的地方) 读写数据,如FileReader、FileWriter。(2)处理流(也叫包装流)是“连接”在已存在的流(节点流或处理流)之上,为程序提供更为强大的读写功能,也更加灵活,如BufferedReader、BufferedWriter。例如:在BufferedReader类的底层中,有属性Reader,可以封装一个节点流,该节点流可以是任意的,只要是Reader的子类。原创 2024-04-27 23:14:23 · 382 阅读 · 0 评论 -
IO流常用类
FileWriter使用后,必须要关闭(close)或刷新(flush),否则写入不到指定的文件。②new String(char[], off, len) 将char[]的指定部分转换成String。①new String(char[]) 将char[]转换成String。⑤write(char[], off, len) 写入指定数组的指定部分。⑦write(string, off, len) 写入字符串的指定部分。批量读取多个字符到数组,返回读取到的字符数,如果到文件末尾返回-1。原创 2024-04-25 22:24:29 · 769 阅读 · 0 评论 -
IO流原理及流的分类
(1)I/O是Input/Output的缩写,1/O技术是非常实用的技术,用于处理数据传输。(3)Java.io包下提供了各种“流(stream)”类和接口,用以获取不同种类的数据,并通过方法输入或输出数据。(1)按操作数据单位不同分为:字节流(8 bit,适合二进制文件),字符流(按字符,适合文本文件)。(4)输入input:读取外部数据(磁盘、光盘等存储设备的数据)到程序(内存)中。(3)按流的角色的不同分为:节点流,处理流/包装流。(2)按数据流的流向不同分为:输入流,输出流。原创 2024-04-25 22:18:40 · 398 阅读 · 0 评论 -
IO流——文件基础概念 及 常见文件操作
(1)文件就是保存数据的地方。(2)文件在程序中是以流的形式来操作的。①流:数据在数据源(文件)和程序(内存)之间经历的路径。②输入流:数据从数据源(文件)到程序(内存)的路径。③输出流:数据从程序(内存)到数据源(文件)的路径。原创 2024-04-25 22:17:09 · 402 阅读 · 0 评论 -
线程死锁与释放锁
多个线程都占用了对方的锁资源,但不肯相让,导致了死锁。在编程中一定要避免死锁的发生。原创 2024-04-24 23:43:11 · 424 阅读 · 0 评论 -
线程——互斥锁
(2)每个对象都对应于一个可称为“互斥锁”的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象。(5)同步方法 非静态的 的锁可以是this,也可以是其他对象(要求是同一个对象)。(1)在Java语言中,引入了对象互斥锁的概念,来保证共享数据操作的完整性。(1)同步方法如果没有使用static修饰:默认锁对象为this。(2)非静态 同步代码块 this对象 (如 上面的例2)(1)非静态 同步方法 this对象 (如 上面的例1)(6)同步方法 静态的 的锁为当前类本身。①需要先分析上锁的代码。原创 2024-04-24 23:39:38 · 188 阅读 · 0 评论 -
线程同步Synchronized
(2)线程同步,即当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作,其他线程才能对该内存地址进行操作。(1)在多线程编程,一些敏感数据不允许被多个线程同时访问,此时就使用。,保证数据在任何同一个时刻,最多有一个线程访问,以保证数据的完整性。synchronized(对象){//得到对象的锁,才能操作同步代码。//需要被同步代码;//需要被同步的代码。原创 2024-04-23 16:38:22 · 236 阅读 · 0 评论 -
线程状态讲解
(5)TIMED_WAITING:正在等待另一个线程执行动作达到指定等待时间的线程处于此状态,也称为 超时等待。该线程可以执行,但是否执行,还需要判断该线程是否被调度器选中执行。(4)WAITING:正在等待另一个线程执行特定动作的线程处于此状态。(2)RUNNABLE:在Java虚拟机中执行的线程处于此状态。(3)BLOCKED:被阻塞等待监视器锁定的线程处于此状态。线程真正的运行后的状态。(6)TERMINATED:已退出的线程处于此状态。(1)NEW:尚未启动的线程处于此状态。原创 2024-04-23 16:37:06 · 241 阅读 · 0 评论 -
线程常用方法
(10)join 线程的插队(一定会成功)。插队的线程成功后,则肯定先执行完插入的线程所有的任务(注意:join在使用时会出现异常,需要进行处理)(9)yield 线程的礼让(不一定成功)。让出该线程占用的cpu,让其他线程执行,但礼让的时间不确定,所以不一定能够礼让成功。(7)sleep 在指定的毫秒数内让当前正在执行的线程休眠/暂停执行(注意:sleep在使用时会出现异常,需要进行处理)interrupt中断线程,但并没有结束线程,所以一般用于中断正在休眠线程。原创 2024-04-23 16:35:53 · 122 阅读 · 0 评论 -
线程基本使用
(1)程序是为完成特定任务、用某种语言编写的一组指令的集合。简单的说,就是我们写的代码。(2)进程①进程是指运行中的程序,比如使用QQ,就启动了一个进程,操作系统就会为该进程分配内存空间。当使用迅雷,又启动了一个进程,操作系统将为迅雷分配新的内存空间。②进程是程序的一次执行过程,或是正在运行的一个程序;是动态过程,有它自身的产生、存在和消亡的过程。(3)线程①线程由进程创建的,是进程的一个实体。②一个进程可以拥有多个线程。③单线程:同一个时刻,只允许执行一个线程。原创 2024-04-23 16:33:16 · 515 阅读 · 0 评论 -
Java事件处理机制
java事件处理是采取“委派事件模型”。当事件发生时,产生事件的对象,会把此“信息”传递给“事件的监听者”处理,这里所说的“信息”实际上就是java.awt.event事件类库里某个类所创建的对象,把它称为“事件的对象”。是一个产生事件的对象,比如按钮,窗口等。原创 2024-04-22 23:53:07 · 589 阅读 · 0 评论 -
Java绘图
坐标原点位于左上角,以像素为单位。在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。绘图必须要知道一个非常重要的概念:一个像素的长度是多少?计算机在屏幕上显示的内容都是由屏幕上的每一个像素组成的。例如,计算机显示器的分辨率是800x600,表示计算机屏幕上的每一行由800个点组成,共有600行,整个计算机屏幕共有480000个像素。像素是一个密度单位,而厘米是长度单位,两者无法比较。原创 2024-04-22 23:51:19 · 885 阅读 · 0 评论 -
泛型 详细讲解
(1)泛型可以理解为,表示数据类型的一种数据类型。可以表示多种数据类型(如:Integer、String、Dog等),具体表示的数据类型由程序员来决定。(2)泛型又称参数化类型,是JDK 5.0出现的新特性,解决数据类型的安全性问题。(3)在类声明或实例化时,只要指定需要的具体类型即可。例:ArrayList类的底层定义是public class ArrayList { },E被称为泛型。而我们在创建ArrayList类对象时,传入的Dog类型,是将Dog赋给E。原创 2024-04-22 22:40:52 · 1182 阅读 · 0 评论 -
Java集合详解——Collections工具类
(1)Collections 是一个操作Set、List和Map等集合的工具类。(2)Collections中提供了一系列静态的方法对集合元素进行排序、查询和修改等操作。原创 2024-04-19 21:14:00 · 392 阅读 · 0 评论 -
Java集合详解——集合实现类 选择规则
HashMap(底层是:hash表,JDK 7.0:数组+链表,JDK 8.0: 数组+链表+红黑树):HashSet(底层是HashMap,维护了一个table表,即 数组+链表+红黑树):ArrayList (底层维护Object类型的可变数组):LinkedList(底层维护了一个双向链表):LinkedHashSet,维护数组+双向链表。(一组对象[单列] 或 一组键值对[双列]):Collection接口。原创 2024-04-19 21:12:43 · 303 阅读 · 0 评论 -
Java集合详解——TreeMap类
(1)TreeMap实现了Map接口,是Map接口的实现子类。(2)使用无参构造器,创建TreeMap,通过put方法直接添加元素,最后添加的结果仍然是无序的。(3)想要添加的元素,按照 k的字符串首字母顺序大小 来排序,使用TreeMap提供的一个构造器,可以传入一个比较器(匿名内部类),并指定排序规则。(不能添加相同的元素)(4)想要添加的元素,按照 k的字符串长度大小 来排序,就改变比较器规则,使用length()方法。(不能添加长度相同的元素)原创 2024-04-19 21:10:09 · 128 阅读 · 0 评论 -
Java集合详解——TreeSet类
(1)TreeSet实现了Set接口,是Set接口的实现子类,底层是TreeMap。(2)使用无参构造器,创建TreeSet,通过add方法直接添加元素,最后添加的结果仍然是无序的。(3)想要添加的元素,按照字符串首字母顺序大小来排序,使用TreeSet提供的一个构造器,可以传入一个比较器(匿名内部类),并指定排序规则。(不能添加相同的元素)(4)想要添加的元素,按照 字符串长度大小 来排序,就改变比较器规则,使用length()方法。(不能添加长度相同的元素)原创 2024-04-19 21:09:09 · 306 阅读 · 0 评论 -
Java集合详解——Properties类
(1)Properties类继承自Hashtable类,并且实现了Map接口,也是使用k-v键值对的形式来保存数据。(2)使用特点和Hashtable类似,创建对象后,也能使用put方法进行添加,使用remove方法进行删除,通过重复的key值,来替换value值,使用get方法进行value值获取。(3)Properties 还可以用于从xxx.properties文件中,加载数据到Properties类对象,并进行读取和修改。原创 2024-04-19 21:08:02 · 189 阅读 · 0 评论 -
Java集合详解——Hashtable类
(1)存放的元素是k-v键值对。(2)hashtable的键key和值value都不能为null。(3)hashtable使用方法基本上和HashMap一样。(4)hashtable是线程安全的,hashMap是线程不安全的。原创 2024-04-19 21:07:14 · 301 阅读 · 0 评论 -
Java集合详解——HashMap类(包括 底层机制源代码分析)
(1)Map接口的常用实现子类:HashMap、Hashtable和Properties。(2)HashMap是Map接口 使用频率最高的实现类。(3)HashMap是以key-value对的方式 来存储数据。(4)key不能重复,但是是值可以重复,允许使用null键和null值。(5)如果添加相同的key,则会覆盖原来的key-value,相当于修改(key不会替换,value会替换)。(6)与HashSet一样,不保证映射的顺序,因为底层是以hash表的方式来存储的。原创 2024-04-19 21:06:02 · 962 阅读 · 1 评论 -
Java集合详解——Map 接口
②k-v为了方便程序员的遍历,还会 创建entrySet集合,该集合存放的元素的类型是Map.Entry,而一个Map.Entry对象就有k和v,即:entrySet< Map.Entry>。(8)Map存放数据的key-value示意图,一对k-v是放在HashMap$Node的一个对象中的,又因为Node实现了Entry接口,也可以说一对k-v就是一个Entry。(5)Map的key和value都可以为null,但key为null只能有一个,value为null可以有多个。原创 2024-04-18 23:38:19 · 346 阅读 · 0 评论 -
Java集合详解——LinkedHashSet类
(1)LinkedHashSet是HashSet的子类。(2)底层是LinkedHashMap,LinkedHashMap的底层是HashMap,底层维护了一个数组+双向链表。(3)LinkedHashSet根据元素的 hashCode值来决定元素的存储位置,同时使用链表维护元素的次序,这使得元素看起来是以插入顺序保存的(即 添加顺序和取出顺序一致)。(4)LinkedHashSet不允许添重复元素。原创 2024-04-18 23:34:32 · 186 阅读 · 0 评论 -
Java集合详解——HashSet类(包括 底层机制 源代码分析)
(1)HashSet实现了Set接口,是Set接口的实现子类。(2)HashSet实际上是HashMap,看源码:(3)不能有重复的元素或对象。可以存放null值,但只能有一个null。(4)HashSet不保证元素是有序的,取决于调用hash()方法后,再确定索引的结果。原创 2024-04-18 22:46:06 · 708 阅读 · 0 评论 -
Java集合详解——Set 接口
(1)无序(添加和取出的顺序不一致,虽然顺序不一致,但取出的顺序是固定的,不会改变),没有索引。(2)不允许重复元素,所以最多包含一个null。(3)JDK API中Set接口的实现类很多,主要使用TreeSet和HashSet。(4)和List接口一样,Set接口也是Collection的子接口,因此常用方法和Collection接口一样。原创 2024-04-18 22:43:04 · 172 阅读 · 0 评论 -
Java集合详解——LinkedList类(包括:增删改查 源代码逐步分析)
(1)LinkedList类是List接口的实现子类。(2)LinkedList底层实现了 双向链表和双端队列 特点。(3)可以添加任意元素(元素可以重复),包括null。(4)线程不安全,没有实现同步。原创 2024-04-18 00:08:02 · 971 阅读 · 0 评论 -
Java集合详解——Vector类
(1)Vector类实现了List接口,是List接口的实现子类。(2)Vector底层是一个对象数组(源码:protected Object[] elementData;(3)Vector是线程同步的(即 线程安全),Vector类的方法基本都有synchronized修饰(做线程安全的处理)。(4)在开发中,需要线程同步安全时,考虑使用Vector。(5)Vector的底层源代码和ArrayList基本相似,只是在数组扩容时,Vector是按照2倍进行扩容。原创 2024-04-18 00:04:25 · 145 阅读 · 0 评论 -
Java集合详解——List 接口
(1)List接口是 Collection 接口的子接口。(2)List集合中元素有序(添加顺序和取出顺序一致)、且元素可以重复。(3)List集合中的每个元素都有其对应的顺序索引,即支持索引。(4)List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素。(5)JDK API中List接口的实现类有很多,常用的是ArrayList、LinkedList、Vector。原创 2024-04-18 00:02:57 · 269 阅读 · 0 评论 -
Java集合详解——Collection 接口(包括 迭代器、增强for循环)
1)Iterator对象称为迭代器,主要用于遍历Collection集合中的元素。2)所有实现了Collection接口的集合类都有一个iterator()方法,用于返回一个实现了Iterator接口的对象,即 可以返回一个迭代器。3)Iterator 仅用于遍历集合,Iterator 本身并不存放对象。增强for循环 可以代替iterator迭代器,增强for就是简化版的iterator,本质一样。只能用于 遍历集合或数组。原创 2024-04-18 00:01:24 · 1166 阅读 · 0 评论 -
集合的基本介绍和数组对比(包括 框架体系图)
Java的集合类有很多,主要分为两大类:Collection(单列集合:在集合中存放的是单个的元素)、Map(双列集合:在集合中存放的是两列数据)(2)提供了一系列方便的操作对象的方法:add、remove、set、get等。(1)数组长度在开始时必须指定,而且一旦指定,就不能再更改。(3)使用数组进行增加/删除元素时比较麻烦。(3)使用集合添加、删除新元素更加简洁。(2)数组中保存的元素必须是同一类型。任意多个对象,使用比较方便。原创 2024-04-17 23:57:10 · 185 阅读 · 0 评论 -
Java常用类详解——第三代日期类:LocalDateTime类
①JDK 1.0中包含了一个java.util.Date类,但是它的大多数方法已经在JDK 1.1引入Calendar类之后被弃用了。③LocalDateTime(日期时间:年月日时分秒)包含日期+时间,可以获取日期和时间字段。3)格式化:格式化只对Date有用,Calendar则不行,没有专门的格式化。①LocalDate(日期:年月日)只包含日期,可以获取日期字段。②LocalTime(时间:时分秒)只包含时间,可以获取时间字段。1)可变性:像日期和时间这样的类应该是不可变的。原创 2024-04-17 23:55:10 · 409 阅读 · 0 评论 -
Java常用类详解——第二代日期类:Calendar类
①是一个抽象类,构造器是private,通过getInstance()来获取实例。②Calendar类为特定瞬间 与一组诸如YEAR、MONTH、DAY_OF_MONTH、HOUR等日历字段之间的转换 提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。原创 2024-04-17 23:53:08 · 180 阅读 · 0 评论 -
Java常用类详解——第一代日期类:Date类
精确到毫秒,代表特定的瞬间。原创 2024-04-16 23:09:22 · 392 阅读 · 0 评论