- 博客(10)
- 收藏
- 关注
原创 静态方法内部便捷使用Bean的方法
但是也有缺点,静态内部类只能持有static final变量,因此仅能够作用在确保是单例的变量上,如果每次调用时需要不同的值或者变量会被更改,这种方法也是不能用的。如果在spring启动过程中调用了这个类中的静态方法(如别的类在初始化时也调用了test方法),由于Bean加载顺序的不可控,有可能会出现调用时staticUtils没有被赋值的情况。@PostConstruct注解是java定义的一个生命周期回调注解,作用是在这个类所有依赖注入完毕之后立刻执行被注解的方法,方法执行完毕后Bean才能被使用。
2026-08-19 09:33:29
225
原创 Java探索源码 从StringBuilder的协变返回类型到Latin-1字符集
那么,第二个问题出现了,StringBuilder类为什么要重写父类的非抽象方法,再调用父类方法,而不是直接使用父类的默认方法呢?此时若想调用StringBuilder独有的方法,或在链式调用中保持类型一致,就必须手动进行强制转型——在流畅的链式调用中插入强制转型,既破坏代码的美感,也降低可读性。在Java9之前,存储字符串使用的是char[],而Java9之后使用的是byte[],并配合 coder 字段标识编码:LATIN1(coder = 0):字符都在Latin-1字符集范围内,每个字符1字节;
2026-07-17 20:53:22
317
原创 Java 模板设计模式
一种经典的行为型设计模式。该模式在抽象父类中定义了算法的骨架(模板方法),将其中通用不变的部分作为私有或具体方法加以实现,而将容易变化的部分延迟到子类中实现。子类无需修改整体结构,只需覆写特定的抽象方法即可实现差异化行为。如果不实现抽象方法,自身也要申明为抽象类。它把多个子类共通的逻辑提取到父类的模板方法中,把那些因类而异的逻辑暴露为抽象方法留给子类实现。这样既复用了核心流程,又给了子类充分的扩展空间。
2026-07-07 22:14:44
164
原创 MySQL性能优化-索引和缓存
缓存和索引目的都是提高查询性能,但是二者各有千秋。索引持久化存储在磁盘中,帮助数据库减少扫描量,快速定位需要的数据,缓存存储在内存中,避免向磁盘重复读取同一数据,加快数据访问。二者配合使数据库性能达到最佳。
2026-07-04 23:36:07
312
原创 Java 正则表达式,Pattern,Matcher
正则表达式是一种强大而灵活的文本处理工具。使用正则表达式,我们能以编程的方式,构造复杂的文本模式,并对输入的字符串进行搜索。有别于其他语言中的\\(我要在正则表达式中插入一个普通的\,无特殊意义),在Java中,\\的意思是我要插入一个正则表达式的反斜线,其后的字符具有特殊意义。如果希望单独匹配一个普通的反斜线,需要写成\\\\(字符串转义为\\),希望在正则内匹配,则是\\。以下是一些常见的正则符号C字符C\xhh十六进制值为hh的字符(只能表示AscII)\uhhhh。
2026-06-18 22:05:10
623
原创 Java 单例设计模式
如果创建instance实例需要的开销非常大,又不确定是否需要用到instance实例,那么每次运行都创建一个对象的代价就有些无法接受了。由此我们将创建对象的方法塞入一个静态内部类,既保留了单一实例和线程安全,也达成了类似饱汉式的需要时再加载对象的目标。该实例由类自身持有,外部无法通过 new 创建第二个对象,因此构造器必须设为私有。单例模式减少了频繁创建和销毁对象的内存开销,但由于构造器私有,单例类无法被继承,但可以正常实现接口。顾名思义,单例模式确保一个类有且仅有一个实例,并提供访问该实例的全局方法。
2026-06-18 14:13:19
230
原创 Java 迭代器设计模式-集合框架迭代器
于Iterator不同的是,ListIterator可以双向移动,还可以产生相对于迭代器在列表中指向的当前位置的前一个元素和后一个元素的索引,并使用set()方法替换它访问的最后一个元素。或者也可以说,迭代器封装了遍历操作,并通过泛型和接口使任何类型都能够使用,任何对象都能够获得独立的迭代器实例,实现遍历的功能。方法,自动创建了一个iterator迭代器对象。collection-------------------------------------------- Map(键值对,实质为数组)
2026-06-13 21:57:56
231
原创 JAVA 生成器设计模式
这是一个十分强大的方法,常用于各大框架和序列化、单元测试中,比如spring的依赖注入,@AutoWired 注解的一般都是私有成员,就是靠这个权限才能够正常将需要的对象插入进成员内。而使用生成器,我们只需要创建一个类继承生成器接口,便可以在类的构造器里单独配置所有变量,一次封装,无数次使用,省心又省力。再比如,当我们希望控制某个类创建的对象总数的时候,便可以在对应类生成器的next方法中添加规则,规定如果对象数量达到上限,则返回已有对象,否则继续new新对象。控制台输出,证明调用。
2026-06-10 22:59:37
221
原创 JAVA异常信息是如何产生并输出在控制台的
整个方法是懒加载缓存设计。这里先判断二者地址是否相等,实质是判断异常是否为初次遇到(即本异常对象的stackTrace没有填入数据),如果stackTrace没有指向UNASSIGNED_STACK并且不为null说明缓存命中,直接输出stackTrace内保存的堆栈帧。比如上文提到的pringStackTrace方法内用于输出打印被抑制异常和异常原因的printEnclosedStackTrace方法,因为涉及到去重,需要比对每一个栈帧,在for循环内如果每循环一次就要调取一次,性能开销就会非常大。
2026-06-10 14:58:52
379
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1