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

JAVA高级编程第五章

JAVA高级编程

文章目录

  • JAVA高级编程
    • 第五章 实用类补充
      • StringBuffer类
        • 类定义与特点
        • 比较
          • StringBuffer vs StringBuilder
          • StringBuffer vs String
        • 构造方法
        • 主要方法
          • 追加方法
          • 插入方法
          • 删除方法
          • 其他方法
        • 使用示例
      • Date类
        • 类定义与特点
        • 构造方法
        • 方法
          • 获取时间
          • 设置时间
          • 比较方法
      • SimpleDateFormat类
        • 类定义与特点
        • 常用模式字母
        • 构造方法
        • 主要方法
          • 格式化日期(Date -> String)
          • 解析日期(String -> Date)
          • 其他方法
      • Calendar类
        • 基本介绍
        • 方法
          • get()
          • set()
          • add()
          • getTimeInMillis()
        • 常用常量
        • 注意事项

第五章 实用类补充

StringBuffer类

StringBuffer 是 Java 中用于处理可变字符串的一个重要类,位于 java.lang 包中。它是线程安全的可变字符序列,适用于需要频繁修改字符串内容的场景。

类定义与特点
public final class StringBufferextends AbstractStringBuilderimplements Serializable, CharSequence
  • 线程安全:所有公共方法都使用同步(synchronized)保证线程安全
  • 可变性:可以修改内容而不创建新对象
  • 继承关系:继承自 AbstractStringBuilder 抽象类
  • 可序列化:实现了 Serializable 接口
  • final类:不能被继承
比较
StringBuffer vs StringBuilder
特性StringBufferStringBuilder
线程安全安全(方法同步)不安全
性能稍低更高
版本Java 1.0Java 5
使用场景多线程环境单线程环境
StringBuffer vs String
特性StringBufferString
可变性可变不可变
线程安全安全安全(因为不可变)
性能修改操作高效修改操作低效
构造方法
构造方法描述
StringBuffer()创建初始容量为16的空缓冲区
StringBuffer(int capacity)创建指定初始容量的空缓冲区
StringBuffer(CharSequence seq)创建包含指定CharSequence内容的缓冲区
StringBuffer(String str)创建包含指定字符串内容的缓冲区
主要方法
追加方法
StringBuffer append(boolean b)
StringBuffer append(char c)
StringBuffer append(char[] str)
StringBuffer append(double d)
StringBuffer append(float f)
StringBuffer append(int i)
StringBuffer append(long l)
StringBuffer append(Object obj)
StringBuffer append(String str)
StringBuffer append(StringBuffer sb)
插入方法
StringBuffer insert(int offset, boolean b)
StringBuffer insert(int offset, char c)
StringBuffer insert(int offset, char[] str)
StringBuffer insert(int offset, double d)
StringBuffer insert(int offset, float f)
StringBuffer insert(int offset, int i)
StringBuffer insert(int offset, long l)
StringBuffer insert(int offset, Object obj)
StringBuffer insert(int offset, String str)
删除方法
StringBuffer delete(int start, int end)
StringBuffer deleteCharAt(int index)
其他方法
int capacity()  // 返回当前容量
char charAt(int index)  // 返回指定位置字符
StringBuffer reverse()  // 反转字符序列
void setCharAt(int index, char ch)  // 设置指定位置字符
void setLength(int newLength)  // 设置字符序列长度
String substring(int start)  // 返回子字符串
String substring(int start, int end)  // 返回指定范围子字符串
void trimToSize()  // 尝试减少存储空间
使用示例
StringBuffer sb = new StringBuffer();// 追加内容
sb.append("Hello");
sb.append(" ");
sb.append("World");// 插入内容
sb.insert(5, ",");// 删除内容
sb.delete(5, 6);// 替换字符
sb.setCharAt(4, '!');System.out.println(sb.toString()); // 输出: Hell! World

Date类

java.util.Date 类是 Java 中用于表示特定时间点的类,它存储的是自 1970年1月1日00:00:00 GMT (称为"纪元"或"Unix时间戳")以来的毫秒数。

类定义与特点
public class Dateimplements Serializable, Cloneable, Comparable<Date>

主要特点:

  • 表示时间:精确到毫秒级别
  • 可变的:Date对象创建后可以被修改(但大多数方法已废弃)
  • 大部分方法已过时:被 Calendar 和新的日期时间API (java.time) 取代
构造方法
构造方法描述
Date()创建一个表示当前时间的Date对象
Date(long date)根据指定的毫秒数创建Date对象
方法
获取时间
方法描述
long getTime()返回自1970年1月1日以来的毫秒数
int getYear()已废弃 - 使用Calendar或java.time
int getMonth()已废弃 - 使用Calendar或java.time
int getDate()已废弃 - 使用Calendar或java.time
设置时间
方法描述
void setTime(long time)设置Date对象的时间
void setYear(int year)已废弃
void setMonth(int month)已废弃
void setDate(int date)已废弃
比较方法
方法描述
boolean after(Date when)检查是否在指定日期之后
boolean before(Date when)检查是否在指定日期之前
int compareTo(Date anotherDate)比较两个日期的顺序

示例

package Test;import java.util.Date;public class Test1 {public static void main(String[] args) {//创建表示当前时间的Date对象Date date = new Date();System.out.println(date);//获取毫秒数long time = date.getTime();System.out.println( time);//创建表示指定毫秒数的Date对象Date date1 = new Date(time + 3600000);System.out.println(date1);//检查是否在指定日期之后System.out.println(date.after(date1));//检查是否在指定日期之前System.out.println(date.before(date1));//比较两个日期的顺序System.out.println(date.compareTo(date1));}
}

SimpleDateFormat类

SimpleDateFormat 是 Java 中用于格式化和解析日期时间的类,属于 java.text 包。它可以将 Date 对象格式化为特定模式的字符串,也可以将符合模式的字符串解析为 Date 对象。

类定义与特点
public class SimpleDateFormatextends DateFormat
  • 非线程安全:多个线程不能共享同一个 SimpleDateFormat 实例
  • 模式敏感:使用特定的模式字符串定义格式
  • 区域敏感:可以根据不同的 Locale 显示本地化的日期格式
常用模式字母
字母含义示例
yyyyy → 2023, yy → 23
MMM → 07, MMM → 七月(中文), MMMM → 七月(中文)
ddd → 15
H小时(0-23)HH → 14
h小时(1-12)hh → 02
m分钟mm → 30
sss → 45
S毫秒SSS → 789
E星期E → 周一(中文), EEEE → 星期一(中文)
a上午/下午a → 下午(中文)
构造方法
构造方法描述
SimpleDateFormat()使用默认模式和默认语言环境的日期格式
SimpleDateFormat(String pattern)使用给定模式和默认语言环境
SimpleDateFormat(String pattern, Locale locale)使用给定模式和指定语言环境
主要方法
格式化日期(Date -> String)
String format(Date date)
import java.text.SimpleDateFormat;
import java.util.Date;public class FormatExample {public static void main(String[] args) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String formatted = sdf.format(new Date());System.out.println("当前时间: " + formatted);// 输出示例: 当前时间: 2023-07-25 14:30:45}
}
解析日期(String -> Date)
Date parse(String source) throws ParseException
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;public class ParseExample {public static void main(String[] args) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");try {Date date = sdf.parse("2023/07/25");System.out.println("解析后的日期: " + date);} catch (ParseException e) {System.out.println("日期解析失败: " + e.getMessage());}}
}
其他方法
方法描述
void applyPattern(String pattern)应用新的日期模式
void setTimeZone(TimeZone zone)设置时区
void setLenient(boolean lenient)设置是否宽松解析(默认true)

Calendar类

Calendar 类是 Java 中用于处理日期和时间的抽象类,它提供了比 Date 类更丰富的日期操作功能。

基本介绍

Calendar 类位于 java.util 包中,是一个抽象类,不能直接实例化。通常使用其子类 GregorianCalendar 或通过 getInstance() 方法获取实例。

Calendar calendar = Calendar.getInstance(); // 获取当前日期时间的Calendar对象
方法
get()

获取日期时间字段

int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH); // 注意:月份从0开始(0-11)
int day = calendar.get(Calendar.DAY_OF_MONTH);
int hour = calendar.get(Calendar.HOUR_OF_DAY); // 24小时制
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
set()

设置日期时间

calendar.set(Calendar.YEAR, 2023);
calendar.set(Calendar.MONTH, Calendar.JANUARY); // 使用常量更安全
calendar.set(Calendar.DAY_OF_MONTH, 15);
add()

设置时间计算

calendar.add(Calendar.DAY_OF_MONTH, 5); // 加5天
calendar.add(Calendar.MONTH, -2); // 减2个月
getTimeInMillis()

获取时间戳

long timeInMillis = calendar.getTimeInMillis();
Date date = calendar.getTime();
常用常量
  • YEAR - 年
  • MONTH - 月 (0-11)
  • DAY_OF_MONTH - 月中的日
  • HOUR_OF_DAY - 24小时制的小时
  • MINUTE - 分钟
  • SECOND - 秒
  • MILLISECOND - 毫秒
  • DAY_OF_WEEK - 星期几 (周日=1, 周六=7)
  • WEEK_OF_YEAR - 年中的周数
注意事项
  1. 月份从0开始:1月是0,12月是11
  2. 线程不安全Calendar 不是线程安全的
  3. 时区问题:默认使用系统时区,可以设置时区
calendar.setTimeZone(TimeZone.getTimeZone("GMT+8:00"));

date = calendar.getTime();

#### 常用常量- `YEAR` - 年
- `MONTH` - 月 (0-11)
- `DAY_OF_MONTH` - 月中的日
- `HOUR_OF_DAY` - 24小时制的小时
- `MINUTE` - 分钟
- `SECOND` - 秒
- `MILLISECOND` - 毫秒
- `DAY_OF_WEEK` - 星期几 (周日=1, 周六=7)
- `WEEK_OF_YEAR` - 年中的周数#### 注意事项1. **月份从0开始**:1月是0,12月是11
2. **线程不安全**:`Calendar` 不是线程安全的
3. **时区问题**:默认使用系统时区,可以设置时区```java
calendar.setTimeZone(TimeZone.getTimeZone("GMT+8:00"));
http://www.lryc.cn/news/611984.html

相关文章:

  • QT----简单的htttp服务器与客户端
  • 主流linux版本分类与说明
  • 盲盒抽卡机小程序系统开发:打造个性化娱乐新平台
  • Web 端 AI 图像生成技术的应用与创新:虚拟背景与创意图像合成
  • Vite vs. vue-cli 创建 Vue 3 项目的区别与使用场景
  • [AI 生成] hive 面试题
  • 【debug】安装ComfyUI过程中的问题
  • C语言控制语句练习题2
  • 后端服务oom
  • Flutter桥接ArkTS技术指南(MethodChannel和BasicMessageChannel)
  • 高职5G移动网络运维实验(训)室解决方案
  • Cglib的Enhancer实现动态代理?
  • 网络资源模板--基于Android Studio 实现的拼图游戏App
  • Linux-Shell脚本流程控制
  • [linux] Linux系统中断机制详解及用户空间中断使用方法
  • Linux网络-------6.数据链路层
  • 昇思+昇腾开发板+DeepSeek模型推理和性能优化
  • 【注意】HCIE-Datacom华为数通考试,第四季度将变题!
  • 开发避坑指南(18): SpringBoot环境变量配置错误:占位符解析失败解决方案
  • Android UI 组件系列(十二):RecyclerView 嵌套及点击事件
  • git 清理submodule
  • 每日算法刷题Day57:8.6:leetcode 单调栈6道题,用时2h
  • K8S、Docker安全漏洞靶场
  • 实战 Seata:实现分布式事务解决方案
  • ORACLE进阶操作
  • 在NVIDIA Orin上用TensorRT对YOLO12进行多路加速并行推理时内存泄漏
  • 完整的登陆学生管理系统(配置数据库)
  • 电商支付异常测试全攻略
  • 013 HTTP篇
  • 秋招笔记-8.6