- 博客(39)
- 收藏
- 关注
原创 Java设计模式精讲---05单例模式
简单场景用饿汉式;需延迟初始化用静态内部类或 DCL;多线程高并发优先 DCL 或静态内部类。记住:单例虽好,但不要滥用 —— 过度使用会导致代码耦合性升高,且不利于测试(单例难以 mock)。
2025-11-09 17:15:00
802
原创 Java设计模式精讲---04原型模式
原型模式是 “高效复制” 的代名词 —— 当你需要批量创建相似对象时,与其重复new和初始化,不如 “克隆原型 + 修改细节”。记住:浅克隆适合简单对象,深克隆适合含引用类型的复杂对象,根据场景选择即可。
2025-11-08 19:01:20
345
原创 Java设计模式精讲---03建造者模式
将一个复杂对象的构建过程与它的表示分离,使得同样的构建过程可以创建出不同的表示。简单来说,就是把 “怎么组装零件” 和 “最终组装出什么产品” 分开。比如同样是组装电脑,“先装 CPU 再装内存最后装硬盘” 这个流程可以不变,但可以根据需求组装出 “游戏本”或 “办公本”。首先是被构建的对象Computer// 产品:电脑// CPU// 内存// 硬盘// 显卡// 操作系统// 私有构造函数,避免外部直接创建// getter方法(便于查看结果)
2025-11-06 20:11:01
1276
1
原创 Java设计模式精讲---02抽象工厂模式
抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。简单来说,它能批量生产 “配套产品”,比如 “华为手机 + 华为耳机 + 华为平板” 这样的产品族。它还有个别名 ——Kit 模式(套件模式),形象地体现了它生产 “产品套件” 的特性。抽象工厂模式是创建 “产品族” 的利器,它让配套产品的创建更高效、更具一致性。虽然在新增产品类型时存在局限性,但在框架开发、多主题系统等场景中依然是不可替代的设计方案。掌握它,能让你的代码在处理复杂对象创建时更具扩展性与维护性。
2025-11-05 14:21:14
365
原创 Java设计模式精讲---01工厂方法模式
工厂方法模式:定义一个用于创建对象的接口,但是让子类决定将哪一个类实例化。工厂方法模式让一个类的实例化延迟到其子类。工厂方法模式又叫:虚拟构造器模式、多态工厂模式、工厂模式。
2025-11-04 20:26:26
742
原创 Java设计模式精讲---简单工厂模式
简单工厂模式就是将需要创建的各种不同产品对象的相关代码封装到不同的类中,这些类称为具体产品类。而将他们的公共代码进行抽象和提取之后封装在一个抽象产品类中,每一个具体产品类都是抽象产品类的子类;然后提供一个工厂类用于创建各种产品,在工厂类中提供一个创建产品的工厂方法,该方法可以根据所传入的参数不同创建不同的具体产品对象;客户端只需要调用工厂类的工厂方法并传入相应的参数即可得到一个产品对象。也就是说,简单工厂模式的结构主要分为3部分:工厂角色、抽象产品角色、具体产品角色。
2025-11-03 18:18:36
1140
原创 Java设计模式精讲---导学篇
在GoF的经典著作《设计模式:可复用面向对象软件的基础》一书中一共描述了23种设计模式,这23种模式分别如下表所示:GoF的23种模式一览表范围/目的创建型模式(5种)结构型模式(7种)行为型模式(11种)类模式工厂方法模式(类)适配器模式解释器模式模板方法模式对象模式抽象工厂模式建造者模式原型模式单例模式(对象)适配器模式桥接模式组合模式装饰模式外观模式享元模式代理模式职责链模式命令模式迭代器模式中介者模式备忘录模式观察者模式状态模式策略模式。
2025-11-03 15:58:27
823
原创 Java中private和static同时使用会出现什么情况?
这几天在学习单例设计模式(后面会出一期包含23种设计模式介绍的博客)的时候发现了一段代码当时我就在想,这个private和static一起用的话外界想要访问这个成员变量到底是能不能访问到呢?当时在学习Java基础的时候也没有仔细研究过这里,下面就详细的来解释一下,把这块空缺的知识点补上!
2025-01-11 15:53:51
723
原创 什么是耦合度?
耦合度越高,表示类之间的关联越紧密,依赖关系越强,修改一个类可能会影响到其他类的功能或实现。耦合度越低,表示类之间的关联越松散,一个类的修改不会对其他类产生太大的影响。通过合理设计接口,可以将接口拆分成多个小的和专门的接口,使得类只需要依赖自己需要的接口,从而降低耦合度。将一个类的功能拆分成多个小的类,每个类只负责一项功能,可以降低代码的复杂度,减少类之间的依赖关系。接口和抽象类:通过定义接口和抽象类,使得类与类之间的依赖关系更加松散,一个类只需要知道接口或抽象类的定义即可,而不需要知道具体的实现。
2025-01-10 13:27:57
892
原创 GitHub的简单操作
今天开始就要开始做项目了,上午是要把git搭好。搭的过程中遇到好多好多的问题。下面就说一下git的简单操作流程。我们是使用的GitHub,下面也就以这个为例了。
2025-01-03 18:15:30
2408
1
原创 数据结构------树(Java语言描述)
树是一种非线性的数据结构,它由节点组成,有一个特定的节点称为根节点,其余节点可以分为多个互不相交的子树。树中的节点具有以下特点:1.每个节点有零个或多个子节点。2.除了根节点外,每个节点有且仅有一个父节点。3.没有父节点的节点就是根节点,没有子节点的节点称为叶子节点。
2024-11-23 16:54:44
521
1
原创 数据结构------队列(Java语言描述)
队列是一种数据结构,它遵循先进先出的原则。就像排队买东西一样,先到的人先得到服务,先进入队列的数据元素先被取出。例如,在一个银行排队系统中,顾客按照到达的先后顺序排队等待办理业务。第一个进入队列(排队)的顾客会第一个被服务并离开队列。
2024-11-14 17:58:10
430
原创 数据结构------栈(Java语言描述)
栈可以看作是一种容器,用于存储数据元素。想象一下一摞盘子,最后放上去的盘子总是最先被拿走,这就是栈的工作方式。在 Java 中,栈主要用于方法调用、表达式求值等场景。栈遵循先进后出、后进先出的原则。
2024-11-07 19:10:44
290
原创 数据结构------链表(Java语言描述)
链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针(在双向链表中还有指向前一个节点的指针)。
2024-10-31 20:16:58
587
1
原创 Java中异常有什么用?
在Java中,异常处理机制是一种用于处理运行时错误或其他意外情况的重要功能。通过异常处理,程序可以更加健壮和可靠,即使在发生错误时也能优雅地处理并恢复,而不是直接崩溃。:通过catch块,你可以捕获在try块中抛出的异常,并执行一些恢复操作,比如打印错误消息、清理资源等。通过这种方式,Java的异常处理机制为开发者提供了一种强大且灵活的工具来编写健壮和可靠的代码。:你可以通过创建自定义异常类来提供特定于应用程序的错误处理。:即使发生了异常,程序也可以继续运行,而不是直接崩溃退出。
2024-10-14 18:59:02
357
原创 Java中多态的内存
而在堆区的介绍中没有明确的列出字符串常量池是因为在现代Java虚拟机的实现中,字符串常量池虽然与堆区有紧密的关系,但它并不直接等同于堆区的一个独立子区域,而是有其特殊的存储和管理方式。类的字段(包括静态变量和实例变量,但仅字段的描述信息存储在方法区,而字段的值存储在其他区域,如静态变量存储在方法区的静态变量区,实例变量存储在堆区)和方法的字节码内容、一些特殊方法(如构造函数、接口方法、虚方法、默认方法等)也存储在方法区。Dog dog是一个Dog类型的引用,存储在栈内存中,指向堆区中的Dog对象。
2024-09-26 18:24:41
1778
原创 Java-instanceof关键字
instanceof是Java中的一个关键字,用于测试一个对象是否是某个类的实例,或是否实现了某个接口。这个操作符返回一个布尔值(true或false),表示对象是否是指定类型的实例。
2024-09-12 19:51:40
452
原创 浅拷贝和深拷贝
浅拷贝:复制对象的字段值,对象的引用类型字段指向相同的内存地址。修改引用类型字段会影响到原对象和新对象。深拷贝:递归复制对象及其引用类型字段,确保新对象和原对象完全独立。修改新对象中的引用类型字段不会影响原对象。在实际开发中,选择浅拷贝还是深拷贝取决于具体的需求和场景。深拷贝通常在需要完全独立的对象副本时使用,但可能会比浅拷贝更复杂和耗费更多资源。
2024-09-10 20:11:56
680
原创 不变模式是什么?如果String不是不变模式会出现什么问题?
不变模式通常围绕一个具有不变性的类展开,即一个类的内部状态在创建后整个生命周期都不发生变化,这样的类可称为不变类。使用不变类的做法就叫做不变模式。这意味着对象的所有属性在对象创建后都是固定的,不能被改变。这样可以确保对象在多线程环境中的安全性,避免因并发修改而导致的不一致性问题。同时,不变对象可以被安全地共享,无需担心数据被意外修改。但是不变模式并不一定只涉及到一个类。在实际应用中,可能会有多个类相互协作来共同实现不变性。
2024-09-10 18:43:05
386
原创 +连接String的对象个数
这样比较直接的说可能不太好理解,还是通过例子来介绍吧。String str1 = "乐悠";String str2 = "小码";//乐悠小码这是连接两个字符串的例子这段代码前两句String str1 = "乐悠";和String str2 = "小码";这两段代码如果说在字符串常量池中没有这两个字符串数据的话,它们会各创建一个对象,如果在字符串常量池中已经存在了这两个字符串的话,这两句代码就不会创建对象。
2024-09-08 11:38:24
1385
原创 方法重载和方法重写
条件:1.同一个类2.方法名相同3.方法的参数类型、个数、顺序至少一项不同·其他说明:1.方法的返回类型可以不同2.方法的修饰符可以不同3.同一个类中不允许出现两个名称,参数完全相同的方法重载方法的调用:1.利用调用时候的实参数区分调用的是哪个重载方法2.方法的实参与形参类型相同或兼容个数相同顺序一致//构造方法也可以重载//重载方法在调用的时候通过参数的个数,类型,顺序来区分调用的是哪一个重载方法//char可以默认转换为int型(兼容)//相同优先于兼容。
2024-09-07 09:19:40
762
原创 Java中super关键字的用法
由于静态方法不属于任何一个具体的对象,而this代表的是当前对象的引用,在静态方法中没有一个特定的对象可以被引用,所以不能使用this关键字。在静态方法中,没有对象实例的概念,无法确定要访问哪个父类对象的成员,所以不能使用super关键字。·只能放在方法的第一行,this与super不能在同一方法中使用(因为this也需要写在方法的第一行,所以this与super不能在同一方法中使用)·父类若无无参构造方法,必须在子类构造方法中显式调用父类构造方法,否则编译报错。·默认调用无参构造方法。
2024-09-07 08:18:13
436
原创 Java中String、基本数据类型、包装类之间的转换
示例: int result = new Integer(10);(这种写法不建议,只是为了说明自动拆箱概念)这里的 Integer 对象在参与整数运算时会自动拆箱为 int 类型的 10。:Java 自动将基本数据类型转换为对应的包装类,例如在需要使用对象的地方直接使用基本数据类型,Java 会自动进行装箱操作。这里将基本数据类型 int 值 10 自动装箱为 Integer 对象。:当包装类对象在需要基本数据类型的地方使用时,Java 会自动将其转换为基本数据类型,这就是自动拆箱。
2024-09-05 17:50:52
378
原创 下面这段Java代码一共创建了多少个String对象???
String的字符串常量位于字符串常量池中,而字符串常量池在1.6的时候位于方法区,1.8之后位于堆区,而常量池在设计的时候为了减少内容,如果字符串常量已经存在,则再次使用的时候会直接引用,而如果需要的字符串常量不存在,就需要在常量池中创建出来。不管常量池中如何,只要有new就会在堆区中创建一个字符串对象,所以问创建了对少个字符串对象,需要同时考虑堆区和常量池的问题。故上述代码一共创建了7个String对象。
2024-09-05 16:45:27
220
原创 Java中StringBuffer的用法,常用方法,以及与String的相同和不同之处
如果不足,StringBuffer 会自动创建一个更大的新字符数组(通常是原来容量的一定倍数加上新添加字符的长度),然后将原字符数组中的内容复制到新数组中,再继续进行添加操作。StringBuffer 类似一个字符容器,当在其中添加或删除字符时,所操作的都是这个字符容器,因此并不会产生新的 StringBuffer 对象。在 Java 语言中,由于 String 类是final 类型的,所以使用 String 定义的字符串是一个常量,因此其内容和长度都是不可改变的。源码如下(由于类中内容过多,内容已省略)
2024-09-05 16:23:22
455
原创 Java中如何理解二维数组
二维数组用于表示一组具有相同数据类型的元素的集合,这些元素按行列排列成一个二维表格的形式。在 Java 中,二维数组可以看作是一个特殊的一维数组,其中的每个元素又是一个一维数组。通过两个索引来访问二维数组中的元素,第一个索引表示行,第二个索引表示列。,或者动态初始化,比如先指定行数,再分别为每一行指定列数。在一些数据表格相关的程序中存储和处理多行多列的数据。表示访问第 2 行第 3 列的元素。初始化可以使用静态初始化,例如。在图形处理中用于表示像素矩阵等。
2024-09-05 11:01:38
264
原创 Java中static的使用范围
静态方法只能访问静态成员(静态属性和其他静态方法),不能直接访问实例成员。静态方法中不能直接调用非静态属性和非静态方法,可以直接调用静态属性和静态方法。非静态方法中可以直接调用静态属性、静态方法、非静态属性和非静态方法。可以修饰代码块,即静态代码块。静态代码块在类加载时执行,且只执行一次,通常用于初始化静态成员或者进行一些一次性的初始化操作,比如加载配置文件、初始化数据库连接池等。加载时机通常在相关的外部类被加载时,但具体触发其加载的操作可能因不同的运行环境和代码执行路径而有所差异。
2024-09-04 19:59:15
608
原创 Java中为什么普通对象打印的是地址,而字符串打印的是内容
因为普通对象调用的是Object的toString方法,会将完整的包名+类名+@+十六进制的地址值打印在控制台上, 而String类重写了Object的toString方法,会将字符串转换为字符数组,再将字符数组输出到控制台上,所以打印的是内容。
2024-09-04 19:05:40
330
原创 Java中==和equals的区别
equals在比较内容的时候,需要将字符串转换为字符数组,然后再通过循环进行逐一比较,但是为了提高比较效率,设置的三重判断,第一重比较两个对象的地址是否相同,如果地址相同则表示是同一个对象,返回为true,如果两个对象地址不相同,则进行第二重判断,比较对象是不是String类型的,如果不是,就返回false,如果为true则进行第三重判断,第三重判断,比较两个字符串长度是否相同,如果长度不相同,则证明这是两个字符串,如果长度相同,再进行转换为字符数组,进行按位逐一比较。
2024-09-04 18:57:26
512
原创 Java-权限修饰符
修饰类的成员变量和方法时的访问范围4种权限修饰符的访问范围如表所示。:可以在同一个类中、同一个包中、派生类中不在同包下、其他包中进行访问:可以在同一个类中、同一个包中、派生类不在同包下访问:可以在同一个类中、同一个包中访问:仅在同一个类中可以访问由此可见,权限修饰符public的访问权限是最高的,private的访问权限最低,也是最安全是的。private也体现出了Java三大特性(封装、继承、多态)之一的。
2024-09-03 19:19:12
254
原创 import java 和import javax的差异
import java和import javax的差异:答:import java 和 import javax在java编程中的差异主要体现在它们所代表的包和这些包所包含的内容有所不同。 java包:是JavaAPI中的核心包,包含了运行Java类所需的基本类和方法。这些包在Java发布之初就已经确定,是Java语言 规范的一部分。 javax包:是Java扩展的一部分,提供了更高级的API和功能,这些扩展API涵盖了各种服务和技术,如安全性、企业特性 、网络编程等。 主要差异
2024-09-03 15:32:15
380
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅