
Java
文章平均质量分 50
小松学前端
这个作者很懒,什么都没留下…
展开
-
HashMap原理及源码解析
Map继承结构图Map接口常用方法Map接口的迭代方法方案一:货物Map集合的所有key,然后遍历每个key,通过key货物value。因为Set的父接口是Collection。方案二:这种方式效率较高建议使用。原创 2024-11-25 20:01:37 · 486 阅读 · 0 评论 -
7.2 Map
Map是一个顶级接口类和Collection接口同一级别,Set接口下的继承关系都是借用的Map集合的继承关系所实现的。原创 2024-11-14 13:44:22 · 226 阅读 · 0 评论 -
6.10 Queue接口/Deque接口 模拟栈与队列分析
双向链表和数组都能模拟栈的数据结构实现栈:Linkedlist、ArrayDueue、Stack(不用了)实现队列:ArrayDeque方法:方法search()方法:规定的返回值:栈顶返回的是1.原创 2024-11-13 19:05:24 · 231 阅读 · 0 评论 -
第六章 7.0 LinkList
一个节点分两个部分,一部分存数据,一部分存下一个节点的内存地址。原创 2024-11-04 16:05:06 · 741 阅读 · 0 评论 -
第六章 6.9 ArrayList
add(E e, Object[] elementData, int s) 是一个私有方法,主要负责具体的添加逻辑,包括检查数组是否需要扩展和更新元素的数量。add(E e) 是公共方法,是外部调用的入口,负责处理一些额外的操作(如修改计数器)并调用私有的添加逻辑方法。拷贝数组,index从哪个位置开始拷贝,index+1,从哪个位置开始放,s-index:拷贝多长 ,这是核心。实例,确保新实例的初始容量足够容纳所有元素,从而提高性能。传入集合进入:通过这个有参构造函数,进入的set方法(实例方法)原创 2024-11-02 19:16:01 · 267 阅读 · 0 评论 -
第六章 6.8 List
List家族特点:有序可重复List接口常用方法: 源码LisrIterator继承Iterator获取光标指向的那个位置的下标获取光标指向的那个位置的上标静态方法重写comparable接口方法自定义排序规则sort()源码:在类user中重写comparable()方法,sort传入user,形参就为 Comparable user = new User(),就调用User中重写的comparable()方法了,就为自定义的排序规则。 使用Comparator自定义排队规则方原创 2024-10-25 14:13:20 · 1020 阅读 · 0 评论 -
第六章 6.7 泛型
静态方法不能使用是因为静态方法是类名直接调用,没有实例化,就没有指定对象。原创 2024-10-20 12:42:40 · 383 阅读 · 0 评论 -
第六章 6.6 集合
Collection接口继承iterable接口,父类接口有一个iterator()方法,返回一个接口,所以这个接口相当于Collection的局部变量,有依赖关系。原创 2024-10-20 11:58:53 · 437 阅读 · 0 评论 -
第六章 6.5 枚举类
反编译之后,发现是一个final修饰的类,不能有子类,默认继承了一个类,变量都是final修饰的常量,还有一个value()方法,返回一个数组。原创 2024-10-11 12:26:03 · 283 阅读 · 0 评论 -
第六章 6.4 日期处理
1000毫秒 = 1秒。原创 2024-10-10 10:57:06 · 347 阅读 · 0 评论 -
第六章 6.3 包装类
方便编程,本质上是将对基本数据类型i(以int为例)进行封装成引用数据类型,可以直接调用。原创 2024-10-09 17:40:21 · 381 阅读 · 0 评论 -
第六章 6.2 StringBuilder
构造方法:默认容量为16;通过StringBuilder的构造方法传给父类的构造方法capacitytruevaluecapacitycoderLATIN1valuecoderUTF16。原创 2024-09-30 13:33:36 · 731 阅读 · 0 评论 -
第五章 5.1 异常
自定义异常灵感来源于源码:NullPointerException继承了RunTimeException,一个无参构造,一个有参构造自定义异常代码/*程序主入口*/System.out.println("欢迎本系统,请注册:");System.out.print("请输入用户名:");System.out.print("请输入年龄:");//注册//这里的代码可能出现异常,register方法throws了,交给了调用者main解决//用户业务类。原创 2024-09-23 15:19:00 · 294 阅读 · 0 评论 -
第四章 4.2 时间复杂度
算法与数据结构相互依存,例如,寻找数组的最大值,数组就是一种数据结构,寻找最大值的算法是依附于数组的。原创 2024-09-20 18:13:55 · 463 阅读 · 0 评论 -
第四章 4.1 二维数组练习题
【代码】第四章 4.1 二维数组练习题。原创 2024-09-19 14:05:13 · 254 阅读 · 0 评论 -
第四章 4.1 数组/main方法(arg参数)/二维数组
总结:以int为例,局部变量表知道0索引得地址,数组存储得数据类型都是同类型的,int每个占四个字节,计算机通过计算能够得到所需要的地址,很方便。时间复杂度为O(1),1代表固定不变,因为数组在寻找的是通过计算得出的位置,可以理解为一个公式计算。原创 2024-09-18 15:44:58 · 373 阅读 · 0 评论 -
第三章 3.15 内部类
敬请期待###原创 2024-09-14 12:29:44 · 114 阅读 · 0 评论 -
第三章 3.14 访问控制权限+Object类
API:application Program interface 应用程序编程接口。原创 2024-09-14 12:21:40 · 365 阅读 · 0 评论 -
第三章 3.13 接口
Computer类中使用了HardDriver类,以及Printer类导致Computer类和HardDrive,Printer合度太高Computer类扩展力太差。假如说电脑要连打印机,在定义一个新的类,这部分符合OCP(可扩展原则),但是Computer电脑类的源码改变,不符合OCP原则。System.out.println("连接设备成功");Computer是调用者,剩下的是实现者,分清调用者和实现者,定义接口,Computer类的扩展力差。这个程序没有使用接口。接口与抽象类如何选择。原创 2024-09-08 13:02:48 · 542 阅读 · 0 评论 -
第三章 3.12 抽象类
private 不能被继承,不能被继承就不能被覆盖,就不能被重写;stastic不能被继承就不能被重写。final最终的不能被重写;原创 2024-09-05 16:36:08 · 276 阅读 · 0 评论 -
第三章 3.11 final关键字
⑥⑦final 修饰的变量不能重新赋值,pro被final修饰,pro存储的是堆中对象new出来的地址值,所以不能在指向其他对象,但是对象内部的数据还是可以更改的。原创 2024-09-05 16:12:29 · 142 阅读 · 0 评论 -
第三章 3.10 super关键字
当父类和子类定义了相同的属性或者方法时不能省略,比如:Person 有name属性;Teacher中也有name属性。③。原创 2024-09-05 12:55:59 · 541 阅读 · 0 评论 -
第三章 3.9 多态及其常见错误
除了基本数据类型之间的类型转换之外,对于引用数据类型来说,也可以进行类型转换。new Cat()只能发生在运行期间开始执行,发生在堆当中开辟空间。因此在编译的时候就会去Animal类中找move()方法。在编译的时候,编译器只知道a2的类型是Animal类型。在运行的时候,堆内存中真实的java对象是Cat类型。找到之后,绑定上去,此时发生静态绑定。因此运行的时候就会调用Cat对象的move()方法。所以move()的行为一定是Cat对象发生的。因为编译阶段是一种形态,运行的时候是另一种形态。原创 2024-09-02 16:15:36 · 515 阅读 · 0 评论 -
第三章 3.8 继承
java语言中,一个类没有显示继承任何类,默认继承Object类。Object式老祖宗,是JDK类库中的根类。@override注解用来标志方法。原创 2024-09-02 10:29:03 · 178 阅读 · 0 评论 -
第二章 小知识点~01.package包机制
原创 2024-09-01 11:28:06 · 103 阅读 · 0 评论 -
第三章 3.7 单例模式
设计模式就是可以重复利用的解决方案。原创 2024-08-30 15:14:12 · 236 阅读 · 0 评论 -
第三章 3.6 JVM体系结构规范
红线为符号引用(本质上是package的绝对路径+名称)在根据符号引用后关联的内存地址寻找和调用方法或属性。启用本地内存的原因:JDK6中永久代中存储的东西太多了,容易产生OOF错误(内存溢出错误)④从规范上来说静态变量存在在方法区,规范只是设定规则,但是静态变量是存在在堆中。⑤字面量:i = 10 10就是字面量;符号引用:类名,属性名,方法名;⑥ Native 方法 是C++写的源码方法;在加载class文件和静态代码块之间干的事情。原创 2024-08-30 10:42:56 · 321 阅读 · 0 评论 -
第三章 3.5 static关键字
100个对象就应该有100个空问)当一个属性是类级别的(所有对象都有这个属性,并且这个属性的值是一样的),建议将其定义为静态变量,在内存空间上只有一份。将new 的对象 zhangsan等都设为null,但是语法zhangsan.name正确,在运行时,由于zhangsan已经设为null,而name是实例变量,需要一个new的实例出来,导致zhangsan.name指向为空,导致空指针异常。4.所有static修饰的,访问的时候,直接采用“类名.”,不需要new对象。2.静态代码块什么时候执行?原创 2024-08-29 11:36:27 · 323 阅读 · 0 评论 -
第三章 3.4 this关键字
代码没得到复用-----------------------解决办法this(实参){只能出现在构造方法第一行,前边不能出现代码,而且只能出现一次}------------------>保证了不会重复堆的创建。static 方法中不能出现this,因为static是静态的,不需要实例化能直接调用,内部语法不存在this,this只针对于实例变量。this存储的是对象的地址。因为this是实例对象才能调用。引用. = this.原创 2024-08-29 10:55:11 · 167 阅读 · 0 评论 -
第三章 3.3 构造方法
new的时候:会直接在堆内存中开辟空间。然后给所有属性赋默认值,完成对象的创建。(这个过程时在构造方法体执行之前就完成了。在构造方法中赋值是对象第一次创建时属性的值,set方法可以在后期的时候调用,来完成属性值的修改。如果所有的构造方法在最开始的时候有相同的一部分代码,不妨将这写到代码块中。构造方法体开始执行,标志着开始进行对象初始化。在一个类当中系统会默认提供一个无参数的构造方法;第二个阶段:对象的初始化;第一个阶段:对象的创建;2.2对象初始化在什么时候完成的?2.1对象在什么时候创建的?原创 2024-08-28 14:47:57 · 137 阅读 · 0 评论 -
第三章 3.2 封装
解决:第一步属性私有化 private,作用:禁止外部程序对该属性进行随意访问。第二步:为了保证外部的程序仍然可以访问age属性,因此要对外提供公开的访问入口。外部随意访问age属性,很不安全。原创 2024-08-28 13:25:15 · 232 阅读 · 0 评论 -
第三章 3.1 面向对象
实例变量属于成员变量,成员变量如果没有手动赋值,系统会赋默认值。原创 2024-07-19 11:17:10 · 250 阅读 · 0 评论 -
方法调用内存调配
代码执行顺序内存解析总结原创 2024-07-18 10:01:35 · 260 阅读 · 0 评论 -
数据类型详解
对于取值范围,要理解什么是原码、反码、补码。计算机底层是通过补码来存储的,一个字节8个二进制位,最高位代表正负,0代表正,1代表负,所以一个字节的最小就为10000000,为-128,最大为01111111,为127,所以一个字节的取值范围为-128~127。2的七次方-1的原理。成员变量如果没有赋值,系统会自动赋值。java中任何一个自变量,都会默认当成int类型来处理。int i = 100;程序从右向左执行,先存储100;不知道多大,先分配4个字节空间,也就是int类型;long 8个字节强转 int原创 2024-07-08 12:15:57 · 224 阅读 · 0 评论 -
原码/反码/补码
128比较特殊,但是也直接套用负数原码规则就行,不用考虑首位位数。计算机底层是用二进制传输数据的,并且计算机底层是用补码来表示的。补码除符号为取反,然后+1(强制类型转化会涉及到精度问题的原理)为:10000000-01111111:即-128-127。:例如127的三种码都是01111111;正数的原码反码补码都是相同的。搞懂三者规则,我们可以推断是。原创 2024-07-06 17:44:45 · 351 阅读 · 0 评论 -
进制相关知识点
数制:又称为计数制,是一种计数的方法,是用一组固定的符号和统一的规则来表示数值的方法。基数是16,有十六种数字符号,除了在十进制中的0至9外,还另外用6个英文字母a-f来表示十进制数的10至15。基数为10,数值部分用0、1、2、3、4、5、6、7、8、9来表示.将下列十六进制数转换为十进制数。例1:将下列二进制数转换为十进制数。例2:将下列八进制数转换为十进制数。例3:将下列十进制数转换为十六进制。例1:将下列十进制数转换为二进制。例2:将下列十进制数转换为八进制。二、八、十六转换为十进制。原创 2024-07-06 15:46:09 · 335 阅读 · 0 评论 -
Java运行程序过程解析/ClassPath指路
本质原因是在JVM运行.class文件时,首先JVM中的类加载器ClassLoader会根据环境变量(ClassPath)中的路径去寻找Demo.class的位置。注意:ClassPath环境变量是java所特有的,而Path变量是Windows系统自有的。注意:在运行java Demo时,当前路径必须切换至class文件所在的位置,也就是class的绝对路径。运行java Demo时,当前路径必须切换至class文件所在的位置,也就是class的绝对路径。第二部为java的运行阶段。原创 2024-06-30 15:22:28 · 184 阅读 · 0 评论 -
JVM/JDK/JRE/源文件解释
【代码】JVM/JDK/JRE/源文件解释。原创 2024-06-30 12:10:43 · 495 阅读 · 0 评论 -
面向对象/static/类与对象的关系/构造器
物以类聚,分类的思维模式,思考问题首先会解决问题需要哪些分类,然后对这些分类进行单独思考。最后,才对某个分类下的细节进行面向过程的思索。static:是和类一起加载的 无static关键字是类实例化后才存在的。1. 使用new关键字必须要有构造器,本质是在调用构造器。面向对象适合处理复杂的问题,适合处理需要多人协作的问题!对象 是具体的事物;以类的方式组织代码,以对象的组织(封装)数据。demo04能直接通过类名直接调用。方法名必须和类名相同,没有返回值;2.初始化对象的值;原创 2024-06-28 15:13:12 · 221 阅读 · 0 评论 -
可变参数笔记
本质上可变参数是一个数组:以下为取最大值的例子。原创 2024-06-28 12:40:08 · 168 阅读 · 0 评论