目录
String类/StringBuffer类/StringBuilder类
Object类
object类概述及其构造方法
object类概述
类层次结构的根类
所有类都直接或者间接的继承该类
构造方法
子类的构造方法默认访问的是父类的无参构造方法
public object()
Object类的成员方法
public int hashCode()
/* A:返回该对象的哈希码值。默认情况下,该方法会根据对象的地址来计算。
B:不同对象的,hashCode()一般来说不会相同。
但是,同一个对象的hashCode()值肯定相同。
C:不是对象的实际地址值,可以理解为逻辑地址值。
*/
public final Class getClass()
/* A:返回此 Object 的运行时类。
B:可以通过Class类中的一个方法,获取对象的真实类的全名称。
public String getName()*/
public String toString()
/* A:返回该对象的字符串表示。
底层源码。
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
B:它的值等于:
getClass().getName() + '@' + Integer.toHexString(hashCode())
C:由于默认情况下的数据对我们来说没有意义,一般建议重写该方法。
a:手动重写
b:自动生成
public boolean equals(Object obj)
/* A:指示其他某个对象是否与此对象“相等”。
B:默认情况下比较的是对象的引用是否相同。
C:由于比较对象的引用没有意义,一般建议重写该方法。
a:手动重写
b:自动生成
D:==和equals()区别
1. == 是操作符,对于基本类型变量的比较 == 比较,一般比较的是它们的值.
2.equals 是方法,对于引用类型的变量来说才有 equals 方法 ,equals 是 Object 类的通用方
法。
对于该类型对象的比较,默认情况下,也就是没有复写 Object 类的 equals 方法,使用 == 和
equals 比较是一样效果的,都是比较的是它们在内存中的存放地址。 */
protected void finalize()
/* A:当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。
B:垃圾回收器不会马上回收垃圾,但是我们可以建议它尽快回收垃圾。(System.gc()方法)
C:主要针对堆内存。*/
protected Object clone()
/*创建并返回此对象的一个副本,这种克隆机制十分高效,而且二者之间完全隔离。
自定义类实现克隆步骤:
A:自定义类实现Cloneable接口,这是一个标记性接口,实现这个接口的类的对象可以实现自我克隆。
B:自定义类中重写Object类的clone()方法。
C:重写clone()方法时通过super.clone()调用Object类的clone()方法来得到该对象的副本,并返回该副本。
注意:
A:克隆和两个引用指向同一个对象的区别?
B:Object类clone()方法虽然简单,易用,但仅仅是一种”浅克隆”,它只克隆该对象所有的Field值,不会
对引用类型的Field所引用的对象进行克隆。开发中,我们也可以实现对象的”深度克隆”*/
String类/StringBuffer类/StringBuilder类
String类概述及其构造方法
String类概述
字符串是由多个字符组成的一串数据(字符序列) 字符串可以看成是字符数组
构造方法
public String()
初始化一个新创建的
String
对象Stris s = new String ();
public String(byte[] bytes)
把一个字节数组转成字符串
byte [ ] bytes = {98 ,97 ,99 ,100};
String s = new String(bytes);
//输出的为bacd
public String(byte[] bytes,int offset,int length)
把一个字节数的一部分组转成字符串
byte [ ] bytes = {98 ,97 ,99 ,100};
String s = new String(bytes,1,2);
public String(char[] value)
把字符数组转成字符串
char [ ] value ={'我','爱','你','中','国'};
String s = new String (value);
public String(char[] value,int offset,int count)
把字符数组的一部分转成字符串
char [ ] value ={'我','爱','你','中','国'};
String s = new String (value,1,3);
public String(String original)
把字符串转转成字符串
String 类的特点
字符串是常量,它的值在创建之后不能更改 String s = “hello”; s += “world”; 问s的结果是多少?
A:针对字符串的特点,必须画内存图讲解。
B:new字符串和直接复制的区别也要画内存图讲解。
测试:
测试之前:说一下字符串中的equals()方法重写了Object()的方法,比较的是内容。
内容相同,引用不同。C:
String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1==s2);
System.out.println(s1.equals(s2));String s3 = new String("hello");
String s4 = "hello";System.out.println(s3==s4);
System.out.println(s3.equals(s4));
String s5 = "hello";
String s6 = "hello";
System.out.println(s5==s6);
System.out.println(s5.equals(s6));D:
String s1 = "hello";
String s2 = "world";
String s3 = "helloworld";
System.out.println(s3==s1+s2);
System.out.println(s3.equals(s1+s2));
还可以通过Xjad查看class文件。
String类的判断功能
boolean equals(Object obj)//判断两个字符串是否一致
String s = "asd123";
String ss = "asdf123";
System.out.println(s.equals(ss));
boolean equalsIgnoreCase(String str)//判断俩字符是否一致,忽略大小写
String s = "asd123";
String ss = "ASD123";
System.out.println(s.equalsIgnoreCase(ss));
boolean contains(String str)//判断是否包含指定字符串
String s = "asd123";
String s = "sdvhasd123asvkh2165";
System.out.println(s.contains(ss));
boolean startsWith(String str)//判断是否以某个字符串开始
String s = "asd123";
System.out.println(s.startsWith(a));
boolean endsWith(String str)//判断是否以某个字符串结束
String s = "asd123";
System.out.println(s.startsWith(3));
boolean isEmpty()//判断是否为空
String s = " ";
System.out.println(s.isEmpty());
String类的获取功能
int length()//获取字符串长度
String s = "asdfg";
System.out.println(s.length());
char charAt(int index)//通过索引获取指定位置的值
String s = "asdfg";
System.out.println(s.charAt(1));
int indexOf(int ch)//获取指定元素第一次出现的索引,如果没有返回负一
String s = "asdfg";
System.out.println(s.indexOf(1));
int indexOf(String str)//获取指定字符串第一次出现的索引,如果没有返回负一
String s = "asdfg";
System.out.println(s.indexOf("a"));
int indexOf(int ch,int fromIndex)//获取指定元素从指定位置开始第一次出现的索引
String s = "asdfgacsdkvabdskv";
System.out.println(s.indexOf(97,3));
int indexOf(String str,int fromIndex)//获取指定字符串从指定位置开始第一次出现的索引
String s = "asdfgacsdkvabdskv";
System.out.println(s.indexOf("a",1));
String substring(int start)//从指定位置开始截取字符串
String s = "asdfg";
System.out.println(s.substring(1));
String substring(int start,int end)//从指定位置开始截取字符串,到指定位置结束(包左不包右)
String s = "asdfg";
System.out.println(s.substring(1,4));
String类的转换功能
byte[] getBytes()//把一个字符串转成字节数组
har[] toCharArray()//将字符串转化为字符数组
String s = "我爱你中国";
byte[] bytes = s.getBytes();
for(int x=0;x< bytes.length;x++) {
System.out.println( bytes[x]);
}
char [] ch = s.toCharArray();
for(int i=0;i<ch.length;i++) {
System.out.println(ch[i]);
static String valueOf(char[] chs)//把字符数组转成字符串
char [] ch = {98, 97,96 95};
String s = String.valueOf(ch);
static String valueOf(int i)//把int类型数字转成字符串
String s = String.valueOf(561651);
String toLowerCase()//将字符串数据转换成小写
String toUpperCase()//将字符串数据转换成大写
String str = "HELLO world";
// 先切割为数组
String[] strArr = str.split(" ");
// 将数组中元素转换大小写并连接为一个新的字符串
String result = strArr[0].toLowerCase() + " " + strArr[1].toUpperCase();
System.out.println("字符串str的大小写互换后为:" + result);
String concat(String str)//
var str1 = '我爱你';
var str2 = '...';
var str3 = str1.concat(str2);
String类的其他功能
替换功能
String replace(char old,char new)
String replace(String old,String new)
例:
String s="helloworld";
System.out.println(s.replace('l','k'));
System.out.println(s.replace("hel","bbb"));
去除字符串两空格
String trim()
例:
String s=" hello world ";
System.out.println(s);
String s1=s.trim();
按字典顺序比较两个字符串
int compareTo(String str)
int compareToIgnoreCase(String str) // 按字典顺序比较两个字符串,不考虑大小写。
例:
String s="hello";
String s1="hella";
System.out.println(s.compareTo(s1));
StringBuffer类概述和构造方法
StringBuffer类概述 我们如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时,又浪费空间。而StringBuffer就可以解决这个问题.
StringBuffer 是线程安全的可变字符序列.
StringBuffer
与String
不同,它具有可变性。相较String
类不会产生大量无用数据,性能上会大大提高。构造方法
public StringBuffer()//构造一个空字符串生成器,初始容量为 16 个字符; public StringBuffer(int capacity)// 构造一个空字符串生成器,初始容量由参数 capacity 指定; public StringBuffer(String str)//构造初始化为指定字符串内容的字符串生成器。
StringBuffer类的成员方法
添加功能
public StringBuffer append(String str)//追加内容到当前 StringBuffer 对象的末尾,类似于字符串的连接。
public StringBuffer insert(int offset,String str)
例:
// 初始化一个内容为 Hello 的字符串生成器
StringBuilder str = new StringBuffer("Hello");
// 调用append()方法进行字符串的连接
str.append(" ");
str.append("World");
System.out.println(str);
//由于 append() 方法返回的是一个 StringBuffer类型,我们可以实现链式调用。例如,上述连续两个 append() 方法的调用语句,可以简化为一行语句:
str.append(" ").append("World");
删除功能
public StringBuffer deleteCharAt(int index)//用于移除序列中指定位置的字符
例:
StringBuffer 对象.deleteCharAt(int index);
StringBuffer s = new StringBuffer("She");
sb.deleteCharAt(1);
public StringBuffer delete(int start,int end)//删除指定位置的字符,然后将剩余的内容形成一个新的字符串
例:
StringBuffer 对象.delete(int start,int end);
StringBuffer s = new StringBuffer("hello World");
s.delete(3,5);
替换功能
public StringBuffer replace(int start,int end,String str)
例:
StringBuilder str = new StringBuffer("Hello World!");// 初始化一个内容为 Hello 的字符串生成器
str.replace(6, 11, "Java"); // 调用字符串替换方法,将 World 替换为 Java
System.out.println(str);// 打印替换后的字符串
反转功能
public StringBuffer reverse()
例:
StringBuffer str = new StringBuilder("Hello Java");
System.out.println("str" + str.reverse());
StringBuilder 概述
是可变字符序列,它是一个类似于 String 的字符串缓冲区
构造方法和成员方法参考StringBuffer类
String,StringBuffer和StringBuilder区别详解
①当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。②和 String 类不同的是,StringBuffer 和 StringBuilder类的对象能够被多次的修改,并且不产生新的未使用对象。
③StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。
④由于 StringBuilder 相较于 StringBuffer 有速度优势,多数情况下建议使用 StringBuilder类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。
(需要详细了解)原文链接:https://blog.csdn.net/weixin_45393094/article/details/104526603
数组高级和Arrays类
数组高级(排序和查找)
排序
冒泡排序 相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处
选择排序
从0索引开始,依次和后面元素比较,小的往前放,第一次完毕,最小值出现在了最小索引处 查找
(基本查找 数组元素无序
二分查找 数组元素有序)
小编不会/(ㄒoㄒ)/~~下面是小编找到的看一下吧
冒泡排序
//初始化需要排序的数组
int arr[] = {9,3,12,5,12,15};
//对需要排序的数组进行排序
for (int i=1; i<arr.length; i++){
//针对待排序序列中除了已经排序好的元素之外,重复排序工作
for(int j=0;j<arr.length-i;j++){
//当相邻两个元素需要交换时,交换相邻的两个元素
if(arr[j]>arr[j+1]){
int a = arr[j];
arr[j] = array[j+1];
arr[j+1] = a;
}
}
}
选择排序
//初始化需要排序的数组
int arr[] = {9,3,12,5,12,15};
//依次进行选择排序,每次找出最小的元素,放入待排序的序列中
for(int i=0;i<arr.length;i++){
//记录最小元素min和最小元素的数组下标索引minIndex
int min = array[i];
int minIndex = i;
//在未排序的序列中找出最小的元素和对应数组中的位置
for(int j=i+1;j<arr.length;j++){
if(arr[j] < min){
min = arr[j];
minIndex = j;
}
}
//交换位置
int a = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = a;
}
Arrays类概述及其常用方法
Arrays类概述 针对数组进行操作的工具类。 提供了排序,查找等功能。
成员方法 public static String toString(int[] a)
public static void sort(int[] a)
public static int binarySearch(int[] a,int key)
Arrays类的常用方法
http://t.csdn.cn/3E1mt懂( ̄︶ ̄)↗
基本类型包装类(Integer)
基本类型包装类概述
将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据。
常用的操作之一:用于基本数据类型与字符串之间的转换。 基本类型和包装类的对应 Byte,Short,Integer,Long,Float,Double Character,Boole
Integer类概述及其构造方法
Integer类概述 Integer 类在对象中包装了一个基本类型 int 的值 该类提供了多个方法,能在 int 类型和 String 类型之间互相转换,还提供了处理 int 类型时非常有用的其他一些常量和方法
构造方法
public Integer(int value)
public Integer(String s)
JDK5新特性
JDK1.5以后,简化了定义方式。 Integer x = new Integer(4);可以直接写成 Integer x = 4;//自动装箱。 x = x + 5;//自动拆箱。通过intValue方法。 需要注意: 在使用时,Integer x = null;上面的代码就会出现NullPointerException。
正则表达式(Pattern,Matcher)
正则表达式概述及基本使用
正则表达式:是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串,由一些普通字符和一些元字符组成。普通字符包括大小写的字母和数字,而元字符则具有特殊的含义。其实就是一种规则。有自己特殊的应用。
正则表达式的组成规则
常见组成规则 字符 字符类 预定义字符类 边界匹配器 数量词
正则表达式的应用
判断功能
public boolean matches(String regex)
例:
System.out.println("请输入QQ号");
String phone =sc.nextLine();
String regex ="[0-9]{10}";
boolean flag = phone.matches(regex);
分割功能
public String[] split(String regex)
替换功能
public String replaceAll(String regex,String replacement)
获取功能
Pattern和Matcher类的使用
例:https://www.cnblogs.com/
Math类/Random类/System类
Math类概述 Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。
成员方法
public static int abs(int a)//求绝对值
public static double ceil(double a)//向上取整
public static double floor(double a)//向下取整
public static int max(min)(int a,int b) //获取最大值和最小值
public static double pow(double a,double b)//取幂
public static double random()//获取0~1之间的随机数(大于等于0小于1)
public static int round(float a)//四舍五入
public static double sqrt(double a)//开平方
Random类概述及其构造方法
Random类概述
此类用于产生随机数 如果用相同的种子创建两个 Random 实例,则对每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列。
构造方法
public Random()//该构造方法使用一个和当前系统时间对应的数字作为种子数,然后使用这个种子数构造 Random 对象
public Random(long seed)//使用单个 long 类型的参数创建一个新的随机数生成器。
成员方法
public int nextInt() 返回下一个从随机发生器的系列中得到的均匀分布的整型值
public int nextInt(int n)返回下一个从随机发生器的系列中得到的均匀分布的0到指定整型数(n)之间的整型值。
System类概述及其成员方法
System类概述
System 类包含一些有用的类字段和方法。它不能被实例化。
System成员变量
InputStream in//标准输入流
PrintStream out//标准输出流
PrintStream err//标准的错误输出流
System成员方法
public static void gc()
//请求系统进行垃圾回收,完成内存中的垃圾清除
public static void gc()
public static void exit(int status)
//终止当前正在运行的 Java 虚拟机
例:
public static void exit(int status)//status 的值为 0 时表示正常退出,非零时表示异常退出
public static long currentTimeMillis()
//该方法的作用是返回当前的计算机时间,时间的格式为当前计算机时间与GMT时间(格林尼治时间)1970年1月 1日0时0分0秒所差的毫秒数
例:
long start = System.currentTimeMillis();
for(int i = 0;i < 100000000;i++) {
int temp = 0;
}
long end = System.currentTimeMillis();
long time = end - start;
System.out.println("程序执行时间" + time + "秒");
public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)
//数组复制,即从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束
//src 表示源数组,srcPos 表示从源数组中复制的起始位置,dest 表示目标数组,destPos 表示要复制到的目标数组的起始位置,length 表示复制的个数
例:
char[] s = {'G','J','L','M'};
char[] s1 = {'R','U','G','B'};
System.arraycopy(s,1,s1,1,2);
System.out.println("源数组:");
for(int i = 0;i < s.length;i++) {
System.out.println(s[i]);
}
System.out.println("目标数组:");
for(int j = 0;j < s1.length;j++) {
System.out.println(s1[j]);
}
注:
System.gc()可用于垃圾回收。当使用System.gc()回收某个对象所占用的内存之前,通过要求程序调用适当的方法来清理资源。在没有明确指定资源清理的情况下,Java提高了默认机制来清理该对象的资源,就是调用Object类的finalize()方法。finalize()方法的作用是释放一个对象占用的内存空间时,会被JVM调用。而子类重写该方法,就可以清理对象占用的资源,该方法有没有链式调用,所以必须手动实现。
从程序的运行结果可以发现,执行System.gc()前,系统会自动调用finalize()方法清除对象占有的资源,通过super.finalize()方式可以实现从下到上的finalize()方法的调用,即先释放自己的资源,再去释放父类的资源。
但是,不要在程序中频繁的调用垃圾回收,因为每一次执行垃圾回收,jvm都会强制启动垃圾回收器运行,这会耗费更多的系统资源,会与正常的Java程序运行争抢资源,只有在执行大量的对象的释放,才调用垃圾回收最好
Date类/DateFormat类/Calendar类
Date类概述及使用
Date类概述 类 Date 表示特定的瞬间,精确到毫秒。
Date 对象表示时间的默认顺序是星期、月、日、小时、分、秒、年。
构造方法
public Date()
例:
Date date = new Date();// 调用无参数构造函数
System.out.println(date.toString());// 输出:Thu Aug 11 14:06:27 CST 2022
public Date(long date)
例:
Date date = new Date(20000); // 调用含有一个long类型参数的构造函数
System.out.println(date); // 输出:Thu Jan 01 08:00:20 CST 1970
成员方法
boolean after(Date date)
//若当调用此方法的Date对象在指定日期之后返回true,否则返回false。
boolean before(Date date)
//若当调用此方法的Date对象在指定日期之前返回true,否则返回false。
Object clone( )
//返回此对象的副本。
int compareTo(Date date)
//比较当调用此方法的Date对象和指定日期。两者相等时候返回0。调用对象在指定日期之前则返回负数。调用对象在指定日期之后则返回正数。
int compareTo(Object obj)
//若obj是Date类型则操作等同于compareTo(Date) 。否则它抛出ClassCastException。
boolean equals(Object date)
//当调用此方法的Date对象和指定日期相等时候返回true,否则返回false。
int hashCode( )
//返回此对象的哈希码值。
long getTime( )
//返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
例: private static void demo03(){
Date date = new Date();
long time = date.getTime();
System.out.println(time)
void setTime(long time)
//用自1970年1月1日00:00:00 GMT以后time毫秒数设置时间和日期。
例子:
Date date = new Date();
date.setTime(6666);
System.out.println(time)
String toString( )
//把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。
例:
// 初始化 Date 对象
Date date = new Date();
// 使用 toString() 函数显示日期时间
System.out.println(date.toString());
DateFormat类概述及使用
DateFormat类概述
DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。 是抽象类,所以使用其子类SimpleDateFormat
SimpleDateFormat构造方法
public SimpleDateFormat()
public SimpleDateFormat(String pattern)
//用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat。
//参数pattern是一个字符串,代表日期时间的自定义格式
例子:
DateFormat mat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
成员方法
public final String format(Date date)
例:
Date date = new Date();
// 创建日期格式化对象,在获取格式化对象时可以指定风格
DateFormat df = new SimpleDateFormat("yyyy年MM月dd日");
String str = df.format(date);
System.out.println(str);
public Date parse(String source)
例:
DateFormat df = new SimpleDateFormat("yyyy年MM月dd日");
String str = "2018年12月11日";
Date date = df.parse(str);
System.out.println(date);
计算一个人出生了多少天
分析:将你的出生日和今天都封装到字符串里
将字符串转换成日期对象
将日期对象转换成毫秒值
让今天的毫秒值减去你出生那天的毫秒值
将毫秒值转换成天数
Calendar类概述及使用
Calendar类概述
Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。
成员方法
public static Calendar getInstance()
//使用默认时区和区域设置获取日历;
例:
//获取获取系统的当前日历对象
Calendar instance = Calendar.getInstance();
//1、获取今天是周几
int weekDay = instance.get(Calendar.DAY_OF_WEEK);
System.out.println("今天是周:" + (weekDay - 1));
//2、获取系统当前年
int year = instance.get(Calendar.YEAR);
System.out.println("今年是:" + year + "年");
//3、获取系统当前月
int month = instance.get(Calendar.MONTH);
System.out.println("本月是:" + (month + 1) + "月");
//4、获取系统当前日
int day = instance.get(Calendar.DATE);
System.out.println("今天是" + day + "号");
public int get(int field)
//返回给定日历字段的值;
例:
Calendar calendar = Calendar.getInstance();
// 获取今天是这一周的第几天
int i = calendar.get(Calendar.DAY_OF_WEEK);
// 获取今天是这一月的第几天
int i1 = calendar.get(Calendar.DAY_OF_MONTH);
// 获取今天是这一月的第几周
int i2 = calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH);
// 获取今天是这一年的第几天
int i3 = calendar.get(Calendar.DAY_OF_YEAR);
System.out.println("今天是这一周的第" + i + "天");
System.out.println("今天是这一月的第" + i1 + "天");
System.out.println("今天是这一月的第" + i2 + "周");
System.out.println("今天是这一年的第" + i3 + "天");
//获取月份,返回的值是从 0 开始的(0 ~ 11),依次表示 1 月到 12 月;获取一周的第 n 天,这里的返回值为 1~7,1 表示周日,2 表示周一,以此类推。
public void add(int field,int amount)
//根据日历的规则,为给定的日历字段添加或减去指定的时间量。
例:
System.out.println("------------Calendar和Date转换------------");
Date now = calendar.getTime();
calendar.setTime(now);
System.out.println("------------Calendar日期计算以及判断------------");
calendar = new GregorianCalendar();
Calendar calendar2 = new GregorianCalendar();
calendar2.set(Calendar.YEAR, 2800);
//是否在某个时间(calendar2)之后
System.out.println(calendar.after(calendar2));
//是否在某个时间(calendar2)之前
System.out.println(calendar.before(calendar2));
//增加多少年年,月日以及时分秒同理
calendar.add(Calendar.YEAR, -10);
此例:原文链接:https://blog.csdn.net/nsnydnz/article/details/118724078
public final void set(int year,int month,int date)
//将给定的日历字段设置为给定值。
例:
Calendar calendar = Calendar.getInstance();
// 设置2022年:
calendar.set(Calendar.YEAR, 2022);
// 设置8月
calendar.set(Calendar.MONTH, 7);
// 设置11日:
calendar.set(Calendar.DATE, 11);
// 设置时间:
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
System.out.println(calendar.getTime().toString());