java常用类Day12

SimpleDateFormat类

  • SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类
  • 进行格式化(日期—>文本)、解析(文本—>日期)
  • 常用的时间模式字母(在创建对象时可能会用到)
字母日期或时间示例
y2019
m年中月份08
d月中天数10
h1天中小时数(0~2322
m分钟16
s59
S毫秒367
  • 实例

想要输出时间,那我们首先要创建一个SimpleDateFormat对象

public class Demo01 {
    public static void main(String[] args) {
        //1.创建SimpleDateFormat对象
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss");//括号中表示你想将时间以什么样的方式输出
    }
}

然后创建一个Date对象

//2.创建Date
        Date date = new Date();

可能有人对为什么创建两个对象不是很懂。我们首先要明确的是Date类中的对象是来获取时间的,但是,仅仅获取了时间还是不够的,你可以用很多的方式来表达,比如你可以输出“8月10日9:43:11”也可以输出“8月10号9点43过11秒”……创建SimpleDateFormat对象的作用便是用来格式化Date,给他一个既定的格式

//格式化Date
        String s = sdf.format(date);

输出

        System.out.println(s);

结果为

20210810094755

若是想改变输出格式,就去改变SimpleDateFormat对象即可,如:

 SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");

那么此时的输出结果就会变为

2021/08/10 094755

格式化date是把日期转成字符串,那么同样也可以把字符串转成日期,这个过程叫做解析

//解析:把字符串转为时间
        Date date1=sdf.parse("2001年02月06日13:50:20");
        System.out.println(date1);

输出的结果为

Tue Feb 06 13:50:20 CST 2001

这里输出的即是date获取的时间的默认格式

完整代码如下:

 package com.commonClass.simpleDateFormatclass;

import java.text.SimpleDateFormat;
import java.util.Date;

public class Demo01 {
    public static void main(String[] args) throws Exception {
        
        //1.创建SimpleDateFormat对象
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss");//括号中表示你想将时间以什么样的方式输出
        
        //2.创建Date
        Date date = new Date();
        
        //格式化Date把时间转为字符串
        String s = sdf.format(date);
        System.out.println(s);
        
        //解析:把字符串转为时间
        Date date1=sdf.parse("2001年02月06日13:50:20");
        System.out.println(date1);
    }
}

输出结果为

20210810104727
Tue Feb 06 13:50:20 CST 2001

System类

  • System系统类,主要用于获取系统的属性数据和其他操作,构造方法是私有的,所以在用的时候不用创建对象。其中的方法与属性也都是静态的
方法名说明
static void arraycopy(……)复制数组
static long currentTimeMillis();获取当前系统时间,返回的是毫秒值
static void gc();建议JVM赶快启动垃圾回收器回收垃圾
static void exit(int status);退出jvm,如果参数是0表示正常退出jvm,非0表示异常退出jvm
  • 复制数组
public class Demo01 {
    public static void main(String[] args) {

        //arraycopy
        // .arraycopy(Object src,int srcPos,Object dest,int destPos,int length);
        // .arraycopy(源数组,从哪个位置开始复制,目标数组,从目标数组的哪个位置开始粘贴,复制的长度);
        int[]arr={20,18,15,8,35,26,45,90};
        int[]dest=new int[8];
        System.arraycopy(arr,0,dest,0,arr.length);
        for (int i:dest){
            System.out.println(i);
        }
    }
}

以上是把一个长度为8的数组复制到另一个长度为8的数组当中,其输出结果为

20
18
15
8
35
26
45
90

可以看到数组被完整地复制了过来,我们还可以改变参数值,来达到一些操作目的

public class Demo01 {
    public static void main(String[] args) {

        //arraycopy
        // .arraycopy(Object src,int srcPos,Object dest,int destPos,int length);
        // .arraycopy(源数组,从哪个位置开始复制,目标数组,从目标数组的哪个位置开始粘贴,复制的长度);
        int[]arr={20,18,15,8,35,26,45,90};
        int[]dest=new int[8];
        System.arraycopy(arr,2,dest,4,arr.length-5);//复制的长度同样可以是纯数字
        for (int i:dest){
            System.out.println(i);
        }
    }
}

此段代码中,原数组会从2开始复制(第三个元素),复制的长度是数组长度-5(即3),目标数组会从4开始粘贴(第五个元素),输出结果为

0
0
0
0
15
8
35
0

需要注意的是,不论是复制还是粘贴,一定要看好数组的上限,否则会造成数组越界而报错

  • 垃圾回收
//System.gc()
Student s1=new Student("更生",19);
Student s2=new Student("曹和宇",20);
Student s3=new Student("甦",21);

System.gc();//告诉垃圾回收器回收
package com.commonClass.systemClass;

public class Student {
    private String name;
    private int age;

    public Student(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }

    public Student() {

    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    protected void finalize() throws Throwable {
        System.out.println("回收了"+name+"   "+age);
    }
}

如果就按这样运行,会发现没有输出任何东西,说明并没有被回收,其原因是三个对象还在被使用着,如果我们稍微修改一下:

//System.gc()
new Student("更生",19);
new Student("曹和宇",20);
new Student("甦",21);

System.gc();//告诉垃圾回收器回收

此时的输出结果为

回收了更生   19
回收了甦   21
回收了曹和宇   20

说明对象已被回收器回收

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值