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

Java 学习笔记:常用类、String 与日期时间处理

作为一名名 Java 初学者,最近在学习过程中整理了一些关于常用类、String 类以及日期时间处理的知识点。这些内容是 Java 基础中的重点,也是日常编程练习中频繁用到的工具,掌握它们能让我们在写代码时更加得心应手。今天把这些笔记分享出来,希望能和大家一起交流进步。

一、Java 中的常用基础类

Java 提供了许多内置的基础类,它们就像工具箱里的工具,帮我们解决各种常见问题。

Object 类 —— 所有类的 "老祖宗"

Object 类是 Java 中所有类的直接或间接父类,不管我们有没有显式声明,所有类都继承了它的方法。其中最常用的有两个:

  • equals():用于比较两个对象是否相等。需要注意的是,默认的equals()比较的是对象的内存地址,很多类(比如后面要讲的 String)会重写这个方法,改为比较内容是否相同。
  • toString():返回对象的字符串表示。默认格式是 "类名 @哈希值",通常我们会在自定义类中重写它,让输出的信息更有意义。比如:
    class Student {String name;int age;@Overridepublic String toString() {return "Student{name='" + name + "', age=" + age + "}";}
    }

    包装类 —— 基本类型的 "包装器"

    Java 的基本数据类型(如 int、double)不是对象,为了能在需要对象的场景(比如集合框架)中使用它们,Java 提供了对应的包装类:

    基本类型包装类
    intInteger
    charCharacter
    doubleDouble
    booleanBoolean

    包装类最常用的功能是类型转换:

// 字符串转整数
int num = Integer.parseInt("123");
// 整数转字符串
String str = Integer.toString(123);
// 自动装箱拆箱(Java 5+)
Integer a = 100;  // 自动装箱(int→Integer)
int b = a;        // 自动拆箱(Integer→int)

二、String 类 —— 字符串处理利器

String 类用于处理文本数据,是 Java 中最常用的类之一,掌握它的用法能让字符串处理变得简单高效。

String 的重要特性

  • 不可变性:字符串一旦创建,其内容就不能被修改。当我们执行拼接、替换等操作时,其实是创建了新的 String 对象。

    String s = "hello";
    s += " world";  // 这里创建了新的String对象,原"hello"并未改变

    字符串常量池:为了节省内存,Java 会把字符串常量存放在常量池中。如果创建的字符串已经存在于常量池,就直接引用而不重复创建。

    String s1 = "hello";
    String s2 = "hello";
    System.out.println(s1 == s2);  // 输出true,因为指向同一个常量池对象

    必学的 String 常用方法

  • length():获取字符串长度

    "hello".length();  // 返回5

substring(int start, int end):截取子串(包含 start,不包含 end)

"hello world".substring(0, 5);  // 返回"hello"

 

equals(Object obj):比较字符串内容是否相等(注意与==的区别)

"hello".equals("hello");  // 返回true
"hello" == "hello";       // 返回true(常量池机制)
new String("hello") == "hello";  // 返回false(new创建了新对象)

indexOf(String str):查找子串首次出现的位置,找不到返回 - 1 

"hello world".indexOf("world");  // 返回6

replace(CharSequence old, CharSequence new):替换字符串中的字符 / 子串 

"hello".replace('l', 'x');  // 返回"hexxo"

 

三、日期时间处理 —— 时间的 "记录者"

在编程中,处理日期时间是很常见的需求,比如记录日志时间、计算时间差等。Java 提供了两套日期时间 API,我们都需要了解。

旧版 API(Date 和 Calendar)

这是 Java 早期的日期时间类,虽然部分方法已过时,但在老项目中仍能看到它们的身影:

  • Date 类:表示特定的时间点

Date now = new Date();
System.out.println(now);  // 输出当前时间,格式如:Fri Aug 01 16:30:45 CST 2025

Calendar 类:用于更灵活地操作日期时间 

Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);  // 获取当前年份
int month = cal.get(Calendar.MONTH) + 1;  // 月份从0开始,需加1
int day = cal.get(Calendar.DAY_OF_MONTH);  // 获取日期

新版 API(Java 8+)

Java 8 引入了全新的日期时间 API(位于java.time包下),解决了旧版 API 线程不安全、设计混乱等问题,推荐优先使用:

  • LocalDate:只包含日期(年、月、日)

LocalDate today = LocalDate.now();
int year = today.getYear();  // 获取年份
Month month = today.getMonth();  // 获取月份(Month枚举类型)
int day = today.getDayOfMonth();  // 获取日期

 LocalTime:只包含时间(时、分、秒)

LocalTime now = LocalTime.now();
int hour = now.getHour();    // 小时
int minute = now.getMinute();  // 分钟

LocalDateTime:包含日期和时间(最常用)

LocalDateTime now = LocalDateTime.now();  // 获取当前日期时间

日期时间格式化:使用DateTimeFormatter 

LocalDateTime now = LocalDateTime.now();
// 定义格式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// 格式化
String formatted = now.format(formatter);
System.out.println(formatted);  // 输出如:2025-08-01 16:45:30

日期计算:轻松实现加减操作 

LocalDate tomorrow = LocalDate.now().plusDays(1);  // 明天
LocalDate lastMonth = LocalDate.now().minusMonths(1);  // 上个月

总结

以上就是我整理的关于 Java 常用类、String 类和日期时间处理的核心知识点。这些内容虽然基础,但在实际编程中应用广泛,尤其是 String 类和新版日期时间 API,建议多写代码练习巩固。

作为一名学生,我深知学习编程需要不断实践和总结。如果笔记中有错误或不完善的地方,欢迎大家在评论区指正交流,让我们一起在 Java 学习的道路上共同进步!

 

 

 

 

 

 

 

 

 

 

 

 

 

http://www.dtcms.com/a/309518.html

相关文章:

  • 对于前端闭包的详细理解
  • 【数据结构与算法】21.合并两个有序链表(LeetCode)
  • Redis内存淘汰机制
  • 32. flex 的子元素可以浮动吗
  • RLHF-V原论文阅读
  • RabbitMQ-镜像队列(Mirrored Queues)
  • Springboot 配置 doris 连接
  • 阿里智能AI框架Playground,即学即用
  • 数据驱动下的物业满意度升级:国标调查的精准赋能
  • 自动驾驶的未来:多模态传感器钻机
  • javascript中call、apply 和 bind 的区别详解
  • Inheritance
  • 什么是链游
  • Java:高频面试知识分享2
  • vue+cesium+geoserver跨域问题
  • 计算机组成原理2-2:进位计数制及其数据之间的相互转换
  • ubuntu 镜像克隆
  • React + ts + react-webcam + CamSplitter 实现虚拟摄像头解决win摄像头独占的问题
  • Java 22 新特性解析与代码示例
  • leecode42 接雨水
  • Mysql join语句
  • ansible简单playbook剧本例子2
  • CMake set_source_files_properties使用解析
  • 如何通过黑白棋盘进行定位配准融合?(前后安装的两个相机)
  • 大模型微调实战 -基于SWIFT框架
  • 南太平洋金融基建革命:斐济-巴新交易所联盟的技术破局之路 ——从关税动荡到离岸红利,跨境科技如何重塑太平洋资本生态
  • 使用Gemini API开发领域智能聊天机器人的思路
  • js判断是个变量和属性是否是有效值
  • PixelCNN介绍:VQ-VAE的前一步探索
  • 2025年Python Web框架之争:Django、Flask还是FastAPI,谁将主宰未来?