Java常用类

文章目录

    • 包装类(Wrapper)
      • 包装类的继承体系
      • 装箱和拆箱
      • 包装类与String类型的相互转换
    • String类
      • 创建 String 对象的两种方式
      • String 类的常见方法
        • 案例演示
    • StringBuffer类
      • 类的继承体系
      • String VS StringBuffer
      • StringBuffer构造器
      • String 和 StringBuffer 相互转换
      • StringBuffer 类常见方法
    • StringBuilder类
      • 继承体系
      • String、StringBuffer 和 StringBuilder 的比较
      • String、StringBuffer 和 StringBuilder 的效率比较
      • String、StringBuffer 和 StringBuilder 的使用选择
    • Math类
      • 常用方法
        • 案例演示
    • Arrays类
      • 常用方法
        • 案例演示
    • System类
      • 常用方法
      • 案例演示
    • BigInteger类和BigDecimal类
      • 常见方法
      • 案例演示
    • Data类
      • 第一代日期类
      • 第二代日期类
      • 第三代日期类
      • DateTimeFormatter 格式日期类
      • Instant 时间戳

温馨提示:师从韩顺平老师

包装类(Wrapper)

  • 针对八种基本定义相应的引用类型(数据类型)----包装类

  • 有了类的特点,就可以调用类中的方法

    基本数据类型包装类
    booleanBoolean
    charCharacter
    byteByte
    shortShort
    intInteger
    longLong
    floatFloat
    doubleDouble

包装类的继承体系

在这里插入图片描述

在这里插入图片描述

装箱和拆箱

装箱:基本类型------>包装类型

拆箱:包装类型------>基本类型

  • jdk 5前,手动装箱和拆箱

    public class demo01 {public static void main(String[] args) {//手动装箱 int ---> Integerint n1 = 100;Integer integer = new Integer(n1);Integer integer1 = Integer.valueOf(n1);//手动开箱 Integer ---> intint i = integer.intValue();}
    }
    
  • jdk 5 (包含)之后的自动装箱和拆箱方式

    • 自动装箱底层调用的是valueOf方法,比如Integer.valueOf()

      public class demo01 {public static void main(String[] args) {//手动装箱 int ---> Integerint n1 = 100;Integer integer = n1;//手动开箱 Integer ---> intint n2 = integer;}
      }
      

包装类与String类型的相互转换

public class demo01 {public static void main(String[] args) {//包装类(Integer)-->StringInteger i = 100;  //自动装箱//方式1String str1 = i + "";   // i的值和类型不变//方式二String str2 = i.toString();//方式三String str3 = String.valueOf(i);//String---->包装类(Integer)String str4 = "12345";//方式一Integer i2 = Integer.parseInt(str4);  //其中,也使用到了自动装箱//方式二Integer i1 = new Integer(str4);  //构造器}
}

String类

  • String对象用于保存字符串,也就是一组字符序列

  • 字符串常量对象是用双引号括起来的字符序列,例如:“你好”、“12.97”、"boy"等

  • 字符串的字符使用Unicode字符编码,一个字符(不区分字母还是汉字)占两个字节

  • String类比较常用的构造器

    • String s1 = new String();
    • String s2 = new String(String original);
    • String s3 = new String(char[] a);
    • String s4 = new String(char[] a, int startIndex , int count);
  • String是final类,不能被其它类继承

  • String中有属性private final char value[]; 用于存放字符串内容(*注意:*value是一个final 类型,不可以修改,这里的不可被修改指的是,地址,而不是内容)

String 可以串行化:可以在网络传输
在这里插入图片描述

创建 String 对象的两种方式

  • 直接赋值

    String s = "hello";
    

    原理:先从常量池查看是否有"hello"数据空间,如果有,直接指向;如果没有则重新创建,然后指向。s最终指向的是常量池的空间地址。

  • 调用构造器

    String s2 = new String("hello");
    

    原理:先在堆中创建空间,里面维护了value属性,指向常量池的hsp空间。如果常量池没有"hello",重新创建,如果有,直接通过value指向。最终指向的是堆中的空间地址。

  • 内存空间中的存在形式

在这里插入图片描述

String 类的常见方法

String 类是保存字符串常量的。每次更新都需要重新开辟空间,效率较低,因此java设计者还提供了StringBuilderStringBuffer来增加String的功能,提高效率

在这里插入图片描述

案例演示
package 常用类;/*** @Author: 韩如意* @CreateTime: 2025-01-12* @De![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/1a460510ab044cc9887f09168f79b60f.png)
scription: no* @Version: 1.0*/public class demo01 {public static void main(String[] args) {// 1. equals 前面已经讲过了String str1 = "hello";String str2 = "Hello";System.out.println(str1.equals(str2));   //flase// 2. equalsIgnoreCase  忽略大小写的判断内容是否相等String username = "JOHN";if("john".equalsIgnoreCase(username)){System.out.println("Success!");   //输出这个}else {System.out.println("Failure!");}//3. 获取字符的个数,字符串的长度System.out.println("韩顺平".length()); //3//4. indexOf 获取字符在字符串对象中第一次出现的索引,索引从 0 开始,如果找不到,返回-1String s1 = "wer@terwe@g";int index = s1.indexOf('@');System.out.println(index); // 3//5. lastIndexOf 获取字符在字符串中最后一次出现的索引,索引从 0 开始,如果找不到,返回-1s1 = "wer@terwe@g@";index = s1.lastIndexOf('@');System.out.println(index);//11System.out.println("ter 的位置=" + s1.lastIndexOf("ter"));//4//6. substring 截取指定范围的子串String name = "hello,张三";//下面 name.substring(6) 从索引 6 开始截取后面所有的内容System.out.println(name.substring(6));//张三//name.substring(0,5)表示从索引 0 开始截取,截取到索引 5-1=4 位置System.out.println(name.substring(0,5)); //hello//7. toUpperCase 转换成大写String s = "heLLo";System.out.println(s.toUpperCase());//HELLO//8. toLowerCase转换成小写System.out.println(s.toLowerCase());//hello//9. concat 拼接字符串String s11 = "宝玉";s11 = s11.concat("林黛玉").concat("薛宝钗").concat("together");System.out.println(s11);//宝玉林黛玉薛宝钗 together//10. replace 替换字符串中的字符s1 = "宝玉 and 林黛玉 林黛玉 林黛玉";//在 s1 中,将 所有的 林黛玉 替换成薛宝钗// 解读 : s1.replace() 方法执行后,返回的结果才是替换过的. // 注意对 s1 没有任何影响String s111 = s1.replace("宝玉", "jack");System.out.println(s1);//宝玉 and 林黛玉 林黛玉 林黛玉System.out.println(s111);//jack and 林黛玉 林黛玉 林黛玉//11. split 分割字符串, 对于某些分割字符,我们需要 转义比如 | \\等String poem = "锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆辛苦";//在对字符串进行分割时,如果有特殊字符,需要加入 转义符 \ ,注意:每一个\后面的都是转义字符String[] split = poem.split(",");  //以 , 为标准对 poem 进行分割 , 返回一个数组poem = "E:\\aaa\\bbb";  //对一个文件名以\\进行分割,需要加转义字符\split = poem.split("\\\\");System.out.println("==分割后内容===");for (int i = 0; i < split.length; i++) {System.out.println(split[i]);}/*==分割后内容===E:aaabbb*///12. toCharArray 转换成字符数组s = "happy";char[] chs = s.toCharArray();for (int i = 0; i < chs.length; i++) {System.out.println(chs[i]);}/*happy*///13. compareTo 比较两个字符串的大小,如果前者大,// 则返回正数,后者大,则返回负数,如果相等,返回 0// 解读// (1) 如果长度相同,并且每个字符也相同,就返回 0// (2) 如果长度相同或者不相同,但是在进行比较时,可以区分大小,注意c1 c2 指的是字符// 就返回 if (c1 != c2) {// return c1 - c2;// }// (3) 如果前面的部分都相同,就返回 str1.len - str2.lenString a = "ja";// len = 2String b = "jack";// len = 4System.out.println(a.compareTo(b)); // 返回值是 len(2) - len(4) = -2//14. format 格式字符串/* 占位符有:* %s 字符串 %c 字符 %d 整型 %.2f 浮点型**/String name1 = "john";int age = 10;double score = 56.857;char gender = '男';//将所有的信息都拼接在一个字符串.String info = "我的姓名是" + name1 + "年龄是" + age + ",成绩是" + score + "性别是" + gender + "。希望大家喜欢我! ";System.out.println(info);    //我的姓名是john年龄是10,成绩是56.857性别是男。希望大家喜欢我!//解读//1. %s , %d , %.2f %c 称为占位符//2. 这些占位符由后面变量来替换//3. %s 表示后面由 字符串来替换//4. %d 是整数来替换//5. %.2f 表示使用小数来替换,替换后,只会保留小数点两位, 并且进行四舍五入的处理//6. %c 使用 char 类型来替换String formatStr = "我的姓名是%s 年龄是%d,成绩是%.2f 性别是%c.希望大家喜欢我!";String info2 = String.format(formatStr, name1, age, score, gender);System.out.println("info2=" + info2);  //info2=我的姓名是john 年龄是10,成绩是56.86 性别是男.希望大家喜欢我!}
}

StringBuffer类

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/在这里插入图片描述

类的继承体系

在这里插入图片描述

  1. StringBuffer 的直接父类 是 AbstractStringBuilder

  2. StringBuffer 实现了 Serializable, 即 StringBuffer 的对象可以串行化

  3. 在父类中 AbstractStringBuilder 有属性 char[] value,不是 final ,该 value 数组存放 字符串内容,引出存放在堆中的。常量池中存放常量

  4. StringBuffer 是一个 final 类,不能被继承

  5. 因为 StringBuffer 字符内容是存在 char[] value, 所有在变化(增加/删除)

不用每次都更换地址(即不是每次创建新对象), 所以效率高于 String

String VS StringBuffer

在这里插入图片描述

StringBuffer构造器

package 常用类;
/*** @Author: 韩如意* @CreateTime: 2025-01-20* @Description: no* @Version: 1.0*/
public class demo02 {public static void main(String[] args) {//构造器//1. 创建一个大小为16的char[],用于存放字符的内容StringBuffer stringBuffer = new StringBuffer();//2. 通过构造器指定char[]大小StringBuffer stringBuffer1 = new StringBuffer(100);//3. 通过给一个String创建StringBuffer,char 数组大小就是str.length+16StringBuffer stringBuffer2 = new StringBuffer("hello");}
}

String 和 StringBuffer 相互转换

package 常用类;
public class demo03 {public static void main(String[] args) {//看 String——>StringBufferString str = "hello tom";//方式 1 使用构造器//注意: 返回的才是 StringBuffer 对象,对 str 本身没有影响StringBuffer stringBuffer = new StringBuffer(str);//方式 2 使用的是 append 方法StringBuffer stringBuffer1 = new StringBuffer();stringBuffer1 = stringBuffer1.append(str);//看看 StringBuffer ->StringStringBuffer stringBuffer3 = new StringBuffer("韩顺平教育");//方式 1 使用 StringBuffer 提供的 toString 方法String s = stringBuffer3.toString();//方式 2: 使用构造器来搞定String s1 = new String(stringBuffer3);}
}

StringBuffer 类常见方法

package 常用类;
/*** @Author: 韩如意* @CreateTime: 2025-01-12* @Description: no* @Version: 1.0*/
public class demo01 {public static void main(String[] args) {StringBuffer s = new StringBuffer("hello");//增s.append(',');// "hello,"s.append("张三丰");//"hello,张三丰"s.append("赵敏").append(100).append(true).append(10.5);//"hello,张三丰赵敏 100true10.5" System.out.println(s);//"hello,张三丰赵敏 100true10.5"//删/** 删除索引为>=start && <end 处的字符* 解读: 删除 11~14 的字符 [11, 14)*/s.delete(11, 14);System.out.println(s);//"hello,张三丰赵敏 true10.5"//改//解读,使用 周芷若 替换 索引 9-11 的字符 [9,11)s.replace(9, 11, "周芷若");System.out.println(s);//"hello,张三丰周芷若 true10.5"//查找指定的子串在字符串第一次出现的索引,如果找不到返回-1int indexOf = s.indexOf("张三丰");System.out.println(indexOf);//6//插//解读,在索引为 9 的位置插入 "赵敏",原来索引为 9 的内容自动后移s.insert(9, "赵敏");System.out.println(s);//"hello,张三丰赵敏周芷若 true10.5"//长度System.out.println(s.length());//22System.out.println(s);}
}

StringBuilder类

单线程优先采用该类0

在这里插入图片描述

继承体系

在这里插入图片描述

  1. StringBuilder 继承 AbstractStringBuilder 类

  2. 实现了 Serializable ,说明 StringBuilder 对象是可以串行化(对象可以网络传输,可以保存到文件)

  3. StringBuilder 是 final 类, 不能被继承

  4. StringBuilder 对象字符序列仍然是存放在其父类 AbstractStringBuilder 的 char[] value;

    因此,字符序列是堆中

  5. StringBuilder 的方法,没有做互斥的处理,即没有 synchronized 关键字,因此在单线程的情况下使用

String、StringBuffer 和 StringBuilder 的比较

在这里插入图片描述

String、StringBuffer 和 StringBuilder 的效率比较

效率 : StringBuilder > StringBuffer > Stri

String、StringBuffer 和 StringBuilder 的使用选择

在这里插入图片描述

Math类

Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数

常用方法

方法都是静态的

在这里插入图片描述

在这里插入图片描述

案例演示
package 常用类;
/*** @Author: 韩如意* @CreateTime: 2025-01-25* @Description: no* @Version: 1.0*/
public class demo05 {public static void main(String[] args) {//看看 Math 常用的方法(静态方法)//1.abs 绝对值int abs = Math.abs(-9);System.out.println(abs);//9//2.pow 求幂double pow = Math.pow(2, 4);//2 的 4 次方System.out.println(pow);//16//3.ceil 向上取整,返回>=该参数的最小整数(转成 double);double ceil = Math.ceil(3.9);System.out.println(ceil);//4.0//4.floor 向下取整,返回<=该参数的最大整数(转成 double)double floor = Math.floor(4.001);System.out.println(floor);//4.0//5.round 四舍五入 Math.floor(该参数+0.5)long round = Math.round(5.51);System.out.println(round);//6//6.sqrt 求开方double sqrt = Math.sqrt(9.0);System.out.println(sqrt);//3.0//7.random 求随机数// random 返回的是 0 <= x < 1 之间的一个随机小数// 思考:请写出获取 a-b 之间的一个随机整数,a,b 均为整数 ,比如 a = 2, b=7// 即返回一个数 x 2 <= x <= 7// 解读 Math.random() * (b-a) 返回的就是 0 <= 数 <= b-a// (1) (int)(a) <= x <= (int)(a + Math.random() * (b-a +1) )// (2) 使用具体的数给小伙伴介绍 a = 2 b = 7// (int)(a + Math.random() * (b-a +1) ) = (int)( 2 + Math.random()*6)// Math.random()*6 返回的是 0 <= x < 6 小数// 2 + Math.random()*6 返回的就是 2<= x < 8 小数// (int)(2 + Math.random()*6) = 2 <= x <= 7// (3) 公式就是 (int)(a + Math.random() * (b-a +1) )for(int i = 0; i < 100; i++) {System.out.println((int)(2 + Math.random() * (7 - 2 + 1)));}//max , min 返回最大值和最小值int min = Math.min(1, 9);int max = Math.max(45, 90);System.out.println("min=" + min);System.out.println("max=" + max);}
}

Arrays类

常用方法

在这里插入图片描述

案例演示
package 常用类;import java.util.Arrays;
import java.util.List;/*** @Author: 韩如意* @CreateTime: 2025-01-28* @Description: no* @Version: 1.0*/public class demo07 {public static void main(String[] args) {Integer[] integers = {1, 20, 90};//遍历数组// for(int i = 0; i < integers.length; i++) {// System.out.println(integers[i]);// }//1. 直接使用 Arrays.toString 方法,显示数组System.out.println(Arrays.toString(integers));//[1,20,90]//2. 演示 sort 方法的使用Integer arr[] = {1, -1, 7, 0, 89};Arrays.sort(arr);System.out.println(Arrays.toString(arr)); //[-1, 0, 1, 7, 89]//3. binarySearch 通过二分搜索法进行查找,要求必须排好// 解读//3.1 使用 binarySearch 二叉查找//3.2 要求该数组是有序的. 如果该数组是无序的,不能使用 binarySearch//3.3如果数组中不存在该元素,就返回 return -(low + 1); // key not found. int index = Arrays.binarySearch(arr, 567);int index = Arrays.binarySearch(arr, 1);System.out.println("index=" + index);  //2//4. copyOf 数组元素的复制// 解读//4.1. 从 arr 数组中,拷贝 arr.length-1 个元素到 newArr 数组中//4.2. 如果拷贝的长度 > arr.length 就在新数组的后面 增加 null//4.3. 如果拷贝长度 < 0 就抛出异常 NegativeArraySizeException//4.4. 该方法的底层使用的是 System.arraycopy()Integer[] newArr = Arrays.copyOf(arr, arr.length-1);System.out.println("==拷贝执行完毕后==");System.out.println(Arrays.toString(newArr));  //[-1, 0, 1, 7]//5. ill 数组元素的填充Integer[] num = new Integer[]{9,3,2};//解读//5.1. 使用 99 去填充 num 数组,可以理解成是替换原来的元素Arrays.fill(num, 99);System.out.println("==num 数组填充后==");System.out.println(Arrays.toString(num));  //[99, 99, 99]//6. equals 比较两个数组元素内容是否完全一致Integer[] arr2 = {1, 2, 90, 123};//解读//6.1. 如果 arr 和 arr2 数组的元素一样,则方法 true;//6.2. 如果不是完全一样,就返回 falseboolean equals = Arrays.equals(arr, arr2); System.out.println("equals=" + equals); // equals=false//7. asList 将一组值,转换成 list//解读//7.1. asList 方法,会将 (2,3,4,5,6,1)数据转成一个 List 集合//7.2. 返回的 asList 编译类型 List(接口)//7.3. asList 运行类型 java.util.Arrays#ArrayList, 是 Arrays 类的// 静态内部类 private static class ArrayList<E> extends AbstractList<E>// implements RandomAccess, java.io.SerializableList asList = Arrays.asList(2,3,4,5,6,1);System.out.println("asList=" + asList);  //asList=[2, 3, 4, 5, 6, 1]System.out.println("asList 的运行类型" + asList.getClass());//asList 的运行类型class java.util.Arrays$ArrayList}
}

System类

常用方法

在这里插入图片描述

案例演示

package 常用类;
import java.util.Arrays;
/*** @Author: 韩如意* @CreateTime: 2025-01-31* @Description: no* @Version: 1.0*/
public class demo09 {public static void main(String[] args) {//1. exit 退出当前程序System.out.println("ok1");// 解读// //1.1. exit(0) 表示程序退出// //1.2. 0 表示一个状态 , 正常的状态System.exit(0);//System.out.println("ok2");//2. arraycopy :复制数组元素,比较适合底层调用,// 一般使用 Arrays.copyOf 完成复制数组int[] src = {1, 2, 3};int[] dest = new int[3];// dest 当前是 {0,0,0}//解读//2.1. 主要是搞清楚这五个参数的含义//2.2. // 源数组// * @param src the source array. // srcPos: 从源数组的哪个索引位置开始拷贝// * @param srcPos starting position in the source array. // dest : 目标数组,即把源数组的数据拷贝到哪个数组// * @param dest the destination array. // destPos: 把源数组的数据拷贝到 目标数组的哪个索引// * @param destPos starting position in the destination data. // length: 从源数组拷贝多少个数据到目标数组// * @param length the number of array elements to be copied. System.arraycopy(src, 0, dest, 0, src.length);// int[] src={1,2,3};System.out.println("dest=" + Arrays.toString(dest));//[1, 2, 3]//currentTimeMillens:返回当前时间距离 1970-1-1 的毫秒数// 解读:System.out.println(System.currentTimeMillis());  //1738323862465}
}

BigInteger类和BigDecimal类

在这里插入图片描述

常见方法

在这里插入图片描述

案例演示

package 常用类;import java.math.BigInteger;/*** @Author: 韩如意* @CreateTime: 2025-01-31* @Description: no* @Version: 1.0*/public class demo10 {public static void main(String[] args) {//可以使用 BigInteger 的类来搞定
// long l = 23788888899999999999999999999l;
// System.out.println("l=" + l);BigInteger bigInteger = new BigInteger("23788888899999999999999999999");BigInteger bigInteger2 = new BigInteger("10099999999999999999999999999999999999999999999999999999999999999999999999999999999");System.out.println(bigInteger);  //23788888899999999999999999999
//解读
//1. 在对 BigInteger 进行加减乘除的时候,需要使用对应的方法,不能直接进行 + - * /
//2. 可以创建一个 要操作的 BigInteger 然后进行相应操作BigInteger add = bigInteger.add(bigInteger2);System.out.println(add);// 10100000000000000000000000000000000000000000000000000023788888899999999999999999998BigInteger subtract = bigInteger.subtract(bigInteger2);System.out.println(subtract);//减  -10099999999999999999999999999999999999999999999999999976211111100000000000000000000BigInteger multiply = bigInteger.multiply(bigInteger2);System.out.println(multiply);//乘  240267777889999999999999999989899999999999999999999999999999999999999999999999999976211111100000000000000000001BigInteger divide = bigInteger.divide(bigInteger2);System.out.println(divide);//除  0}
}
package 常用类;import java.math.BigDecimal;/*** @Author: 韩如意* @CreateTime: 2025-01-31* @Description: no* @Version: 1.0*/public class demo11 {public static void main(String[] args) {
//当我们需要保存一个精度很高的数时,double 不够用
//可以是 BigDecimal
// double d = 1999.11111111111999999999999977788d;
// System.out.println(d);BigDecimal bigDecimal = new BigDecimal("1999.11");BigDecimal bigDecimal2 = new BigDecimal("3");System.out.println(bigDecimal);  //1999.11
//解读
//1. 如果对 BigDecimal 进行运算,比如加减乘除,需要使用对应的方法
//2. 创建一个需要操作的 BigDecimal 然后调用相应的方法即可System.out.println(bigDecimal.add(bigDecimal2));  //2002.11System.out.println(bigDecimal.subtract(bigDecimal2));  //1996.11System.out.println(bigDecimal.multiply(bigDecimal2));  //5997.33
//System.out.println(bigDecimal.divide(bigDecimal2));//可能抛出异常 ArithmeticException
//在调用 divide 方法时,指定精度即可. BigDecimal.ROUND_CEILING
//如果有无限循环小数,就会保留 分子 的精度System.out.println(bigDecimal.divide(bigDecimal2, BigDecimal.ROUND_CEILING));  //666.37}
}

Data类

第一代日期类

在这里插入图片描述

public class demo12 {public static void main(String[] args) throws ParseException {//解读
//1. 获取当前系统时间
//2. 这里的 Date 类是在 java.util 包
//3. 默认输出的日期格式是国外的方式, 因此通常需要对格式进行转换Date d1 = new Date(); //获取当前系统时间  System.out.println("当前日期=" + d1);  //当前日期=Fri Jan 31 20:16:42 CST 2025Date d2 = new Date(9234567); //通过指定毫秒数得到时间System.out.println("d2=" + d2); //获取某个时间对应的毫秒数  //d2=Thu Jan 01 10:33:54 CST 1970
//
//解读
//1. 创建 SimpleDateFormat 对象,可以指定相应的格式
//2. 这里的格式使用的字母是规定好,不能乱写SimpleDateFormat sdf = new SimpleDateFormat("yyyy 年 MM 月 dd 日 hh:mm:ss E");String format = sdf.format(d1); // format:将日期转换成指定格式的字符串System.out.println("当前日期=" + format);  //当前日期=2025 年 01 月 31 日 08:16:42 周五
//解读
//1. 可以把一个格式化的 String 转成对应的 Date
//2. 得到 Date 仍然在输出时,还是按照国外的形式,如果希望指定格式输出,需要转换
//3. 在把 String -> Date , 使用的 sdf 格式需要和你给的 String 的格式一样,否则会抛出转换异常String s = "1996 年 01 月 01 日 10:20:30 星期一";Date parse = sdf.parse(s);System.out.println("parse=" + sdf.format(parse));  //parse=1996 年 01 月 01 日 10:20:30 周一}
}

第二代日期类

在这里插入图片描述

package 常用类;import java.util.Calendar;/*** @Author: 韩如意* @CreateTime: 2025-02-04* @Description:* @Version: 1.0*/public class demo {public static void main(String[] args) {
//解读
//1. Calendar 是一个抽象类, 并且构造器是 private
//2. 可以通过 getInstance() 来获取实例
//3. 提供大量的方法和字段提供给程序员
//4. Calendar 没有提供对应的格式化的类,因此需要程序员自己组合来输出(灵活)
//5. 如果我们需要按照 24 小时进制来获取时间, Calendar.HOUR ==改成=> Calendar.HOUR_OF_DAYCalendar c = Calendar.getInstance(); //创建日历类对象//比较简单,自由System.out.println("c=" + c);  // c=java.util.GregorianCalendar[time=1738669153637,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=31,lastRule=null],firstDayOfWeek=2,minimalDaysInFirstWeek=1,ERA=1,YEAR=2025,MONTH=1,WEEK_OF_YEAR=6,WEEK_OF_MONTH=2,DAY_OF_MONTH=4,DAY_OF_YEAR=35,DAY_OF_WEEK=3,DAY_OF_WEEK_IN_MONTH=1,AM_PM=1,HOUR=7,HOUR_OF_DAY=19,MINUTE=39,SECOND=13,MILLISECOND=637,ZONE_OFFSET=28800000,DST_OFFSET=0]//2.获取日历对象的某个日历字段System.out.println("年:" + c.get(Calendar.YEAR));//年:2025// 这里为什么要 + 1, 因为 Calendar 返回月时候,是按照 0 开始编号System.out.println("月:" + (c.get(Calendar.MONTH) + 1));//月:2System.out.println("日:" + c.get(Calendar.DAY_OF_MONTH));//日:4System.out.println("小时:" + c.get(Calendar.HOUR));//小时:7System.out.println("分钟:" + c.get(Calendar.MINUTE));//分钟:39System.out.println("秒:" + c.get(Calendar.SECOND));//秒:13
//Calender 没有专门的格式化方法,所以需要程序员自己来组合显示System.out.println(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" +c.get(Calendar.DAY_OF_MONTH) +" " + c.get(Calendar.HOUR_OF_DAY) + ":" + c.get(Calendar.MINUTE) + ":" + c.get(Calendar.SECOND));//2025-2-4 19:3![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/15cf50b4f16d47078e82b7838304fe42.png)
9:13}
}

第三代日期类

在这里插入图片描述

package 常用类;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;/*** @Author: 韩如意* @CreateTime: 2025-02-05* @Description: no* @Version: 1.0*/public class demo13 {public static void main(String[] args) {
//第三代日期
//解读
//1. 使用 now() 返回表示当前日期时间的 对象LocalDateTime ldt = LocalDateTime.now(); //LocalDate.now();//LocalTime.now()System.out.println(ldt);  //2025-02-05T18:40:39.001049200
//2. 使用 DateTimeFormatter 对象来进行格式化
// 创建 DateTimeFormatter 对象DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");String format = dateTimeFormatter.format(ldt);System.out.println("格式化的日期=" + format);  //格式化的日期=2025-02-05 18:40:39System.out.println("年=" + ldt.getYear());//年=2025System.out.println("月=" + ldt.getMonth());//月=FEBRUARYSystem.out.println("月=" + ldt.getMonthValue());//月=2System.out.println("日=" + ldt.getDayOfMonth());//日=5System.out.println("时=" + ldt.getHour());//时=18System.out.println("分=" + ldt.getMinute());//分=40System.out.println("秒=" + ldt.getSecond());//秒=39LocalDate now = LocalDate.now(); //可以获取年月日LocalTime now2 = LocalTime.now();//获取到时分秒
//提供 plus 和 minus 方法可以对当前时间进行加或者减
//看看 890 天后,是什么时候 把 年月日-时分秒LocalDateTime localDateTime = ldt.plusDays(890);System.out.println("890 天后=" + dateTimeFormatter.format(localDateTime));//890 天后=2027-07-15 18:40:39
//看看在 3456 分钟前是什么时候,把 年月日-时分秒输出LocalDateTime localDateTime2 = ldt.minusMinutes(3456);System.out.println("3456 分钟前 日期=" + dateTimeFormatter.format(localDateTime2)); //3456 分钟前 日期=2025-02-03 09:04:39}
}

DateTimeFormatter 格式日期类

在这里插入图片描述

Instant 时间戳

在这里插入图片描述

package 常用类;import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
public class demo13 {public static void main(String[] args) {
//1.通过 静态方法 now() 获取表示当前时间戳的对象Instant now = Instant.now();System.out.println(now);  //2025-02-05T11:17:42.493980500Z
//2. 通过 from 可以把 Instant 转成 DateDate date = Date.from(now);
//3. 通过 date 的 toInstant() 可以把 date 转成 Instant 对象Instant instant = date.toInstant();}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/13295.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法设计与分析三级项目--管道铺设系统

摘 要 该项目使用c算法逻辑&#xff0c;开发环境为VS2022&#xff0c;旨在通过Prim算法优化建筑物间的连接路径&#xff0c;以支持管线铺设规划。可以读取文本文件中的建筑物名称和距离的信息&#xff0c;并计算出建筑物之间的最短连接路径和总路径长度&#xff0c;同时以利用…

【C语言系列】深入理解指针(5)

深入理解指针&#xff08;5&#xff09; 一、sizeof和strlen的对比1.1sizeof1.2strlen1.3sizeof和strlen的对比 二、数组和指针笔试题解析2.1 一维数组2.2 字符数组2.2.1代码1&#xff1a;2.2.2代码2&#xff1a;2.2.3代码3&#xff1a;2.2.4代码4&#xff1a;2.2.5代码5&#…

设计模式——策略模式

设计模式——策略模式 简单介绍一个例子 策略模式是设计模式里面比较简单的设计模式&#xff0c;其特点简单又实用&#xff0c;并且可以让你的代码看起来高大上&#xff0c;维护代码时还方便扩张 多重条件语句不易维护&#xff0c;而使用策略模式可以避免使用多重条件语句&…

【玩转 Postman 接口测试与开发2_018】第14章:利用 Postman 初探 API 安全测试

《API Testing and Development with Postman》最新第二版封面 文章目录 第十四章 API 安全测试1 OWASP API 安全清单1.1 相关背景1.2 OWASP API 安全清单1.3 认证与授权1.4 破防的对象级授权&#xff08;Broken object-level authorization&#xff09;1.5 破防的属性级授权&a…

MySQL的 MVCC详解

MVCC是多版本并发控制&#xff0c;允许多个事务同时读取和写入数据库&#xff0c;而无需互相等待&#xff0c;从而提高数据库的并发性能。 在 MVCC 中&#xff0c;数据库为每个事务创建一个数据快照。每当数据被修改时&#xff0c;MySQL不会立即覆盖原有数据&#xff0c;而是生…

【Uniapp-Vue3】z-paging插件组件实现触底和下拉加载数据

一、下载z-paing插件 注意下载下载量最多的这个 进入Hbuilder以后点击“确定” 插件的官方文档地址&#xff1a; https://z-paging.zxlee.cn 二、z-paging插件的使用 在文档中向下滑动&#xff0c;会有使用方法。 使用z-paging标签将所有的内容包起来 配置标签中的属性 在s…

UG NX二次开发(Python)-API函数介绍与应用实例(三)-UFLayer类操作

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1 前言2、UFLayer类说明3、获取当前工作图层4、移动对象到特定的图层1 前言 采用Python语言进行UG NX二次开发的帮助材料很少,采用录制的方法是一种比较容易实现的方式,但是使用UFun函数更容易上…

免费PDF 转换成 Word、PPT、Excel 格式的工具

在当今数字化办公的时代&#xff0c;文件格式的转换需求日益频繁。我们的软件应运而生&#xff0c;它是一款专业的 PDF 转换成 Word、PPT、Excel 格式的工具&#xff0c;为您的办公流程带来极大便利。 下载地址&#xff1a;https://pan.quark.cn/s/8c42ac2e4bf5 核心功能&…

deepseek从网络拓扑图生成说明文字实例

deepseek对话页面中输入问题指令&#xff1a; 我是安全测评工程师&#xff0c;正在撰写系统测评报告&#xff0c;现在需要对系统网络架构进行详细说明&#xff0c;请根据附件网络拓扑图输出详细说明文字。用总分的段落结构&#xff0c;先介绍各网络区域&#xff0c;再介绍网络…

排序算法--希尔排序

希尔排序是插入排序的改进版本&#xff0c;适合中等规模数据排序&#xff0c;性能优于简单插入排序。 // 希尔排序函数 void shellSort(int arr[], int n) {// 初始间隔&#xff08;gap&#xff09;为数组长度的一半&#xff0c;逐步缩小for (int gap n / 2; gap > 0; gap …

【NR-NTN】3GPP Release 18中NR-NTN过程描述

本文参考3GPP规范&#xff1a; 【1】《TS 38.300 V18.4.0 NR; NR and NG-RAN Overall Description; Stage2》 1. 概述 图1展示了一个非地面网络&#xff08;NTN&#xff09;的示例&#xff0c;通过NTN载荷和NTN网关为用户设备&#xff08;UE&#xff09;提供非地面NR接入。图…

python3中错误与异常初识

一. 简介 在 编写 Python时&#xff0c;经常会遇到一些报错信息。接下来开始学习 Python3 中错误和异常。 本文首先初步了解一下 Python3中的错误和异常。 二. python3 中错误与异常初识 Python 中有两种错误&#xff1a;语法错误与异常。 1. 语法错误 Python 的语法错误…

一文解释nn、nn.Module与nn.functional的用法与区别

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;零基础入门PyTorch框架_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 …

“AI隐患识别系统,安全多了道“智能护盾”

家人们&#xff0c;在生活和工作里&#xff0c;咱们都知道安全那可是头等大事。不管是走在马路上&#xff0c;还是在工厂车间忙碌&#xff0c;又或是住在高楼大厦里&#xff0c;身边都可能藏着一些安全隐患。以前&#xff0c;发现这些隐患大多靠咱们的眼睛和经验&#xff0c;可…

口腔扫描仪(口扫)核心算法——点云三维重建

口腔扫描仪&#xff08;口扫&#xff09;的核心算法涉及三维点云获取、配准、去噪、补全及表面重建等多个技术环节&#xff0c;以下从技术原理、关键算法和应用挑战进行详细解析&#xff1a; 1. 数据采集与成像原理 口腔扫描的核心在于快速、高精度获取牙齿与软组织表面几何信…

VLL CCC远程连接实验

1、CE1和CE2的配置 CE1和CE2的配置很简单&#xff0c;只需要在接口E0/0/0上配置ip地址即可&#xff1b; 2、PE1的配置 配置CCC名称为CE1-CE2&#xff0c;将E0/0/1&#xff08;连接CE1&#xff09;作为入接口&#xff0c;入标签为100&#xff0c;出去的时候换成200&#xff0c…

讯飞智作 AI 配音技术浅析(四):语音特征提取与建模

语音特征提取与建模是讯飞智作 AI 配音技术的核心环节&#xff0c;旨在将文本信息转化为高质量的语音信号。该过程依赖于深度学习模型&#xff0c;通过对大量高质量语音数据的训练&#xff0c;提取出关键的声学特征&#xff08;如音素、音节、语调、语速等&#xff09;&#xf…

Java 大视界 -- Java 大数据在智能教育中的应用与个性化学习(75)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也期待你毫无保留地分享独特见解,愿我们于此携手成长,共赴新程!💖 一、…

【MySQL】centos 7 忘记数据库密码

vim /etc/my.cnf文件&#xff1b; 在[mysqld]后添加skip-grant-tables&#xff08;登录时跳过权限检查&#xff09; 重启MySQL服务&#xff1a;sudo systemctl restart mysqld 登录mysql&#xff0c;输入mysql –uroot –p&#xff1b;直接回车&#xff08;Enter&#xff09; 输…

Linux 源码编译安装httpd 2.4,提供系统服务管理脚本并测试

第一种方式 1. 下载 Apache HTTP Server 源代码 首先&#xff0c;从 Apache 官网 下载最新版本的 httpd 2.4 源码&#xff0c;或者直接使用 wget 下载&#xff1a; [rootlocalhost ~]# wget https://downloads.apache.org/httpd/httpd-2.4.36.tar.gz # 解压 [rootlocalhost ~…