加载中...
Java函数式编程学习
《Java核心技术卷Ⅰ》P242 概述为什么要学函数式编程? 易于使用并发编程,大数据量下,集合处理效率高:可以使用并行流,自动使用多线程方式处理。 代码可读性高 消灭嵌套地狱s 12345678910111213141516171819202122// 查询未成年作家评分在70分以上的书籍,由于流的影响所以作家和书籍可能会重复出现,所以要去重List<Author> authors = new ArrayList<>();List<Book> bookList = new ArrayList<>();Set<Book> uniqueBookValues = new HashSet<>();Set<Author> uniqueAuthorValues = new HashSet<>();for (Author author : authors) { if (uniqueAuthorValues.add(author)) { if (autho ...
Java中protected详解——以clone为例
问题来源:《Java 核心技术卷 Ⅰ》(第十版)P238 描述:《Java 核心技术卷 Ⅰ》的原话:Object类中的clone方法声明为protected,所以你的代码不能直接调用anObject.clone()。但是,不是所有的子类都可以访问受保护的方法吗?不是所以的类都是Object的子类吗?辛运的是,受保护访问的规则比较微妙。子类只能调用受保护的clone方法来克隆它自己的对象。必须重新定义clone为public才能允许所有方法克隆对象。 Protected的可见性 对本包和所有子类可见——protected 更准确的规则还要加上: 基类的 protected 成员是包内可见的,并且对子类可见; 若子类与基类不在同一包中,那么在子类中,子类实例可以访问其从基类继承而来的protected方法,而不能访问基类实例的protected方法。 例子说明 我们可以通过以下几个关于protected方法可见性的例子来进一步掌握protected关键字。在碰到涉及protected成员的调用时,首先要确定出该protected成员来自何方,其 ...
快排模板中比较值的选取问题
存在问题 快排模板中, int mid = (l + r + 1) / 2,q[mid]与q[i]、q[j]比较 int x = q[(l + r + 1) / 2],x与q[i]、q[j]比较 这两者看起来等价,但前者是错误的。 错误样例: 分析过程 数据: 0 1 2 3 4 5 6 7 8 9 49 59 88 37 98 97 68 54 31 3 i j mid q[mid] 初始 0 9 5 97 quick_sort(q, 0, 9) i、j指针移动到i:4 j:9 0 1 2 3 4 5 6 7 8 9 49 59 88 37 98 ==97== 68 54 31 3 交换->swap(q[4], q[9]) 由于i小于j(i:4 j:9),继续移动 ...
为什么要通过Constructor对象创建实例?
问题来源:《Java核心技术卷Ⅰ》(第11版)P200 在《Java核心技术卷Ⅰ》中提到的反射实例化方式,引发了笔者一个常见疑问:为什么不能直接使用cl.newInstance(),而需要先获取Constructor对象再调用newInstance()?本文将深入探讨其背后的设计逻辑和技术演进。 历史原因与过时方法 Class.newInstance() 是早期设计(Java 1.0 引入),它存在以下问题: 只能调用无参构造方法,如果类没有无参构造器,会直接抛出 InstantiationException。 异常处理不透明:如果构造方法本身抛出异常,Class.newInstance() 会将其包装成 InvocationTargetException 的父类异常,导致调试困难。 安全性问题:无法通过反射权限检查时,会直接抛出异常,而不会像 Constructor 方法那样提供更细粒度的控制。 Constructor.newInstance() 是改进方案(Java 1.2 引入): 支持调用任意参数类型的构造方法(需通过 getConstructor(Class ...
Java反射学习
一个需求引出反射 1.根据配置文件re.properties指定信息,创建Cat对象并调用方法hi(Cat类在com.hj包下,里面有hi方法) 12classfullpath=com.hj.Catmethod=hi 传统方法是直接new Cat对象,然后调用。但现在是要从配置文件得到信息,再得到对象。 2.这样的需求特别多,即通过外部文件配置,在不修改源码的情况下,来控制程序,也符合设计模式的ocp原则(开闭原则:不修改源码,扩容功能) 示例: 文件结构: re.properties 123classfullpath=com.hj.Catmethod=hi# 以后要调用cry方法,只需修改此处的配置文件即可 Cat.java 12345678910public class Cat { private String name = "招财猫"; public void hi() { System.out.println("hi" + name); } ...
Java枚举比较:为什么应该优先使用==而非equals?
问题来源:《Java 核心技术卷 Ⅰ》(第十版)P196 在 Java 开发中,枚举(Enum)类型的使用非常普遍。但很多开发者对枚举值的比较方式存在疑惑:究竟应该用==还是equals()?本文将深入解析两者的区别与最佳实践。 一、枚举常量的单例性 Java 枚举本质上是一个语法糖,每个枚举常量都是单例对象。当定义枚举时: 12345678910enum HttpStatus { OK(200), NOT_FOUND(404); private final int code; HttpStatus(int code) { this.code = code; }} JVM 会保证: HttpStatus.OK 在内存中只有一个实例 所有对OK的引用都指向同一内存地址 枚举常量在类加载时初始化且不可变 二、==与 equals 的底层机制 1. ==运算符的行为 1234HttpStatus status1 = HttpStatus.OK;HttpStatus ...
equals中getClass和instanceof的选择依据
问题来源来自《Java核心技术卷Ⅰ》(11版)中P177。 不过,集合是非常特殊的一个例子,应该将AbstractSet.equals声明为final,这是因为没有任何一个子类需要重新定义集合相等的语义(事实上,这个方法并没有被声明为final。这样做是为了让子类实现更高效的算法来完成相等性检测)。 就现在来看,有两种完全不同的情形: 如果子类可以有自己的相等性概念,则对称性需求将强制使用getClass检测。 如果由超类决定相等性概念,那么就可以使用instanceof检测,这样可以在不同子类 的对象之间进行相等性比较 没有设计成final的解析 集合相等性语义统一:集合的相等性由元素内容决定(元素相同且顺序无关),与具体实现类无关。例如: 12345```javaSet<String> hashSet = new HashSet<>(List.of("A", "B"));Set<String> treeSet = new TreeSet<>(List.of(" ...
如何清理C盘
查看 C 盘使用情况 设置(win+i)->系统->存储 可以自行点击每一项查看使用情况,以便进行删除判断。 例子:比如安装的应用,可以自行卸载一些在 c 盘的应用,看是否能安装到其他盘;比如一些图片、音乐、视频文件,迁移到其他盘;或者直接删除。 临时文件清理 win+R,输入%TEMP%,这个文件夹下的文件都是 windows 的临时文件,可以全选删除。(临时文件夹里的都可以删除,但是有些可能删不掉,因为有些程序正在使用,你可以把所有程序都关掉,然后再删除。) 磁盘清理 win+s,搜索磁盘清理,选择 c 盘 接着按照自己需求勾选清理。(显示的全部文件,都可勾选删除) 开启存储感知 设置(win+i)->系统->存储->开启存储感知(启用存储感知并设置自动清理选项,如删除临时文件和回收站文件)
Java强制类型转换:为什么需要显示转换?
问题场景 123Object obj = new Integer(10);System.out.println(obj.getClass()); // 输出 class java.lang.IntegerInteger i = (Integer) obj; // 为什么必须强制转换? 明明obj的运行时类型是Integer,为什么赋值给Integer类型变量时需要强制转换?这与 Java 的编译时类型和运行时类型机制密切相关。 核心概念解析 1. 编译时类型 vs 运行时类型 编译时类型 运行时类型 定义 由变量声明决定 由实际创建的对象决定 作用阶段 编译阶段(静态检查) 运行阶段(动态绑定) 示例 Object obj → 类型为 Object new Integer(10) → 类型为 Integer 2. 强制转换的本质 编译时承诺:告诉编译器"我知道这个对象的具体类型" 运行时验证:JVM 会检查实际类型是否匹配,否则抛出ClassCastExce ...
2025-02-03-2025-02-09论文阅读周报
阅读论文: 目前存在的问题: SBOM质量评估 An Empirical Study on Software Bill of Materials: Where We Stand and the Road Ahead {2023}, {Xia B, Bi T, Xing Z, et al.}, {ICSE} Xia B, Bi T, Xing Z, et al. An empirical study on software bill of materials: Where we stand and the road ahead[C]//2023 IEEE/ACM 45th International Conference on Software Engineering (ICSE). IEEE, 2023: 2630-2642. Key Points SBOM Summary 文章针对软件物料清单(SBOM)展开实证研究,通过访谈和调查从业者,揭示其在实践应用、工具支持方面的现状及问题,并提出未来发展方向与目标模型。 Research ...
2025-01-27~2025-02-02论文阅读周报
An Empirically Grounded Reference Architecture for Software Supply Chain Metadata Management{2024}, {Tran N K, Pallewatta S, Babar M A}, {EASE 2024} Tran N K, Pallewatta S, Babar M A. An Empirically Grounded Reference Architecture for Software Supply Chain Metadata Management[C]//Proceedings of the 28th International Conference on Evaluation and Assessment in Software Engineering. 2024: 38-47. Key Points SSC SBOM SCM2 RA [ ] 关键点,看文章途中觉得很关键的词可以填写在此处 Summary本文聚焦软件供应链(SSC)安全问题,鉴于 SSC 攻击频发,提出 ...
研究候选方向:面向零信任技术的安全认证或访问控制等方法-论文阅读笔记
该研究方向:面向零信任技术的安全认证或访问控制等方法研究。 基于零信任的动态访问控制机制研究 与实现 {2022}, {吴一楠}, {硕士论文} 吴一楠.基于零信任的动态访问控制机制研究与实现[D].北京邮电大学,2022.DOI:10.26969/d.cnki.gbydu.2022.001763. Key Points 零信任 动态访问控制 关键点,看文章途中觉得很关键的词可以填写在此处 Summary 写完笔记之后最后填,概述文章的内容,以后查阅笔记的时候先看这一段。注:写文章summary切记需要通过自己的思考,用自己的语言描述。忌讳直接Ctrl + c原文。 Research Objective(s) 作者的研究目标是什么? Background / Problem Statement 研究的背景以及问题陈述:作者需要解决的问题是什么? Method(s) 作者解决问题的方法/算法是什么? 是否基于前人的方法?基于了哪些? Evaluation setup: 软硬件环境 ...