Java(无图省流版)
文章平均质量分 79
用来当自己的云笔记本。
内容出自B站多部JAVA课程,所有内容纯手打。
课程详见:
BV17F411T7Ao ;
BV18J411W7cE ;
BV1fh411y7R8
Lis0bit
这个作者很懒,什么都没留下…
展开
-
46.注解
定义格式public @interface 注解名 {public 类型 属性名() [ default 默认值 ];使用格式@注解名(属性名 1 = 值 1 , 属性名 2 = 值 2 , . . .)特殊属性名value只有一个value属性时,使用注解时可以省略value属性名,直接赋值。有包括value多个属性时,其他属性有默认值,可以省略value属性名,直接赋值。有包括value多个属性时,其他属性没有默认值,不能省略。代码演示。原创 2023-03-24 22:11:49 · 56 阅读 · 0 评论 -
45.反射
(Field),是 Java 编程语言中类的一个成员,主要用来存储对象的状态,所以有时也可称为成员字段或成员变量。Student 类的无参构造是私有的,不能访问,但是可以通过 setAccessible 解除权限。的所有信息,包括类名、包名、父类、实现的接口、所有方法、字段等,因此,如果获取了某个。在不清楚对象字段的情况下,可以将对象的字段名称和对应值储存到文件中。() //通过类对象获取Class对象。对象是JVM内部创建的,如果我们查看JDK源码,可以发现。可以获取一个对象的所有信息。原创 2023-03-24 22:08:55 · 53 阅读 · 0 评论 -
44.单元测试
JUnit是一个开源的Java语言的单元测试框架,专门针对Java设计,使用最广泛。JUnit是单元测试的标准框架,任何Java开发者都应当学习并使用JUnit编写单元测试。Java程序最小的功能单元是方法,因此,对Java程序进行单元测试就是针对单个Java方法的测试。编写测试方法:必须是公共的、无参数的、无返回值的、非静态的方法;就是针对最小的功能单元编写测试代码,用于检查各单元的正确性。:在测试方法中完成被测试方法的预期正确性测试。在需要测试的方法的“范围内”,右键选择 Run。原创 2023-03-24 22:09:53 · 60 阅读 · 0 评论 -
43.网络编程
网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来。java.net包中 J2SE 的 API 包含有类和接口,它们提供低层次的通信细节。你可以直接使用这些类和接口,来专注于解决问题,而不用关注通信细节。java.net实现网络编程的三要素。原创 2023-03-24 13:35:32 · 93 阅读 · 0 评论 -
对同步监视器的理解
这个语法的意思就是进入代码块之前先将资源 obj 锁定住,只有锁定住资源 obj 的线程才有资格执行后面的代码块,代码块执行完毕之后线程就释放了对资源 obj 的锁定,然后 obj 就可以被其它线程锁定并使用。通俗地讲就是只有获取对 obj 的锁定之后才能用后面代码块中的代码访问 obj 资源,否则就无法访问 obj 也无法执行后面的代码,只能让线程停滞在那里等待其它线程解除对 obj 的锁定。如果一个线程拥有了某些数据的锁,其他的线程则无法获得锁,直到这个线程释放了这个锁。转载 2023-03-17 23:46:51 · 193 阅读 · 0 评论 -
42讲 多线程(重要)
线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。线程可以简单理解为:应用程序中相互独立且可以同时运行的功能。进程就是一段程序的执行过程。进程由处理器(CPU)负责执行。进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。多线程是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。一个进程可以有很多线程,每条线程并行执行不同的任务(多线程)。举例。原创 2023-03-17 23:43:20 · 109 阅读 · 0 评论 -
41讲 高级流(缓冲流、转换流、序列化流、打印流、压缩流)
打印流只能操作文件目的地,不能操作数据源。即打印流只能写,不能读。打印流可以将数据原样写出。比如写’97’,在文件中写入的就是’97’而不是’a’可以自动刷新,自动换行。打印流打印数据 = 写出 + 换行 + 刷新压缩流用于将文件/文件夹压缩为.zip 文件。解压缩流用于将.zip 文件解压成普通文件。压缩流继承于字节流。继承体系。原创 2023-03-17 23:25:22 · 101 阅读 · 0 评论 -
40讲 字符集与字符流
首先我们要知道,在计算机中,任意数据都是以二进制形式存储的。且计算机的最小存储单元是1字节。字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。字符集是多个字符的集合,字符集规定了某个文字对应的二进制数字存放方式(编码)和某串二进制数值代表了哪个文字(解码)的转换关系。原创 2023-03-17 23:25:22 · 78 阅读 · 0 评论 -
39讲 字节流、IO流异常处理
IO流是一种顺序读写数据的模式,它的特点是单向流动。数据类似自来水一样在水管中流动,所以我们把它称为IO流。I是指输入InputO是指输出Output在读取或写入IO流的过程中,可能会发生错误。例如,文件不存在导致无法读取,没有写权限导致写入失败等。这些底层错误由Java虚拟机自动封装成异常并抛出。因此,所有与IO操作相关的代码都必须正确处理。原创 2023-03-17 23:22:18 · 495 阅读 · 0 评论 -
抽象类和接口的介绍与区别
抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。举个简单的例子,飞机和鸟是不同类的事物,但是它们都有一个共性,就是都会飞。那么在设计的时候,可以将飞机设计为一个类Airplane,将鸟设计为一个类Bird,但是不能将 飞行 这个特性也设计为类,因此它只是一个行为特性,并不是对一类事物的抽象描述。此时可以将 飞行 设计为一个接口Fly,包含方法fly( ),然后Airplane和Bird分别根据自己的需要实现Fly转载 2023-03-17 23:16:48 · 116 阅读 · 0 评论 -
38讲 File类
构造File对象时,既可以传入绝对路径,也可以传入相对路径。该路径可以是文件的路径,也可以是文件夹的路径。作为路径分隔符,在Java字符串中需要用。该路径可以是已经存在的,也可以是不存在的。父(级)路径,子(级)路径:如路径。,并且在指定目录下创建了指定的文件。注意Windows平台使用。File对象表示一个路径。创建如下文件及文件夹。创建如下文件及文件夹。原创 2023-03-14 18:06:40 · 94 阅读 · 0 评论 -
37讲 异常
在4.4 案例中,虽然抛出、捕获并处理了异常,但是Java并没有提供一个能完美描述”姓名长度有误”,“年龄范围有误“的异常。我们只能通过统一处理,显然这是不够直观的,此时我们可以自定义一个异常来描述。自定义异常的目的:让控制台的报错信息更加直观,见名知意。定义异常类。名字要见名知意。提供继承关系。运行时异常继承,编译时异常直接继承Exception空参、带参构造。在出现异常的地方用throw new自定义异常对象抛出public class 异常类名 extends 异常 {无参构造方法;原创 2023-03-14 18:02:46 · 66 阅读 · 0 评论 -
第36讲 Stream流
Java8以后 API添加了一个新的抽象称为流Stream,Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java运算和表达的高阶抽象。将要处理的元素集合看作一种流,流在管道中传输,并且可以在管道的节点上进行筛选,排序,统计,打印,聚合等处理。元素流在管道中经过(操作完后还可以继续其他操作)的处理,最后由(操作完后直接结束,不能调用其他方法)得到前面处理的结果。结合Lambda表达式,简化集合、数组的相关操作。原创 2023-03-07 22:25:18 · 375 阅读 · 0 评论 -
第35讲 迭代器与Collections集合工具类
并发修改的意思就是同一时刻发生并修改。当方法检测到对象的并发修改,但不允许这种修改时,会抛出此异常。 结构性修改:改变list的size大小。仅仅修改元素的内容不叫结构性修改。 如果想多次使用next获取的数据,可以用一个变量接收。如果通过添加或删除元素来修改集合,可以说迭代器类其实是集合类的内部类。 如果想再次遍历,需要重新创建迭代器对象。Collections是一个集合操作工具类。 如果想删除,可以使用迭代器提供的。//返回此集合中元素的迭代器, 如果想增加,目前没有办法。原创 2023-03-07 22:22:35 · 72 阅读 · 0 评论 -
第34讲 双列集合
TreeMap添加元素的时候,是不需要重写键的hashCode和equals方法的。所以,如果键的位置是自定义类型,需要在自定义类型内重写hashCode方法和equals方法,而不需要实现Compareable接口或者比较器对象。是所有双列集合的父接口,因此在Map中定义了双列集合通用的一些方法,这些方法可用于操作所有的双列集合。如果都一样则认为是同一人。刚创建对象时,不会创建存储元素的数组,只会做一件事:将默认加载因子置为0.75。的哈希值(跟值无关)与数组的长度,计算出该元素应存入的位置。原创 2023-03-07 22:17:43 · 238 阅读 · 0 评论 -
第33讲 单列集合
集合类:提供一种的存储模型。单列集合一次只能存一个元素。原创 2023-03-07 22:11:54 · 291 阅读 · 0 评论 -
第32讲 方法引用
第一个形参:表示被引用方法的调用者,决定了可以引用哪些类中的方法。第二个到最后一个形参:需要与被引用方法的形参保持一致,如果没有第二个参数,说明被引用的方法需要是无参的成员方法。抽象方法的第一个参数是什么类型的,就只能引用这个类中的方法,其他类的方法不能引用。Lambda表达式可以使得在调用那些已经拥有方法名的方法的代码更简洁、更容易理解。方法没有第二个参数,说明被引用的方法需要是无参的成员方法。方法引用就是:把已经存在的方法当作抽象方法的方法体。方法,该方法的返回值就是转换后的结果。原创 2023-03-07 21:50:51 · 171 阅读 · 0 评论 -
第31讲 Lambda表达式
Lambda(读:莱姆大)表达式,主要用于简化的匿名内部类的书写。原创 2023-01-13 13:46:52 · 70 阅读 · 0 评论 -
第30讲 Arrays数组操作工具类
Arrays 类是一个工具类,该类包含用于操作数组的各种方法(如排序和搜索)原创 2023-01-13 13:38:02 · 62 阅读 · 0 评论 -
第29讲 常见算法(查找算法、递归算法、排序算法)
基本思想:二叉查找树是先对待查找的数据进行生成树,确保树的左分支的值小于右分支的值,然后在就行和每个节点的父节点比较大小,查找最适合的范围。更多的是先计算出当前数据的哈希值,用哈希值跟数组的长度进行计算,计算出应存入的位置,再挂在数组的后面形成链表,如果挂的元素太多而且数组长度过长,我们也会把链表转化为红黑树,进一步提高效率。:顺序查找也称为线形查找,属于无序查找算法。其实就是因为方便,简单,但是如果我能在二分查找的基础上,让中间的mid点,尽可能靠近想要查找的元素,那不就能提高查找的效率了吗?原创 2023-01-13 13:33:02 · 250 阅读 · 0 评论 -
第28讲 日历时间日期相关操作类(JDK8以后)
修改(with)、增加(plus)、减少(minus)时间,不会改变调用者,而是会产生一个新的时间对象。LocalDateTime 能表示:年、月、日、时、分、秒、纳秒。LocalTime 能表示:时、分、秒、纳秒。LocalDate 能表示:年、月、日。方法:public long。获取时间间隔(不是对象)能用任意单位表示时间间隔。原创 2023-01-07 17:14:48 · 83 阅读 · 0 评论 -
第27讲 日历时间日期相关操作类(JDK7以前)
对象里有一个数组,用来储存当前时间的纪元、年、月、日、时、分、秒、星期等信息。底层原理:会根据操作系统的不同时区获取日历对象,默认表示当前时间。Calendar类中将数组中的索引所对应的信息封装成了常量。数组中,月份的范围是0~11,即获取到1,表示的是2月。星期的开始是星期日,即获取到1,表示的是星期日。类代表了一个特定的时间,以毫秒为精度。日期是API的一种。原创 2023-01-07 17:09:06 · 105 阅读 · 0 评论 -
第26讲 正则表达式详解
只匹配一个字符预定义字符含义任何字符,除了’\n’\d数字字符匹配。等效于 [0-9]。\D非数字字符匹配。等效于 [ ^0-9 ]。\s匹配任何空白字符,包括空格、制表符、换页符等。与 [ \f\n\r\t\v ] 等效。\S匹配任何非空白字符。与 [ ^ \f\n\r\t\v ] 等效。\w匹配任何字类字符,包括下划线。与"[ A-Za-z0-9_ ]"等效。\W与任何非单词字符匹配。与"[ ^A-Za-z0-9_ ]"等效。[]里面的内容只出现一次()分组。原创 2023-01-07 16:58:06 · 100 阅读 · 0 评论 -
第25讲 Runtime 虚拟机操作类
API即应用程序编程接口,英文全称Application Programming Interface。API是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。原创 2023-01-05 19:38:58 · 113 阅读 · 0 评论 -
第24讲 BigInteger(大整形) 、BigDecima(大浮点型)
BigInteger能表示的最大数字:42亿多的21亿次方(BigInteger能存下,你的计算机不一定能存下)如-0.226,byte[] = {‘-’, ‘0’, ‘.’, ‘2’, ‘2’, ‘6’}BigDecima内部是将组成小数的各个字符全部拆分,放到一个byte数组里存储的。BigInteger内部是将大整数拆分成若干段存储在一个整形数组中的,BigDecima是不可变的、任意精度的、有符号的十进制数。BigInteger的对象一旦创建,内部记录的值不能改变。BigInteger的最大大小。原创 2023-01-05 19:36:09 · 282 阅读 · 0 评论 -
第23讲 包装类
Integer类在底层会将在[-128, 127]之间的整数提前创建好对象放到一个数组中。而静态方法valueOf()的底层,会对传进来的数据进行判断,如果在[-128, 127]之间,则会返回已经创建好的对象。JDK5以后,Java底层会自动的将int类型转为Integer对象。JDK5以后,Java底层会自动的将Integer对象转为int类型。1.构造方法是new出来的对象,每一次都是新的地址。//将指定类型的变量转成String类型。//将字符串类型整数转为int类型整数。原创 2023-01-05 19:33:43 · 63 阅读 · 0 评论 -
第22讲 Object 、Objects
clone方法被protected(受保护的)修饰,所以需要在继承Object类中重写该方法。默认比较的是地址值是否相同,通过重写可以比较对象内部的属性值是否相同。-> 全默认 -> (如果不需要hashCode()可以删除)所有对象(包括数组)都实现了这个类的方法。自动生成:按下alt + insert -> 选择。自动生成:按下alt + insert -> 选择。//返回对象的字符串表示形式(默认是地址值)。对象工具类,提供了操作对象的方法。//对象克隆(默认浅克隆)//比较对象是否相等。原创 2022-12-30 11:39:30 · 75 阅读 · 0 评论 -
第21讲 System 系统操作工具类
源数组和目的数组都是引用数据类型时,子类类型可以拷贝给父类类型。提供了一些与系统相关的方法。,通过类名就可以直接调用。原创 2022-12-30 11:34:33 · 58 阅读 · 0 评论 -
第20讲 Math 运算工具类
API是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。API即应用程序编程接口,英文全称Application Programming Interface。Math 包含执行基本数字运算的方法。,如何使用类中成员?原创 2022-12-30 11:33:22 · 186 阅读 · 0 评论 -
第19讲 内部类
静态内部类只能访问外部类中的静态成员,如果想访问非静态需要创建外部类对象。使用场景:内部类表示的事物是外部类的一部分,且内部类单独存在没有任何意义。匿名内部类是一种隐藏了名字(不是没有名字)的特殊的局部内部类。现在如果要调用接口里的抽象方法,必须先创建接口操作类的对象。这时,就可以使用匿名内部类,不需要创建类就可以来实现接口。在一个类A的内部定义一个类B,类B就被称为内部类。内部类在类的局部位置(方法内),就叫局部内部类。在外部类编写方法,对外提供内部类的对象。成员内部类的一种,用static修饰。原创 2022-12-27 18:59:09 · 109 阅读 · 0 评论 -
第18讲 接口
接口和类是实现关系,可以单实现,也可以多实现。将只为接口服务的方法设置为私有,不让外类访问。只要符合规范标准,都可以使用。可以同时使用父类和接口中的方法。JDK8以后接口中新增的方法,解决接口升级后不兼容的问题。JDK8以后接口中新增的方法。JDK9以后接口中新增的方法。要么重写接口的所有抽象方法。接口是一种规则,体现在对。//公共的静态的最终的。要么本身也是个抽象类。只能使用父类中的方法。只能使用接口中的方法。原创 2022-12-27 18:54:01 · 62 阅读 · 0 评论 -
第17讲 抽象类
当父类知道子类应该包含什么样的方法,但无法确定子类如何实现这些方法,即父类。如:面对不同的猫,你并不知道猫们具体吃什么,这时就可以将。抽象类中不一定要有抽象方法,有抽象方法的类一定是抽象类。抽象类不一定有抽象方法,但有抽象方法的类一定是抽象类。可以参照多态的方式,通过子类对象实例化,即抽象类多态。作用:当创建子类对象时,给属性进行赋值。,该方法就可以定义为抽象方法。(直接分号结束,没有方法体)要么重写抽象类中的全部抽象方法。当不同的猫继承猫类的时候必须。要么本身也是个抽象类。抽象类不能直接实例化。原创 2022-12-27 18:51:05 · 56 阅读 · 0 评论 -
第16讲 包和导包
一般采用公司域名反写+包的作用。需要全部英文小写,见名知意多级包 用.分开//表示这个包里全是JavaBean类 public class Student {}包名+类名叫做这个类的全类名或全限定名。原创 2022-12-26 13:31:14 · 64 阅读 · 0 评论 -
第15讲 静态代码块、局部代码块和构造代码块
main函数可以被手动调用,如果在main函数内初始化变量,调用main函数时会导致反复初始化,影响效率。执行时机:在创建本类对象时,会先执行构造代码块,再执行构造方法。可以用this关键字调用本类的其他构造解决上述构造代码块的局限。使用场景:在类加载的同时,对某些数据初始化。不需要执行的情况,就无法用构造代码块实现。作用:提前结束变量的生命周期,回收内存。作用:把构造方法中的重复代码写在一起。执行时机:随着类的加载而加载,并且。作用:数据初始化,且只执行一次。 局限性:如只需要。原创 2022-12-26 13:24:13 · 89 阅读 · 0 评论 -
第14讲 权限修饰符和状态修饰符
修饰符用来定义类、方法或者变量,通常放在语句的最前端。Java中,可以使用权限修饰符(访问控制符)来保护对类、变量、方法和构造方法的访问。静态变量与对象无关,它随着类的加载而加载的,优先于对象存在。被该类的所有对象共享(所有对象用同一个值),只有一份。对象的地址值不能变,但对象内部的属性值可以改变。静态的成员方法只能访问静态成员。被static修饰的成员变量叫。被static修饰的成员方法叫。最终类:不能再作为父类被继承。多用在测试类和工具类中。最终方法:不能再重写。原创 2022-12-26 13:21:44 · 96 阅读 · 0 评论 -
第13讲 面向对象三大特征之多态
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。多态的好处:可以使程序有良好的扩展,并可以对所有类的对象进行通用处理。原创 2022-12-23 16:29:41 · 81 阅读 · 0 评论 -
第12讲 面向对象三大特征之继承
如继承体系A extends B:当B类方法返回值类型为A时,A类的返回值类型只能为A或无返回值。可以使子类具有父类的属性和方法,还可以在子类中重新定义、追加属性和方法。虚方法:非private、非static、非final的方法叫虚方法。子类中所有的构造方法默认都会访问父类中无参的构造方法。(重写注解) :用来检查方法重写时,方法声明的正确性。方法重写即沿袭了父类的功能,又定义了子类特有的内容。子类方法的访问权限不能低于父类方法的访问权限。本质:重写的方法覆盖了虚方法表里的原方法。原创 2022-12-23 16:28:10 · 59 阅读 · 0 评论 -
第11讲 面向对象三大特征之封装
将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。封装是面向对象编程语言对客观世界的模拟,客观世界成员变量都是隐藏在对象内部的,外界是无法直接操作的。方法的形参如果与成员变量不同名,不带this修饰的变量是成员变量(等号左边)方法的形参如果与成员变量同名,带this修饰的变量是成员变量。对象代表什么,就封装对应的数据,并提供数据对应的行为。方法被哪个对象调用,this就代表哪个对象。最后,右边的参数“19”赋值给。this修饰的变量是。原创 2022-12-23 16:26:17 · 50 阅读 · 0 评论 -
第10讲 StringBuilder和StringJoiner及应用场景
同 String 与 StringBuilder 相互转换 操作。提高字符串操作效率,代码编写更简洁(很少用)的字符串类,可以看成一个容器。的字符串类,可以看成一个容器。原创 2022-12-23 16:25:55 · 173 阅读 · 0 评论 -
第9讲 字符串String及一般操作
API是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。对原字符串没有任何影响,因为字符串不能发生变化。//截取下标[beg, end)区间内的元素。会复用字符串常量池里的字符串,节约内存且易写。new出来的字符串不会复用,会开辟一个新空间。(字符串的索引是从0开始的)将多个字符串拼接成一个字符串。将字符串中的某段子字符串替换。,都是String类的对象。字符串是API的一种。,Java程序中所有的。截取字符串中的某子段。原创 2022-12-23 16:19:33 · 83 阅读 · 0 评论