Day05(2020.06.15)

文章目录

      • 一、日期类
        • 1.1 Date类
        • 1.2 DateFormat类
          • 1.2.1 构造方法
          • 1.2.2 常用方法
        • 1.3 Calendar类
          • 常用方法
        • 1.4 jdk8的日期类
      • 二、System类
      • 三、StringBuilder类
        • 3.1 StringBuilder概述
          • 3.1.1 构造方法
          • 3.1.2 常用方法
        • 3.2 String <--> StringBuilder
      • 四、包装类
      • 五、Math类
        • 基本运算的方法
      • 六、File类
        • 6.1 构造方法
        • 6.2 常用方法
          • 6.2.1 获取功能的方法
          • 6.2.2 判断功能的方法
          • 6.2.3 创建删除功能的方法
          • 6.2.4 目录的遍历
          • 练习
      • 七、异常

一、日期类

1.1 Date类

java.util.Date类 表示特定的瞬间,精确到毫秒。

  • public Date():分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)。
  • public Date(long date):分配Date对象并初始化此对象,以表示自从标准基准时间(即1970年1月1日00:00:00 GMT)以来的指定毫秒数。由于我们处于东八区,所以我们的基准时间为1970年1月1日8时0分0秒。
public static void main(String[] args) {
    //空参构造方法
    Date d = new Date();
    //输出当前系统日期
    System.out.println(d);//Sun Jun 14 15:26:15 CST 2020
    System.out.println(d.toLocaleString());//2020-6-14 15:27:33

    //从时间原点向后3000毫秒的时间,时间原点:1970-1-1 0:0:0 (中国 东八区)
    Date d1 = new Date(3000);
    System.out.println(d1.toLocaleString());//1970-1-1 8:00:03
 }

在使用println方法时,会自动调用Date类中的toString方法。Date类对Object类中的toString方法进行了覆盖重写,所以结果为指定格式的字符串。

1.2 DateFormat类

java.text.DateFormat 是日期/时间格式化子类的抽象类,我们通过这个类可以帮我们完成日期和文本之间的转换,也就是可以在Date对象与String对象之间进行来回转换。

  • 格式化:按照指定的格式,从Date对象转换为String对象。
  • 解析:按照指定的格式,从String对象转换为Date对象。
1.2.1 构造方法

由于DateFormat为抽象类,不能直接使用,所以需要常用的子类java.text.SimpleDateFormat。这个类需要一个模式(格式)来指定格式化或解析的标准。构造方法为:

  • public SimpleDateFormat(String pattern):用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat。

参数pattern是一个字符串,代表日期时间的自定义格式。常用的格式规则为:

标识字母(区分大小写) 含义
y
M
d
H
m
s
1.2.2 常用方法

DateFormat类的常用方法有:

  • public String format(Date date):将Date对象格式化为字符串。
  • public Date parse(String source):将字符串解析为Date对象。
public class Demo02 {
    public static void main(String[] args) throws ParseException {
        Date d = new Date();

        //将字符串变成日期格式
        String str = "2020年06月14日 15:35:00";
        Date parse = sdf.parse(str);
        System.out.println(parse);//Sun Jun 14 15:35:00 CST 2020
        
        //将日期格式变成字符串
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy年M月dd日 HH:mm:ss");
        String str1 = sdf1.format(d);
        System.out.println(str1);//2020年6月15日 11:13:42
    }
}
1.3 Calendar类

java.util.Calendar是日历类,在Date后出现,替换掉了许多Date的方法。该类将所有可能用到的时间信息封装为静态成员变量,方便获取。日历类就是方便获取各个时间属性的。

常用方法
  • public static Calendar getInstance():使用默认时区和语言环境获得一个日历

  • public int get(int field):返回给定日历字段的值。

  • public void set(int field, int value):将给定的日历字段设置为给定值。

  • public abstract void add(int field, int amount):根据日历的规则,为给定的日历字段添加或减去指定的时间量。

  • public Date getTime():返回一个表示此Calendar时间值(从历元到现在的毫秒偏移量)的Date对象。

Calendar类中提供很多成员常量,代表给定的日历字段:

字段值 含义
YEAR
MONTH 月(从0开始,可以+1使用)
DAY_OF_MONTH 月中的天(几号)
HOUR 时(12小时制)
HOUR_OF_DAY 时(24小时制)
MINUTE
SECOND
DAY_OF_WEEK 周中的天(周日为1
public class Demo03 {
    public static void main(String[] args) {
        //获取日历类对象
        Calendar c = Calendar.getInstance();
        //get方法
        int year1 = c.get(Calendar.YEAR);
        System.out.println(year1);//2020

        int month = c.get(Calendar.MONTH)+1;
        System.out.println(month);//6

        //getTime方法
        Date time = c.getTime();
        System.out.println(time);//Sun Jun 14 15:50:06 CST 2020

        //set方法
        c.set(Calendar.YEAR,2022);
        int year2 = c.get(Calendar.YEAR);
        System.out.println(year2);//2022

        //add方法
        c.add(Calendar.YEAR,2);
        int year3 = c.get(Calendar.YEAR);
        System.out.println(year3);//2024
    }
}
1.4 jdk8的日期类
public class Demo03 {
    public static void main(String[] args) {
        //系统现在年份
        System.out.println(Year.now());//2020
        //指定年份
        System.out.println(Year.of(2022));//2022
        //指定月份
        System.out.println(Month.JUNE);//JUNE
        //系统年月日
        System.out.println(LocalDate.now());//2020-06-15
        //系统现在的年月日、时间
        System.out.println(LocalDateTime.now());//2020-06-15T20:59:17.019
        //存储一个年月日
        LocalDate birthday = LocalDate.of(1999,4,8);
        System.out.println(birthday);//1999-04-08
        //存储一个年月日和时间
        LocalDateTime time = LocalDateTime.of(2020,6,15,21,05,33);
        System.out.println(time);//2020-06-15T21:05:33
    }
}
public class Demo04 {
    public static void main(String[] args) {
        //日期转换器
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        //格式化日期字符串
        LocalDateTime now = LocalDateTime.now();
        System.out.println(now);//2020-06-15T21:14:28.266
        String nowStr = now.format(formatter);//放入格式器
        System.out.println(nowStr);//2020-06-15 21:14:28

        String dateStr= "2020-06-15 21:13:25";
        //转成日期
        LocalDateTime date= LocalDateTime.parse(dateStr, formatter);//放入格式器
        //获取日
        System.out.println(date.getDayOfMonth());//15
    }
}
public class Demo05 {
    public static void main(String[] args) {
        LocalDate today = LocalDate.now();
        LocalDate birthDate = LocalDate.of(1999, 4, 8);
        //时期间隔 年月日
        Period p = Period.between(birthDate, today);
        System.out.println(p.getYears()+"年"+p.getMonths()+"月"+p.getDays()+"日");//21年2月7日

        LocalDate startDate = LocalDate.of(1996, 4, 6);
        LocalDate endDate = LocalDate.of(2000, 12,16);
        //期量单位 间隔
        long between = ChronoUnit.YEARS.between(startDate, endDate);
        System.out.println("两年之间的差: " + between); //4 不满一年不计算在内
        between =ChronoUnit.MONTHS.between(startDate, endDate);
        System.out.println("两月之间的差: " + between); //56 不满一月不计算在内
    }
}

二、System类

java.lang.System类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作,常用的方法有:

  • public static long currentTimeMillis():返回以毫秒为单位的当前时间。
public class Demo04 {
    public static void main(String[] args) {
        //打印当前系统毫秒值时间
        long l = System.currentTimeMillis();
        System.out.println(l);//1592121855933
    }
}

三、StringBuilder类

3.1 StringBuilder概述

查阅java.lang.StringBuilder的API,StringBuilder又称为可变字符序列,它是一个类似于 String 的字符串缓冲区,通过某些方法调用可以改变该序列的长度和内容。

3.1.1 构造方法
  • public StringBuilder():构造一个空的StringBuilder容器。
  • public StringBuilder(String str):构造一个StringBuilder容器,并将字符串添加进去。
3.1.2 常用方法
  • public StringBuilder append(...):添加任意类型数据的字符串形式,并返回当前对象自身。
  • 还可以做字符串拼接,删除,替换,反转,截取,插入等。
public class MyStringBuilder {
    public static void main(String[] args) {
        //创建一个StringBuilder
        StringBuilder sb1 = new StringBuilder("abc");
        //追加、拼接
        sb1.append("def").append("ghi");
        System.out.println(sb1);//abcdefghi
        //删除
        sb1.delete(2,4);
        System.out.println(sb1);//abefghi
        //反转
        sb1.reverse();
        System.out.println(sb1);//ihgfeba
        //插入
        sb1.insert(2,"df");
        System.out.println(sb1);//ihdfgfeba
    }
}

3.2 String <–> StringBuilder

public String toString():将当前StringBuilder对象转换为String对象。

public class Demo02 {
    public static void main(String[] args) {
        //String --> StringBuilder
        String str = "你好!";
        System.out.println(str);//你好!
        StringBuilder sb = new StringBuilder(str);
        sb.append("女孩!");
        System.out.println(sb);//你好!女孩!

        //StringBuilder --> String
        String str1 = sb.toString();
        System.out.println(str1);//你好!女孩!
    }
}

四、包装类

JAVA并不是纯面向对象的语言。Java2语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象 的。但是我们在实际使用中经常需要将基本数据转化成对象,便于操作。比如:集合的操作中。例如使用Map对象 要操作put()方法时,需要传入的参数是对象而不是基本数据类型。为了解决这个不足,在设计类时为每个基本数据 类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类(Wrapper Class)。包装类均位于java.lang包

  • 装箱:从基本类型转换为对应的包装类对象。
  • 拆箱:从包装类对象转换为对应的基本类型。
基本数据类型 包装类
byte Byte
boolean Boolean
short Short
char Character
int Integer
long Long
float Float
double Double
public class Demo01 {
    public static void main(String[] args) {
 	    //基本类型-->包装类,创建一个包装类对象,使用包装类中的valueOf方法
        Integer aw = Integer.valueOf(20);
        System.out.println(aw);//20

        //包装类-->基本类型
        int a = aw.intValue();
        System.out.println(a);//20

        // 基本类型和引用类型之间的转换  自动转换(自动装箱、自动拆箱)
        //自动装箱,相当于Integer i1 = Integer.valueOf(100);
        Integer i1 = 100;
        //自动拆箱,等号右边:将i1对象转成基本数值(自动拆箱) i.intValue() + 5;
        i1 = i1 + 5;
        //加法运算完成后,再次装箱,把基本数值转成对象

        // 引用类型的增强
        System.out.println(Integer.MAX_VALUE);//2147483647
        System.out.println(Integer.MIN_VALUE);//-2147483648

        System.out.println(Integer.max(100, 1000));//1000
        System.out.println(Integer.max(Integer.valueOf(10), Integer.valueOf("1000")));//1000

        // 以后在需要Integer的地方我们可以直接写数字  在需要基本类型的地方,也可以直接使用Integer
        Integer i1 = 1000;  //自动装箱
        Integer i2 = 1000;
        System.out.println(i1==i2);//false 
        System.out.println(i1.equals(i2));//true
        int it1 = 1000;
        int it2 = 1000;
        System.out.println(it1==it2);//true
        System.out.println(Integer.valueOf("100",8));//64
    }
}

五、Math类

java.lang.Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。类似这样的工具 类,其所有方法均为静态方法,并且不会创建对象,调用起来非常简单

基本运算的方法
public class Demo005Math {
    public static void main(String[] args) {
        //向上取整
        System.out.println(Math.ceil(3.2));//4
        //向下取整
        System.out.println(Math.floor(3.2));//3
        //绝对值
        System.out.println(Math.abs(-1));//1
        //取大值
        System.out.println(Math.max(1, 10));//10
        //取小值
        System.out.println(Math.min(1, 10));//1
        //2的3次方
        System.out.println(Math.pow(2, 3));//8
        //9的平方根
        System.out.println(Math.sqrt(9));//3
        //sin(0)的值
        System.out.println(Math.sin(0));//0
    }
}

六、File类

java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。

6.1 构造方法
  • public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
  • public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的 File实例。
  • public File(File parent, String child) :从父抽象路径名和子路径名字符串创建新的 File实例。
    //创建一个File对象,可以用相对路径,也可以用绝对路径
    File file = new File("gp.txt");
    File file1 = new File("D:\\mysoft_s\\JetBrains\\ws\\day05\\gp1.txt");
    System.out.println(file);//gp.txt
    System.out.println(file1);//D:\mysoft_s\JetBrains\ws\day05\gp1.txt
    // 父路径+相对路径
    file = new File("code/day00", "a/a.txt");
    System.out.println(file.getAbsolutePath());
  • 绝对路径:从盘符开始的路径,这是一个完整的路径。
  • 相对路径:相对于项目目录的路径,这是一个便捷的路径,开发中经常使用。
6.2 常用方法
6.2.1 获取功能的方法
  • public String getAbsolutePath() :返回此File的绝对路径名字符串。
  • public String getPath() :将此File转换为路径名字符串。
  • public String getName() :返回由此File表示的文件或目录的名称。
  • public long length() :返回由此File表示的文件的长度。
  System.out.println(file.getAbsolutePath());//D:\mysoft_s\JetBrains\ws\day05\gp.txt
  System.out.println(file.getPath());//gp.txt
  System.out.println(file1.getName());//out
  System.out.println(file1.length());//0 
6.2.2 判断功能的方法
  • public boolean exists() :此File表示的文件或目录是否实际存在。
  • public boolean isDirectory() :此File表示的是否为目录。
  • public boolean isFile() :此File表示的是否为文件。
    System.out.println(file.exists());//true
    System.out.println(file1.isDirectory());//true
    System.out.println(file1.isFile());//false
6.2.3 创建删除功能的方法
  • public boolean createNewFile() :当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。
  • public boolean delete() :删除由此File表示的文件或目录。
  • public boolean mkdir() :创建由此File表示的目录。
  • public boolean mkdirs() :创建由此File表示的目录,包括任何必需但不存在的父目录。
    File file = new File("gp.txt");
    // 创建一个新文件
    file.createNewFile();
    System.out.println(file.exists());//true
6.2.4 目录的遍历
  • public String[] list() :返回一个String数组,表示该File目录中的所有子文件或目录。

  • public File[] listFiles() :返回一个File数组,表示该File目录中的所有的子文件或目录。

 // 获取目录中的子目录
 File[] fs = out.listFiles();
练习
/*
         场景:文件上传
         在当前环境中的 update文件中存放上传的文件
         模拟通过键盘录入文件名的形式作为文件上传
 */
public class Demo07 {
    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入您创建的文件名:");
        String fileName = sc.nextLine();

        File f1 = new File("update");
        if(!(f1.exists())){
            f1.mkdirs();
        }

        File f2 = new File(f1,fileName);
        f2.createNewFile();
        System.out.println(f2.exists());//true
    }
}
// 打印一个目录下所有的内容的名称
public class Demo08 {
    public static void main(String[] args) {
        File file = new File("out");
        dirPrint(file);
    }
    private static void dirPrint(File file) {
        System.out.println(file.getName());
        if(file.isDirectory()){
            File[] listFile = file.listFiles();
            for(File f : listFile){
                dirPrint(f);
            }
        }
    }
}

七、异常

异常 :指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止。

处理方式:抛,抓

Java异常处理的五个关键字:try、catch、finally、throw、throws

​ try -> 检测

​ catch -> 捕获

​ finally -> 最终操作

​ throws -> 向外抛出异常

​ throw -> 声明异常|出现异常 告诉自己的方法知道出异常了

你可能感兴趣的:(java,java,字符串)