自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(103)
  • 收藏
  • 关注

原创 反射与设计模式2

总体而言,反射主要通过以下几种方式应用于设计模式:动态实例化解除代码耦合,动态调用实现行为与业务分离,动态代理支持如 AOP 等高级功能,以及运行时信息获取支持框架开发。反射(Reflection)与设计模式的结合,是 Java 高级开发中的核心技能,它通过在运行时动态操作类、方法和属性,为设计模式提供了更灵活、强大的实现方式。它通过“运行时动态性”解决了编译时的静态耦合问题,是实现大多数 Java 框架优雅设计的基石,也是构建高扩展性应用的必备技能。传统的静态工厂模式每增加一个产品,都需要修改工厂类。

2026-06-03 19:10:17 241

原创 反射与设计模式1

性能优化:在 InvocationHandler 内部可缓存 Method 对象(JVM 已做),但更重要的优化是避免在 invoke 内做重操作,如大量字符串拼接、远程调用等。// 从容器获取实例。原理:运行时扫描字段,找到 @Autowired 后,反射获取依赖对象实例,然后 field.set() 强行赋值。3. 调用代理对象的 add(3,5) 时 → 代理类调用 handler.invoke(...)。· 本质:反射将“编译时决定”延迟到“运行时决定”,从而让设计模式获得可插拔、可配置的能力。

2026-06-03 19:09:13 361

原创 NIO 技术的使用

直接内存(DirectByteBuffer)不受JVM堆GC的直接管理,但它的回收依赖于java.nio.DirectByteBuffer中关联的Cleaner对象(sun.misc.Cleaner),在GC时通过虚引用(PhantomReference)触发Deallocator来释放本地内存。· 边缘触发(ET) vs 水平触发(LT):Java NIO的Selector采用水平触发,即只要缓冲区有数据,每次select都会通知,避免了ET模式下需要一次性读完数据的复杂性。// 不推荐,依赖sun包。

2026-05-30 22:03:59 379

原创 JDBC 技术的使用

移动游标:next()、previous()、absolute(int)、relative(int)、first()、last()(需创建可滚动结果集)。· JDBC 3.0以前:必须用Class.forName("驱动类名"),触发静态代码块中的DriverManager.registerDriver()。PreparedStatement conn.prepareStatement(sql) 带参数的SQL,重复执行 防注入,预编译,推荐。// 或 cstmt.executeUpdate()

2026-05-30 21:53:59 491

原创 Java IO流实现文件操作相关知识点

原理:内部维护一个 byte/char 数组,一次性从硬盘读取多个字节到内存缓冲区,后续 read() 从缓冲区取;· Java 11+ 简化:Files.newBufferedReader(Path.of("a.txt"), StandardCharsets.UTF_8)读取小文件 单字节循环 while((b=in.read())!PrintWriter / PrintStream 格式化输出 print() / printf() 很方便,不抛 IOException。

2026-05-16 13:14:13 505

原创 Java IO流文件操作

读文件:创建 FileInputStream,然后用 read() 方法读取。· 写文件:创建 FileOutputStream,调用 write(byte[]) 写入。· NIO 替代:对于高并发或大文件,考虑 FileChannel 或 Files 工具类(如 Files.copy),性能更好。· 刷新:写入完成后调用 flush() 强制将缓冲区数据刷入文件,close() 会隐式调用 flush()。· 路径:推荐用 File 对象或 Path 接口(NIO)来定位文件。

2026-05-16 13:10:56 178

原创 基于多线程机制 相关知识点

WAITING:无限期等待,需要notify()/notifyAll()/LockSupport.unpark()唤醒。· TIMED_WAITING:有限期等待,如sleep(long)、wait(long)、join(long)调用Thread.stop()、suspend()、resume() 安全终止用interrupt()配合标志位。· 进入方式:Object.wait()、Thread.join()、LockSupport.park()sleep()不释放锁,任意地方使用。

2026-05-10 19:59:06 537

原创 基于异常处理机制 相关知识点

编译器为 finally 块生成冗余代码:在 try 的正常出口、每个 catch 的出口,以及异常抛出的路径前,都会插入 finally 块的字节码拷贝。答:try-with-resources 中,主异常抛出后,close() 又抛出异常,后者被附加为主异常的抑制异常。· Thread.currentThread().getStackTrace() 可获取当前线程的调用栈(不包含异常)· 不处理异常会导致 future.join() / get() 抛出 CompletionException。

2026-05-10 19:48:32 310

原创 Java Map集合相关知识点

0 : (h = key.hashCode()) ^ (h >>> 16)(扰动函数)ConcurrentHashMap 分段锁/CAS+synchronized 无序 键/值不可null 是(高并发)· 存储结构:数组(Node[] table) + 链表(冲突时) + 红黑树(链表长度≥8且数组≥64)· 重新计算每个元素的索引:要么在原位置,要么在原位置+旧容量(利用新容量是2的幂的特性)HashMap 哈希表(数组+链表/红黑树) 无序 键/值均可null 否。// 添加/覆盖,返回旧值。

2026-05-02 17:47:00 435

原创 Java Set集合相关知识点

判断重复依据 compareTo() / compare() 返回0,而非 equals()。

2026-05-02 17:42:25 387

原创 Java List集合知识点

5. Arrays.asList() 返回的 List 为什么不能 add/remove:它返回的是内部类 ArrayList(不是 java.util.ArrayList),基于原生数组,大小固定。· 普通 for 循环 + get(i):对 ArrayList 高效,对 LinkedList 极慢(O(n²))List<String> list = new ArrayList<>(100);List 内排序(Java 8+) list.sort(Comparator.naturalOrder())

2026-04-25 20:56:46 591

原创 Java 基于字符串相关知识点

缓冲区溢出 C 的 gets()、strcpy() 未检查长度 使用 fgets()、strncpy() 或 C++ std::string。Rust 否(String 可变) UTF‑8,&str 为切片 索引需用 chars() 或 bytes(),避免按字节截断。· len() 在不同语言中可能是字节数(Go/C)、码点数(Python 3)、或者 UTF‑16 单元数(Java)。子串(substring) O(1) ~ O(k) Java 早期共享字符数组(可能内存泄漏),Go 重新分配。

2026-04-25 20:52:46 411

原创 Java 基于Object类和包装类的知识点

public final void wait() / wait(long) / wait(long, int) 使当前线程进入等待状态,直到被 notify() 或 notifyAll() 唤醒,或超时。Number 是 Byte, Short, Integer, Long, Float, Double 的抽象父类,提供 intValue(), longValue(), floatValue(), doubleValue() 等转换方法。默认实现为 ==(比较引用地址)。通常需要重写以提供有意义的信息。

2026-04-17 18:04:55 524

原创 Java 内部类

在 Java 中,内部类就是定义在另一个类内部的类。内部类主要分为四种:成员内部类、静态嵌套类(常被视为第四种,但严格说它不属于内部类)、局部内部类和匿名内部类。它可以访问外部类的所有成员,还能访问方法内的局部变量,但该局部变量必须是final 或事实上的不可变(在 Java 8+ 中,称为 effectively final)。· 选择建议:内部类不需要访问外部实例成员时,优先使用静态嵌套类(更省内存)。· 能否有静态成员:成员内部类、局部内部类、匿名内部类都不能定义静态成员(常量除外)。

2026-04-17 18:01:21 237

原创 Java 接口的定义重构学生管理系统

重构后的系统可以轻松应对需求变化(如从内存存储改为数据库存储),同时极大提升了代码的可测试性和可维护性。// 原来的实现:直接使用 ArrayList,业务代码与具体存储耦合。// 构造方法、getter/setter 省略。// 重构后:实现 StudentService 接口。// 通过构造方法注入具体的实现(依赖注入)// 静态方法:创建默认的内存实现。// 默认方法:检查学生是否成年。

2026-04-12 22:16:38 383

原创 Java 抽象类 知识点

初始化顺序:父类静态块 → 子类静态块 → 父类实例块 → 父类构造方法 → 子类实例块 → 子类构造方法。· 抽象类可以实现接口(使用 implements),且可以不实现接口中的方法(交由具体子类实现)。抽象类中定义骨架方法(final 防止篡改),调用一系列抽象方法或钩子方法。· 误区:抽象方法不能有主体,但可以有 {} ❌ (必须;答:可以,作为抽象类,它可以把接口方法继续声明为抽象方法,留给子类实现。· 抽象方法:使用 abstract 修饰,没有方法体(直接以分号结尾)。

2026-04-12 22:13:11 372

原创 Java 抽象类 相关知识点

抽象类可以没有抽象方法,但即使没有抽象方法,它仍然不能实例化(常用于禁止直接实例化的工具类,但这种情况更多用 final 类配合私有构造器)。· 定义模板:模板方法模式(Template Method)中,抽象类定义算法的骨架(具体方法),将一些步骤延迟到子类实现(抽象方法)。· 如果子类也是抽象类,则可以选择实现部分抽象方法,也可以完全不实现,继续将未实现的方法作为抽象方法传递给下一级子类。· 可以包含抽象方法(使用 abstract 修饰,没有方法体)和具体方法(有方法体)。

2026-03-17 18:59:47 418

原创 Java 三个修饰符 相关知识点

抽象方法不能是 private、static、final 或 synchronized(因为抽象方法需要被子类覆盖,而 private 不可见,static 属于类,final 禁止重写,synchronized 是方法实现层面的修饰,没有方法体则无意义)。final 类中不能有 abstract 方法 ❌ final 类不可被继承,而抽象方法必须靠子类实现,矛盾。abstract static 方法 ❌ 抽象方法不能是静态的(静态方法属于类,不能被覆盖,与抽象矛盾)。

2026-03-17 18:54:18 361

原创 面向对象三大特征:封装、继承、多态

在实际开发中,应该根据具体场景灵活运用这些特征,遵循面向对象设计原则,构建出高内聚、低耦合、可维护、可扩展的软件系统。public final void process() { // final防止子类修改算法结构。// 调用Rectangle的display()// 调用Circle的display()// final确保不可变。protected void saveData() { // 重写保存方式。// 调用父类构造器。// Getter方法 - 受控访问。// 隐式调用super()

2026-02-09 17:08:02 817

原创 基于多态的相关知识点(封装、继承、多态)

/ 输出"Parent"// 输出"Parent",静态方法调用取决于引用类型。System.out.println("动物发出声音");static void show() { // 隐藏,不是重写。System.out.println("汪汪汪");System.out.println("喵喵喵");// 输出"汪汪汪"virtual void show() { // 虚函数。· 方法重写/覆盖(Overriding)

2026-02-09 16:59:59 688

原创 基于继承的相关知识点

return f"这是一个形状,面积={self.area():.2f},周长={self.perimeter():.2f}"super().log(f"[{timestamp}] {message}") # 使用super()调用父类方法。print(f"渲染按钮 '{self.text}' 在({self.x}, {self.y})")# 输出: D.method() -> B.method() -> C.method() -> A.method()

2026-02-05 12:32:53 693

原创 基于继承的信息管理系统

{isinstance(student, Person)}")teacher2 = Teacher("赵副教授", 38, "女", "T002", "数学学院", "副教授")teacher = Teacher("李老师", 35, "女", "T001", "计算机学院", "副教授")teacher1 = Teacher("王教授", 45, "男", "T001", "计算机学院", "教授")student = Student("张三", 20, "男", "S001", "计算机科学", 3)

2026-02-05 12:23:15 718

原创 基于封装的专项 知识点

public record Point(int x, int y) { } // 自动生成final字段和访问器。throw new IllegalArgumentException("温度超出范围");public void executeQuery(String sql) { /* 隐藏所有细节 */ }if (temp >= -20 && temp <= 50) { // 业务规则校验。protected void internalHelper() { /* 框架扩展点 */ }

2026-01-30 21:39:18 555

原创 基于面向对象的专项 知识点

default void land() { } // Java8默认方法。// 默认public abstract。记住:面向对象的终极目标是创建高内聚、低耦合、易维护、可扩展的软件系统。class Dog extends Animal { // 继承。// 动态绑定到Dog的eat方法。void eat() { } // 可以有具体方法。// 而非 extends Engine。

2026-01-30 21:31:47 768

原创 Java 基于数组的专项 知识点

if (arr.length == 0) throw new IllegalArgumentException("数组为空");// 默认: [null, null]System.out.println("索引 " + i + ": " + nums[i]);// 默认: [0, 0, 0]

2026-01-23 16:47:51 423

原创 Java 基于函数的专项 知识点

Runnable r1 = () -> System.out.println("无参");Objects.requireNonNull(data, "数据不能为空");// 不影响原始引用。System.out.println("整数: " + num);System.out.println("小数: " + num);System.out.println("类加载时执行");System.out.println("这是一个形状");System.out.println("不能重写我");

2026-01-23 13:31:54 1015

原创 Java 基于分支与循环结构 知识点

System.out.println("你猜了" + attempts + "次");List<String> fruits = Arrays.asList("苹果", "香蕉", "橙子");System.out.println("尝试次数: " + (attempts + 1));System.out.print("请输入你猜的数字(1-100): ");System.out.print("请输入1-10之间的数字: ");System.out.println("输入正确: " + number);

2026-01-15 17:25:20 1067

原创 基于Java的相关知识点

System.out.println("除零错误");System.out.println("通用异常");System.out.println("线程执行");· 方法区(Method Area):类信息、常量池。· 加载 → 验证 → 准备 → 解析 → 初始化。// 字符串拼接使用StringBuilder。· 栈内存(Stack):局部变量、方法调用。· 框架原理(Spring)// 可能抛出异常的代码。· 堆内存(Heap):对象实例。2. 面向对象编程(OOP)· AOP(面向切面编程)

2026-01-15 17:04:22 844

原创 Java IO流实现文件操作知识点

String[] fileLines = {"文件 " + (i + 1) + " 的内容", "这是第 " + (i + 1) + " 个文件"};System.out.println(" ... 还有 " + (allFiles.size() - 5) + " 个文件");System.out.println("第" + (i + 1) + "行: " + lines.get(i));System.out.println("第" + lineNumber + "行: " + line);

2025-12-28 19:00:00 959

原创 Java 多线程机制知识点

System.out.println("初始值: " + stampedRef.getReference() + ", 版本: " + stamp);System.out.println("CAS操作结果: " + success + ", 新值: " + atomicRef.get());// WAITING。System.out.println("队列大小: " + monitorPool.getQueue().size());

2025-12-28 18:30:00 803

原创 Java 异常处理机制知识点

System.out.println("目标方法抛出异常: " + targetException.getClass().getName());System.out.println("原始异常: " + e.getCause().getClass().getName());System.out.println("原始错误: " + e.getCause().getMessage());System.out.println("原因: " + e.getCause().getMessage());

2025-12-28 18:00:00 952

原创 Java Map集合知识点

System.out.println("TreeMap内存占用: ~" + (treeMapMemory/1024) + "KB");// 指定初始容量和加载因子。System.out.println("最高分的学生: " + maxKeyByValue(scores).orElse("无"));System.out.println("最低分的学生: " + minKeyByValue(scores).orElse("无"));

2025-12-28 13:35:22 801

原创 Java Set集合知识点

System.out.println("LinkedHashSet内存占用: ~" + (linkedHashSetMemory/1024) + "KB");System.out.println("HashSet内存占用: ~" + (hashSetMemory/1024) + "KB");System.out.println("TreeSet内存占用: ~" + (treeSetMemory/1024) + "KB");

2025-12-27 20:15:20 293

原创 Java List集合知识点

Java List集合知识点

2025-12-27 00:32:20 512

原创 基于异常的专项 实验结论

本次实验验证了Java异常机制在实际开发中的必要性与实用性:合理划分异常类型、设计业务化自定义异常、规范使用 try-catch-finally 流程,是提升程序稳定性、可读性与可维护性的关键手段,可为复杂项目的异常处理提供标准化实践参考。自定义异常突破了Java内置异常的通用语义限制,能精准承载业务提示(如“用户名长度不足”),既提升了异常信息的可读性,也简化了业务场景下的异常定位与处理逻辑。同时,异常捕获应遵循“就近匹配、具体优先”的原则,确保不同类型异常得到差异化处理。(2)自定义异常的业务价值。

2025-12-27 00:13:08 225

原创 Java 字符串知识点

/ true,内容相同。// 每次循环都创建新String对象。// 2. 使用String.valueof()代替toString()// StringBuilder:非线程安全,性能较高(推荐)// 5. 使用Objects.equals()避免空指针。

2025-12-27 00:12:54 787

原创 基于Map的专项 实验结论

通过实验,熟练掌握了 Map 集合的创建(如 HashMap 的实例化)、元素添加( put 方法)、查询( get 、 containsKey 、 containsValue 方法)、删除( remove 方法)以及遍历(键遍历、键值对遍历、值遍历)等操作,明确了 Map “键-值”对的存储逻辑和操作特性。针对“银行用户”这类自定义对象与 Map 结合的场景,加深了对面向对象编程(类、对象、属性、构造方法)与集合框架协同使用的理解,能够灵活运用 Map 存储复杂对象并实现业务功能。

2025-12-26 23:56:17 262

原创 Java 对象及包装类知识点

System.out.println("基本类型数组耗时: " + (endTime - startTime) + "ms");// java.lang.Object@哈希码。// 相当于 int b = a.intValue();

2025-12-26 23:53:56 512

原创 Java 核心知识点总结2

同时,Java生态中的各种框架和工具(如Spring、MyBatis等)也是Java开发者必须掌握的重要内容,它们构建在Java基础之上,共同构成了完整的Java技术栈。JVM作为Java程序的运行环境,负责字节码的解释执行和内存管理。· 基本数据类型:byte(8位)、short(16位)、int(32位)、long(64位)、float(32位)、double(64位)、char(16位)、boolean(1位)· 三大核心:Channel(通道)、Buffer(缓冲区)、Selector(选择器)

2025-12-25 00:28:04 1327

原创 Java 程序设计题

60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润 I ,求应发放奖金总数?1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。(2)如果 nk ,但 n 能被 k 整除,则应打印出 k 的值,并用 n 除以 k 的商,作为新的正整数你 n ,重复执行第一步。题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

2025-12-25 00:23:10 332

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除