Java基础
localhost:8081
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LinkedList添加和删除方法的源码分析超详细
下面我们看第二次添加的过程 ,最终还是执行linkLast方法,只不过此时的last指向第一个节点,所以l也指向第一个节点,然后创建一个新节点将l传入,所以新节点中的prev指向第一个节点,接着将last的指向改为新节点。由于此时的l不为null,所以进入else,将首节点中的next执向新节点。这是add方法真正的底层逻辑,首先将last值赋给l节点,此时的l为null,然后再创建新节点的时候将l作为前向指针传入,将节点中的next指针也赋值为null,之后让last节点指向新节点。原创 2024-08-24 18:42:18 · 362 阅读 · 0 评论 -
Vector底层扩容机制超详细
先说结论如果我们使用无参构造器,则初始化容量为10,注意这里要和 ArrayList区分开来,ArrayList是初始化容量为0,第一次添加的时候扩容为10并且每次添加元素的时候都会进行是否需要扩容的判断。容量满之后按照2倍进行扩容,如果在创建时指定了容量大小则扩容时直接按照2倍。这是一个三元运算符,前面我们看到capacityIncrement被赋值为0,所以这里返回oldCapacity,所以新数组的容量为原来的2倍。add方法中的逻辑和ArrayList中的差不多。这里将我们的容量初始化为10。原创 2024-08-24 12:09:07 · 324 阅读 · 0 评论 -
ArrayList底层扩容机制详解保姆级
当我们new之后elementData是空的 ,只有执行add方法后才会初始化容量,在add方法中会判断时候需要扩容,这个判断是每次执行add方法时都要判断的,由此我们可以看出ArrayList 的效率并不高。我们对下面代码进行debug,当我们使用无参构造器时,也就是没用指定ArrayList的容量的时候他他是空的,当我们第一次添加的时候才会扩容为10,当容量满之后每次会以1.5倍进行扩容。modCount是用来记录集合被修改的次数,为了防止多个线程同时操作同一个集合。原创 2024-08-23 18:59:27 · 249 阅读 · 0 评论 -
对象处理流的一些细节
3.建议添加一个servialVersionUID,提高版本兼容性,当我们对类属性进行操作时,不会认为产生了新的类。6.序列化具备可继承性,如果A类实现了Servialable接口,a继承了A,那么a也具备序列化和反序列化。4.序列化时默认将所有属性都进行序列化,除了static 和 transient 修饰的成员。5.序列化对象时要求里面属性的类型也必须实现Serializable接口。2.要求序列化或者发序列化对象实现Serializable接口。1.读写顺序要一致,原创 2023-06-15 19:20:52 · 108 阅读 · 0 评论 -
简单模拟BufferedRead包装流
包装流使用了修饰器模式,不会与原数据直接相连,提高了处理效率。同时他也提供了一系列便捷 的方法来处理一次输入大批量的数据。下面的代码就是简单模拟一下包装流,便于大家理解修饰器模式。原创 2023-06-11 11:25:27 · 102 阅读 · 0 评论 -
java中线程创建
当我们的程序开始运行时会成为一个进程,执行到main方法是会创建一个名为main的线程,执行到start时又会创建一个子线程。需要注意的是当主线程结束时,子线程不会立即结束,而是会继续执行,直到结束。本文介绍java中两种线程创建的方法,第一种是通过继承Thread类然后调用其start方法,第二种是实现Runnable接口然后代理调用。以上就是两种创建方式,个人感觉使用上没有什么本质的区别,唯一的就是用Rannable的话可以将同一个对象作为参数传入不同的线程,做到资源共享。下面是第一种创建方法。原创 2023-05-31 23:23:11 · 112 阅读 · 1 评论 -
方法的重载和重写
1.在一个类中多个方法具有相同的方法名2.方法的形参列表必须不同(具体指形参的类型,顺序,个数,对形参的名称没有要求)3.对方法的返回类型也没有具体要求话不多说直接上代码class A {结果分析1 2 构成方法的重载 形参列表的顺序不一样1 3 构成方法的重载 形参列表的个数不一样1 4 构成方法的重载 形参列表的类型不一样1 5 不构成方法的重载 方法重载与返回类型无关1 6 不构成方法的重载 方法重载与形参的名字无关。原创 2023-04-21 21:31:07 · 121 阅读 · 0 评论 -
IO流的简单梳理
Writer是所有字符输入流的父类,我们可以看见Writer并不是FileWriter的直接父类,平时我们使用FileWriter更多。这是它的类图,InputStrem是所有字节输入流的超类,同时它还是个抽象类。从图中我们可以看出,它继承了Reader所以它是一个字符转换流,从它的构造器中能知道,它能接受InputStrem的子类同时我们还可以指定编码方式。IO流是用来处理二进制文件或者文本文件的,IO流简单分为输入流和输出流,输入输出流又分为字符输入输出流和字节输入输出流。下面就是字符输入输出流。原创 2023-06-19 13:14:31 · 115 阅读 · 0 评论 -
文件的相关内容
delete:删除空目录或文件。2.根据父目录文件+子路径创建。mkdirs:创建多级目录。3.根据父目录+子路径创建。mkdir:创建一级目录。目录的操作和文件删除。原创 2023-06-19 19:32:22 · 78 阅读 · 0 评论 -
JAVA中的装箱,拆箱,包装类型和String类型的相互转化
jdk5以前装箱和拆箱都是手动完成的,在jdk5及其以后装箱和拆箱可以自动实现。原创 2023-05-06 19:13:17 · 120 阅读 · 0 评论 -
override的相关使用
我们重写父类的方法时,通常会写上override,当我们进行编译时,编译器就会检查父类是否拥有此方法。如果父类有则编译通过,否则编译器就会报错。如果我们重写了父类的方法但是没有写override,也不会报错。原创 2023-05-05 21:06:41 · 100 阅读 · 0 评论 -
Java多态的相关内容
(1)对象的编译类型和运行类型可以不一致,编译类型在定义时,就已经确定不会再发生变化。(2)对象的运行类型可以变化的,能通过getclass()来查看。(3)编译类型看等号的左边,运行类型看等号的右边。1.方法的多态(相关内容可以参考这篇文章。原创 2023-04-21 22:04:06 · 112 阅读 · 2 评论 -
Tcp编程
第二个相对复杂一点,客户端发送一个想要下载的文件给服务端,服务端接收后开始查找,如果有就返回,否则返回默认文件,客户端收到返回后开始下载到本地。下面是两个小案例,第一个是客户端给服务端发送要下载的图片路径,客户端在收到后完成下载。Tcp是网络编程中使用最多的一种,因为他可靠也能传输数据量大的文件。原创 2023-06-23 14:25:26 · 116 阅读 · 1 评论 -
java中反射机制
反射机制在java中是非常重要的,我们在后续学习相关框架的时候一定会用到,通过反射我们可以在不修改源代码的情况下控制程序。这是类加载的三个阶段,需要注意的是最后一个初始化的是静态成员,因为静态成员是和类相关联的。缺点是:使用效率会有影响,可以使用setAccessible()方法进行优化。反射的优点是:使用更加灵活,可以动态的使用和创建对象。上面是java程序的三个阶段。原创 2023-07-05 17:43:11 · 87 阅读 · 0 评论 -
反射相关的类
3.使用Class类的forName()方法获取class对象:可以使用Class类的 forName() 方法来获取指定类的class对象。2.使用对象的getClass()方法获取class对象:对于已经创建的对象,可以使用该对象的 getClass() 方法来获取其对应的class对象。getParameterTypes():获取构造方法的参数类型,返回一个Class数组,可以通过Class类的方法获取参数类型的信息。它提供了一些常用的方法来获取类的信息和操作类的属性。原创 2023-07-05 19:01:59 · 106 阅读 · 0 评论
分享