包装类、日期时间类、属性文件

目录

包装类

时间日期类

时间的本质

属性文件


包装类

在Java当中两类数据类型:基本和引用。目前来看,这两类数据类型是割裂的,因为无论是它们的存放结构 还是 提供的内容,都让它们是分开的两个体系。

包装类的出现 主要的任务就是在基本数据类型和引用数据类型之间 搭建一个“桥梁”。

4类8种基本数据类型,各有一个包装类与之对应。

byte Byte

short Short

int Integer

long Long

float Float

double Double

char Character

 boolean Boolean

所有的包装类的使用方式都是一样的,只要掌握了一个,其他都是相似的。

时间日期类

时间和日期是任何一个程序当中都不可能不涉及的数据,另外在很多加密算法或随机数算法中,都涉及到了使用时间来作为计算的种子元素。

时间的本质

在计算机内部,时间的本质不是一个字符串。我们所能看到"年月日"只是它的一个显示形式,这种形式会很多,"22-4-25" ,"4/25/2022"。

时间在计算机当中,它的本质是一个整型数字,而且是一个long类型的数字。它是在时间轴上选择了一个时间点作为“时间元点”,然后把其他时间记录为距离这个时间元点过了多少毫秒。(1秒 = 1000毫秒)。

初期 -- 时间元点统一为"1900年1月1号 00:00:00:000" 现在 -- 时间元点统一推迟到"1970年1月1号 00:00:00:000"

在Java当中,System提供了一个叫做"currentTimeMills()",该方法可以返回当前系统记录的毫秒数。--- 应用:我们可以在一段代码的前后,分别获取这个毫秒数,然后利用两者之差得到这段代码执行消耗的时间。

Date

最早的在JDK1.0当中就设计出来的日期类型

//注意来自于java.util包
Date date = new Date();

上面代码就可以获取到代表当前时间的Date对象。

由于Date对象是在95年的时候设计的,当时仍然按照"1900年"作为时间元点,所以时至今日,Date对象虽然仍然能够获取到系统的毫秒数,并构建对象,但是通过毫秒数去计算“年、月、日、时、分、秒”这些动作,全部被标记为“过时”。

那么这个类我们还用不用? 要用,第一个原因:这个Date可以在数据库操作的时候与数据库需要用的"java.sql.Date"有更简单的转换方式。第二个原因:是在Java当中最开始提供的时间日期格式化类,是专门操作Date对象的。

SimpleDateFormat来自于java.text包,这个类的使用很简单。

SimpleDateFormat sf = new SimpleDateFormat("字符串形式的格式");

String str = sf.format(Date对象);

现在Date的功能: 1、获取当前时间 --- 没问题; 2、获取一个指定时间的Date对象 --- 有问题的,只能根据毫秒数构建; 3、日期格式化 --- 目前来看没问题 4、时间日期的运算操作 --- 有问题,只能获取到谁比谁大(小)。

Calendar

Calendar是在JDK1.1中设计的,其首先任务就是解决Date的时间元点是“1900”的问题,它的时间元点是"1970"。

Calender是一个抽象类,因为日历对于全世界来说有各种历法,Java所实现的“格里高利历”只是一种(公历)。

//获取到代表当前时间的Calendar对象
Calendar cal = Calendar.getInstance();

修改cal对象的数据值

//第一个参数用常量表示你要修改该日历对象的哪个字段,第二哥参数就是修改成的新值
cal.set(Calendar.YEAR,2021);
cal.set(Calendar.MONTH,3);
cal.set(Calendar.HOUR,12);

获取cal对象的某项数据值

int year = cal.get(Calendar.YEAR);

在操作Calendar的日历字段的时候,要注意:不是所有的字段都是按“国人”的想法来排列的顺序。比如:月份(Month),1月在Calendar是0,后面的依次推。星期(DAY_OF_WEEK),在Calendar当中,第一个是周天。

所以在设置月份的时候,要记住-1,而获取的时候要记住+1。 获取的时候最建议的方式不是自己去通过Calendar的方法一个一个去获取,最好能利用Date和SimpleDateFormat共同完成。因此,最好掌握把一个Calendar对象转换成Date的对象的API。

//方式一
Date date = new Date(cal.getTimeInMillis());

//方式二
Date date = cal.getTime();

java.time包

java当中的时间日期经历了Date时期,到Calendar时期,都不令人满意。而唯一好用的SimpleDateFormat也出问题了,它线程不安全。而Java目前的应用主要集中在服务器端,所以线程安全考虑是绕不过的。这让Java不得不推出新的时间日期API。

新的时间日期API被放在了java.time包当中。

Instant

Instant在Java当中专门设计的一个代表“瞬时”的类型。之前的JDK中,没有专门的类代表“瞬时”,而是用的long这个数据类型,代表当前毫秒数。 那么这个新的Instant也是其同样作用的,但是它的精度不是毫秒,而是纳秒。1秒 = 1000000000纳秒。

在Instant上有两个属性用来存放精确时间。一个是long类型的seconds,用来存放距离时间元点过了多少秒;一个是int类型的nanos,用来存放秒后面的精度,就是多少纳秒。所以它其实最终表示的方式是:距离时间元点过了"seconds.nanos"。

虽然用了Instant来代表某个瞬时,但是利用这个瞬时去计算“年月日,时分秒”是非常不方便的。因此,java.time包当中还专门设计了三个类专用于底层封装Instant,然后提供API供我们操作时间日期。

LocalDate

专用于表示本地“年月日”也就是日期。 常用方法:

//获取当前日期
LocalDate.now();
//获取指定日期
LocalDate.of(年,月,日);
//根据某一天获取它之前或之后的指定日期
LocalDate对象.plusDays(天数);
LocalDate对象.plusMonths(月数);
LocalDate对象.plusYears(年数);
LocalDate对象.minusDays(天数);
LocalDate对象.minusMonths(月数);
LocalDate对象.minusYears(年数);

LocalTime

专用于表示本地时间 常用方法:

//获取当前时间
LocalTime lt = LocalTime.now();
//设置指定的时间
LocalTime when = LocalTime.of(5,30);
//往后调6个小时
lt = lt.plusHours(6);
//往前调10分钟
lt = lt.minusMinutes(10);

LocalDateTime

同时表示本地的日期和时间 常用方法

//获取当前日期时间
LocalDateTime now = LocalDateTime.now();
//设置指定的日期时间
LocalDateTime when = LocalDateTime.of(2008,5,12,13,07,56);
/*
    也包含各种plus和minus
*/

属性文件

把程序中的内存瞬时数据存入到硬盘上,这个动作---"持久化"。
持久化的技术很多,最常见的就是两种:1、文件;2、数据库

属性文件是所有文件操作中最简单的一种。
属性文件指的是一种特殊格式的文件,它里面的文件内容全是"键=值"的形式存在。

public class TestProperties {

    public static void main(String[] args) {
        Properties props = readFile();

        System.out.println(props.size());//props集合中的元素个数
        //操作集合中的记录
        //1、通过key获取值
        String value = props.getProperty("zhang3");
        value = props.getProperty("wang8");//如果key不存在,返回null
        System.out.println(value);
        //2、通过key修改值
        props.setProperty("zhang3","65");
        System.out.println(props.size());
        props.setProperty("wang8","72");//如果key不存在,相当于新增
        System.out.println(props.size());

        writeFile(props);

    }

    public static Properties readFile(){
        //产生一个Properties对象
        Properties props = new Properties();
        try {
            props.load(new FileInputStream("data/student.properties"));
        } catch (IOException e) {
            e.printStackTrace();
        }

        return props;
    }

    public static void writeFile(Properties props){
        try {
            props.store(new FileOutputStream("data/student.properties"),"");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值