当前位置: 首页 > news >正文

黑马Java基础笔记-11

测试类,工具类,JavaBean类

Javabean类

用来描述一类事物的类。比如,Student,Teacher,Dog,Cat等

测试类

用来检查其他类是否书写正确,带有main方法的类,是程序的入口

工具类

不是用来描述一类事物的,而是帮我们做一些事情的类。

  1. 类名见名知意 ArrUtil体现数组处理工具类的定位
  2. 私有化构造方法 防止外部通过new创建实例(工具类无需实例化)
  3. 方法定义为静态 通过类名.方法名()直接调用
/**
* 数组操作工具类(符合设计准则)
*/
public class ArrUtil {// 禁止实例化设计private ArrUtil() {} public static int getMax(int[] arr) {}public static int getMin(int[] arr) {}public static int getSum(int[] arr) {}public static int getAvg(int[] arr) {}
}

将一维数组转化为二维数组

for (int i = 0; i < arr.length; i++) {// 核心逻辑:用 / 和 % 计算行列位置int row = i / cols; // 确定行索引int col = i % cols; // 确定列索引result[row][col] = arr[i];}return result;

常用的api

顶级父类Object类常用方法

toString()

对象的 class 名称 + @ + hashCode 的十六进制字符串。

源码
public String toString() {return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

eg

java.lang.Object@6d06d69c

equals()

该方法用于比较两个对象,如果这两个对象引用指向的是同一个对象,那么返回 true,否则返回 false。一般 equals 和 == 是不一样的,但是在 Object 中两者是一样的。子类一般都要重写这个方法。

源码
public boolean equals(Object obj) { return (this == obj);}

clone()

浅克隆(object默认)

不管对象内部的属性是基本数据类型还是引用数据类型,都完全拷贝过来

深克隆(重写方法或使用第三方工具)

字符串复用(因为在串池里面)

基本数据类型拷贝过来

引用数据类型会重新创建新的


objects

是一个对象工具类

equals()

boolean result =Objects.equals(s1,s2);

细节:
1.方法的底层会判断s1是否为null,如果为null,直接返回false
2.如果s1不为null,那么就利用s1再次调用equals方法
3.此时s1是Student类型,所以最终还是会调用student中的equals方法。


BigInteger

  • 如果BigInteger表示的数字没有超出long的范围,可以用静态方法获取.

     public static Biglnteger valueOf(long val)// 示例代码:
    BigInteger bd4 = BigInteger.valueOf(100L);
    

细节:

  • 1.能表示范围比较小,只能在long的取值范围之内,如果超出long的范围就不行了。
  • 2.在内部对常用的数字:-16~16进行了优化。 // 提前把-16 ~ 16 先创建好BigInteger的对象,如果多次获取不会重新创建新的。
  • 如果BigInteger表示的超出long的范围,可以用构造方法获取

    public Biglnteger(String val) //指定字符串构造
    // 示例代码:
    BigInteger bd2 = new BigInteger("100");
    
  • 对象一旦创建,BigInteger内部记录的值不能发生改变。

  • 只要进行计算都会产生一个新的BigInteger对象

其他构造方法

Biglnteger(String val, int radix)//指定 进制字符串构造
Biglnteger(int numBits, Random rnd)//生成随机大整数
  • max和min方法不会创建新对象,而是会返回大的或小的对象

底层逻辑

有一个intsignum用来存储符号(-1负数,0表示0,1正数)
有一个int[]mag用来将存储数值的绝对值,按大端顺序(高位在前)分割为 32 位无符号整数块。

  1. 去前导零:确保 mag 数组没有前导零块(如 0x00000001[1])。
  2. 大端顺序:高位块在前,低位块在后。
  3. 零的特殊处理:若数值为 0,mag 为空数组。
  4. 按照进制划分固定的字符串长度(10进制9位划分)

eg:

Long.MIN_VALUE(-9223372036854775808)
signum: -1
mag: {0x80000000, 0x00000000} (绝对值 0x8000000000000000 → 分解为 0x80000000(高 32 位)和 0x00000000(低 32 位))

BigDecima

在这里插入图片描述

可以解决精度丢失

构造方法

  1. 通过 double 类型创建(不建议)
    存在精度丢失风险

    BigDecimal bd1 = new BigDecimal(0.01);
    BigDecimal bd2 = new BigDecimal(0.09);
    
  2. 通过 String 类型创建(推荐方式)
    可保证精度准确

    BigDecimal bd3 = new BigDecimal("0.01");
    BigDecimal bd4 = new BigDecimal("0.09");【使用细节】
    
  3. 数值范围选择策略:
    数值较小(在 double 范围内):建议使用静态方法(如 valueOf(),这个内部转化为字符串)
    数值超大(超出 double 范围):必须使用构造方法

  4. 特殊数值优化:
    当传递 0-10 的整数(含边界)时,方法直接返回预创建对象,不会新建实例(10.0还是会创建新的,但是10不会)

底层存储方式

在这里插入图片描述

负号也会被存为一个ascII表字符(45)

和BigInteger一致上限为int数组的最大存储长度


在这里插入图片描述

&&是且,单个&是待匹配的符号,?号表示0次或一次

[]匹配一次 {}匹配范围()分组(将某一段正则表达式变为一组)

(?i)忽略大小写

String regex = "((?i)Java)(?=8|11|17)";

?理解为前面的数据Java
=表示在Java后面要跟随的数据,但是在获取的时候,只获取前半部分(?)

:表示在Java后面要跟随的数据,但是在获取的时候加上后面的匹配的内容(在这里和不写差不多)

捕获分组

()它会把括号里面的正则表达式匹配到的内容保存到该分组(使用group(非0其他货获取))里面,也就是说,它捕获的就是分组里面的正则表达式匹配到的内容

\\组号表示将第几组(看左括号)的分组的内容拿过来再用一次,匹配的内容要与之前的一致(a111a,abc333abc…),在java中使用是使用$组号

(.)\\1+/*需求:
将字符串:我要学学编编编编程程程程程程
替换为:我要学编程*/
Stringstr="我要学学编编编编程程程程程程";
//需求:把重复的内容替换为单个的
//(.)表示把重复内容的第一个字符看做一组
//\\1表示第一字符再次出现
//$1表示把正则表达式中第一组的内容,再拿出来用
String result = str.replaceAll(regex:"(.)\\1+", replacement:"$1");
System.out.println(result);//我要学编程

非捕获分组

不占用组号

(?:正则表达式)   # 仅分组不捕获  group(0)可以获取到?:后面的内容,但是group(0其他)就不行,因为不捕获分组
(?=正则表达式)   # 正向肯定预查(匹配前置条件) group(0)获取不到后续 
(?!正则表达式)   # 正向否定预查(排除前置条件) group(0)获取不到后续 
语法作用方向是否捕获内容(是否能使用group(非0其他)获取到)是否消耗字符(不移动匹配指针)典型场景
(?:)分组是(匹配)逻辑分组,避免组号干扰
(?=)向后检查验证后续内容(如价格单位)
(?!)向后检查排除后续内容(如敏感词)
  • 非捕获分组用于逻辑分组或性能优化(因为不需要保存匹配的结果),不保存匹配结果

  • 正向预查(?=)/(?!))是零宽断言,仅验证条件,不占用匹配结果(起到约束后续匹配内容的作用)。

    a(?=b)c 为何无法匹配 “abc”?

    假设输入字符串为 "abc",正则表达式为 a(?=b)c

    1. 匹配 a
    • 正则引擎从位置0开始匹配字符 a,成功后将指针移动到位置1(b)。
    1. 执行零宽断言 (?=b)
    • 检查当前位置(位置1)的后续字符是否为b。此时字符b确实在位置1,断言通过。
    • 关键点:零宽断言不会移动匹配指针,指针仍停留在位置1(即b)
    1. 尝试匹配 c
    • 引擎从位置1开始匹配字符 c,但位置1的字符是 b,与 c 不匹配,导致整体匹配失败

爬虫

贪婪爬取

默认形式,最大长度优先

非贪婪爬取

加上?,首次匹配成功即停止

ab+:
贪梦爬取:abbbbbbbbbbbb
ab+?:
非贪婪爬取:ab

http://www.xdnf.cn/news/473167.html

相关文章:

  • 深度学习之用CelebA_Spoof数据集搭建一个活体检测-训练好的模型用MNN来推理
  • Turbo C++
  • 数据驱动下的具身智能进化范式
  • 专项智能练习(定义判断)
  • 学习笔记:黑马程序员JavaWeb开发教程(2025.4.4)
  • threejs 大场景优化方案(代码层)
  • pycharm中qthread中的run函数debug不上的问题
  • 深度学习中的提示词优化:梯度下降全解析
  • 钉钉数据与金蝶云星空的无缝集成解决方案
  • mavgenerate 在 win11 下环境搭建注意问题
  • Kuberbetes-CA证书过期解决方案
  • linux系统中如何校准时间
  • windows、Ubuntu、Debian 添加静态路由
  • 从零开始学习PX4源码22(位置控制器---加速度部分理解)
  • MyBatis XML配置和入门使用
  • 论在中断中的标志变量使用volatile的重要性分析
  • 基于EtherCAT与ABP vNext 构建高可用、高性能的工业自动化平台
  • 双重差分模型学习笔记4(理论)
  • ip命令详解
  • HPC软件使用之ANSYS Fluent
  • Git-学习笔记(粗略版)
  • SpringBoot中的Lombok库
  • Python模块化编程
  • 俄罗斯方块算法
  • 2025年长三角+山东省赛+ 认证杯二阶段资料助攻说明
  • 简单网络交换、路由-华三MVRP
  • Linux动态库热加载:动态库与主程序符号调用机制总结
  • 6、登录功能后端开发
  • MobaXterm 25.2中文汉化版优秀的远程桌面管理软件
  • vue2 根据不同路由url设置不同的网页背景颜色