Skip to content

day14.常用 API

java
课前回顾:
  1.Object:所有类的父类
    a.如果直接输出对象名,想输出的是对象内容,重写toString方法
    b.如果比较对象,比较的是对象的内容,重写equals方法
  2.String
    a.概述:代表字符串
    b.特点:
      凡是带双引号的都是String的对象
      字符串创建之后,值不能改变
      字符串创建之后可以共享
    c.构造:
      String()
      String(String s)
      String(char[] chars)
      String(byte[] bytes)
      String(char[] chars,int offset,int count)
      String(byte[] bytes,int offset,int length)
      简化:String 变量名 =
    d.比较功能:
      boolean equals(Object obj)->比较字符串内容
      boolean equalsIgnorecase(String s) -> 比较字符串内容,忽略大小写
    e.获取功能:
      int length()获取字符串长度
      String concat(String s) 拼接字符串
      char charAt(int index) 根据索引获取字符
      int indexOf(String s) 获取指定的串儿在老串儿中第一次出现的索引位置
      String substring(int beginIndex) 从指定索引开始截取字符串到最后
      String substring(int beginIndex,int endIndex)从beginIndex,到endIndex截取字符串,含头不含尾

    f.转换功能:
      String replace(s1,s2) 将s1替换成s2
      byte[] getBytes()将字符串转成字节数组
      byte[] getBytes(String charsetname) 按照指定编码规则将字符串转成byte数组
      char[] toCharArray()将字符串转成char数组

    g.切割功能:
      String[] split(String regex) 按照指定规则分割字符串

    h.其他功能:
      boolean contains(String s)判断老串儿中是否包含指定的串儿
      boolean endsWith(String s)判断是否以指定的串儿结尾
      boolean startsWith(String s)判断是否以指定的串儿开头
      String toLowerCase()字母转成小写
      String toUpperCase()字母转成大写
      String trim()去掉两端空格

今日重点:
  1.会使用BigInteger,BigDecimal
  2.会使用Date对象,SimpleDateFormat对象
  3.会使用jdk8新日期类中LocalDate,LocalDateTime对象
  4.会使用System类中的arrayCopy方法
  5.会使用Arrays类中的所有方法
  6.知道基本类型对应的包装类是啥
  7.会手动拆箱,装箱

第零章.StringBuilder

1.StringBuilder 的使用

java
1.StringBuiler()
2.StringBuilder(String str)
java
public class Demo01StringBuilder {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        System.out.println(sb);

        System.out.println("========================");
        StringBuilder sb2 = new StringBuilder("abc");
        System.out.println("sb2 = " + sb2);
    }
}

2.StringBuilder 的常用方法

java
1.StringBuilder append(任意类型) -> 拼接字符串,返回的是StringBuilder自己
2.StringBuilder reverse() -> 字符串翻转,返回的是StringBuilder自己
3.String toString() -> 将StringBuilder转成String -> 将来用StringBuilder拼接之后,需要调用String中的方法去处理拼接好的字符串,所以我们需要将StringBuilder转成String
java
public class Demo02StringBuilder {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        StringBuilder sb1 = sb.append("张无忌");
        System.out.println(sb1);
        System.out.println(sb);
        System.out.println(sb==sb1);

        System.out.println("========================");

        /*
          链式调用
          调用某个方法,我们就可以根据这个方法的返回值类型,继续点这个方法返回类型中的其他方法
         */
        sb.append("张三丰").append("张翠山").append("殷素素").append("周芷若");
        System.out.println(sb);

        /*
           StringBuilder reverse() -> 字符串翻转
         */
        sb.reverse();
        System.out.println(sb);

        /*
           String toString() -> 将StringBuilder转成String
         */
        String str = sb.toString();
        System.out.println(str);
    }
}
java
练习: 键盘录入一个字符串,判断这个字符串是否是"回文内容"
     abcba

     上海自来水来自海上
     山西运煤车煤运西山


     蝶恋花香花恋蝶
     鱼游水美水游鱼
java
public class Demo03StringBuilder {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        Scanner sc = new Scanner(System.in);
        String data = sc.next();
        sb.append(data);
        sb.reverse();
        String str = sb.toString();
        if (data.equals(str)){
            System.out.println("回文");
        }else {
            System.out.println("不是回文");
        }
    }
}

String,StringBuilder 以及 StringBuffer 区别:

1.相同点:

​ 三者都可以拼接字符串

2.不同点:

​ a.String 每拼接一次,都会产生一个新的 String 对象,占用内存空间,效率低

​ b.StringBuilder:拼接的过程中不会随意产生新对象.线程不安全,效率高

​ c.StringBuffer:拼接的过程中不会随意产生新对象.线程安全,效率低

3.从拼接效率上来看: StringBuilder>StringBuffer>String

第一章.Math 类

1.Math 类介绍

java
1.概述:数学工具类
2.作用:做数学运算
3.特点:
  a.构造私有
  b.方法都是静态的
4.使用:
  类名直接调用

2.Math 类方法

java
static int abs(int a) -> 求参数的绝对值
static double ceil(double a) -> 向上取整
static double floor(double a) ->向下取整
static long round(double a)  -> 四舍五入
static int max(int a, int b) ->求两个数之间的较大值
static int min(int a, int b) ->求两个数之间的较小值
java
public class Demo01Math {
    public static void main(String[] args) {
        //static int abs(int a) -> 求参数的绝对值
        System.out.println(Math.abs(-100));
        //static double ceil(double a) -> 向上取整
        System.out.println(Math.ceil(3.14));
        //static double floor(double a) ->向下取整
        System.out.println(Math.floor(-3.14));
        //static long round(double a)  -> 四舍五入
        System.out.println(Math.round(2.4));
        //static int max(int a, int b) ->求两个数之间的较大值
        System.out.println(Math.max(3,5));
        //System.out.println(Math.max(3, Math.max(5,10)));
        //static int min(int a, int b) ->求两个数之间的较小值
        System.out.println(Math.min(10,20));
    }
}

第二章.BigInteger

1.BigInteger 介绍

java
1.问题:将来我们可能会遇到超大整数,大到连long型都接收不了了,所以我们将这个整数可以称之为是一个"对象"
2.作用:
  处理超大整数

2.BigInteger 使用

java
1.构造:
  BigInteger(String val) -> 字符串内容必须是数字格式
2.方法:
  BigInteger add(BigInteger val)  -> 加法
  BigInteger subtract(BigInteger val) ->减法
  BigInteger multiply(BigInteger val) -> 乘法
  BigInteger divide(BigInteger val)   -> 除法
java
public class Demo01BigInteger {
    public static void main(String[] args) {
        BigInteger b1 = new BigInteger("12121212121212121212121212121212121212121212121");
        BigInteger b2 = new BigInteger("12121212121212121212121212121212121212121212121");

        BigInteger add = b1.add(b2);
        System.out.println(add);

        BigInteger subtract = b1.subtract(b2);
        System.out.println("subtract = " + subtract);

        BigInteger multiply = b1.multiply(b2);
        System.out.println("multiply = " + multiply);

        BigInteger divide = b1.divide(b2);
        System.out.println("divide = " + divide);
    }
}
java
int intValue()
long longValue()
java
BigInteger可以操作的最大整数42亿的21亿次方,内存根本扛不住这么大的数,所以我们认为BigInteger是无限大的

第三章.BigDecimal 类

1.BigDecimal 介绍

java
1.问题:float和double直接参与运算,会有精度损失问题
2.可以使用BigDecimal去解决
3.作用:解决float和double直接参与运算,会有精度损失的问题

2.BigDecimal 使用

java
1.构造:
  BigDecimal(String val)
2.方法:
  static BigDecimal valueOf(double val)
  BigDecimal add(BigDecimal val)  -> 加法
  BigDecimal subtract(BigDecimal val) ->减法
  BigDecimal multiply(BigDecimal val) -> 乘法
  BigDecimal divide(BigDecimal val)   -> 除法  -> 如果除不尽,会报算数异常ArithmeticException
java
public class Demo03BigDecimal {
    public static void main(String[] args) {
        BigDecimal b1 = BigDecimal.valueOf(3.55);
        BigDecimal b2 = BigDecimal.valueOf(2.12);
        BigDecimal add = b1.add(b2);
        System.out.println("add = " + add);
        BigDecimal subtract = b1.subtract(b2);
        System.out.println("subtract = " + subtract);
        BigDecimal multiply = b1.multiply(b2);
        System.out.println("multiply = " + multiply);

        System.out.println("==========================");
        //BigDecimal divide = b1.divide(b2);
        //System.out.println("divide = " + divide);
    }
}
java
BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)
                  divisor:除号后面的数
                  scale:保留几位小数
                  roundingMode:取舍方式 -> 传递的是BigDecimal中的静态变量
                               static int ROUND_UP -> 向上加1
                               static int ROUND_DOWN -> 直接舍去
                               static int ROUND_HALF_UP -> 四舍五入
java
public class Demo03BigDecimal {
    public static void main(String[] args) {
        BigDecimal b1 = BigDecimal.valueOf(3.55);
        BigDecimal b2 = BigDecimal.valueOf(2.12);
        BigDecimal add = b1.add(b2);
        System.out.println("add = " + add);
        BigDecimal subtract = b1.subtract(b2);
        System.out.println("subtract = " + subtract);
        BigDecimal multiply = b1.multiply(b2);
        System.out.println("multiply = " + multiply);

        System.out.println("==========================");
        //BigDecimal divide = b1.divide(b2);
        //System.out.println("divide = " + divide);

        /*
          BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)
                  divisor:除号后面的数
                  scale:保留几位小数
                  roundingMode:取舍方式
         */
        BigDecimal divide = b1.divide(b2, 2, BigDecimal.ROUND_DOWN);
        System.out.println("divide = " + divide);
    }
}

方法上一旦带@Deprecated(since="9")注解,证明此方法是过时方法

3.BigDecimal 除法过时方法解决

java
BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode)
                  divisor:除号后面的数
                  scale:保留几位小数
                  roundingMode:取舍方式
                               RoundingMode-> 是一个枚举类
                                              UP:向上加1
                                              DOWN:直接舍去
                                              HALF_UP:四舍五入
java
public class Demo03BigDecimal {
    public static void main(String[] args) {
        BigDecimal b1 = BigDecimal.valueOf(3.55);
        BigDecimal b2 = BigDecimal.valueOf(2.12);
        BigDecimal add = b1.add(b2);
        System.out.println("add = " + add);
        BigDecimal subtract = b1.subtract(b2);
        System.out.println("subtract = " + subtract);
        BigDecimal multiply = b1.multiply(b2);
        System.out.println("multiply = " + multiply);

        System.out.println("==========================");
        //BigDecimal divide = b1.divide(b2);
        //System.out.println("divide = " + divide);

        /*
          BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)
                  divisor:除号后面的数
                  scale:保留几位小数
                  roundingMode:取舍方式
         */
        //BigDecimal divide = b1.divide(b2, 2, BigDecimal.ROUND_DOWN);
        //System.out.println("divide = " + divide);

        System.out.println("==================================");
        BigDecimal divide1 = b1.divide(b2, 2, RoundingMode.DOWN);
        System.out.println("divide1 = " + divide1);
    }
}

第四章.Date 日期类

1.Date 类的介绍

java
1.概述:表示特定的瞬间,精确到毫秒
2.地理常识:
  a.北京经纬度:
    东经:116.20
    北纬:39.56

  b.北京时区: 东8区

3.时间原点:1970年1月1日 0时0分0秒    -> 0度经线 -> 跟咱们东八区差8个小时

4.1秒 = 1000毫秒

2.Date 类的使用

java
1.构造:
  Date()-> 根据无参构造创建对象,代表当前系统时间,从时间原点算的
  Date(long time) -> 根据指定的毫秒值创建对象,从时间原点算的
java
public class Demo01Date {
    public static void main(String[] args) {
        Date date1 = new Date();
        System.out.println("date1 = " + date1);

        System.out.println("====================");
        Date date2 = new Date(1000L);
        System.out.println("date2 = " + date2);
    }
}

3.Date 类的常用方法

java
1.void setTime(long time) -> 设置时间,传递毫秒值
2.long getTime() -> 获取时间对应的毫秒值
java
public class Demo02Date {
    public static void main(String[] args) {
        Date date1 = new Date();
        System.out.println(date1.getTime());

        date1.setTime(1000L);
        System.out.println(date1);
    }
}

第五章.Calendar 日历类

1.Calendar 介绍

java
1.概述:日历类 -> 抽象类
2.作用:主要是操作时间字段的(年月日时分秒都叫时间字段)
3.获取:
  static Calendar getInstance()
4.注意:
  Calendar中的月份从0开始的,所以我们获取时需要+1
5.方法:
  int get(int field) ->返回给定日历字段的值
  void set(int field, int value)  :将给定的日历字段设置为指定的值
  void add(int field, int amount) :根据日历的规则,为给定的日历字段添加或者减去指定的时间量
  Date getTime():将Calendar转成Date对象

  field:代表的是字段,这些字段都是Calendar中的静态的成员变量,所以我们指定字段时,需要类名直接调用
java
public class Demo03Calendar {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        //int get(int field) ->返回给定日历字段的值
        int year = calendar.get(Calendar.YEAR);
        System.out.println("year = " + year);
        //void set(int field, int value)  :将给定的日历字段设置为指定的值
        calendar.set(Calendar.YEAR, 2000);
        int year1 = calendar.get(Calendar.YEAR);
        System.out.println("year1 = " + year1);
        //void add(int field, int amount) :根据日历的规则,为给定的日历字段添加或者减去指定的时间量
        calendar.add(Calendar.YEAR, -1);
        int year2 = calendar.get(Calendar.YEAR);
        System.out.println("year2 = " + year2);
        //Date getTime():将Calendar转成Date对象
        Date date = calendar.getTime();
        System.out.println("date = " + date);
    }
}
1704694983109

扩展方法:

java
void set(int year, int month, int date)  -> 设置年月日

需求:键盘录入一个年份,判断是否为闰年或者平年
java
public class Demo04Calendar {
    public static void main(String[] args) {
       //1.键盘录入一个整数,代表年份
        Scanner sc = new Scanner(System.in);
        int year = sc.nextInt();
        //2.获取Calendar对象
        Calendar calendar = Calendar.getInstance();
        /*
          3.设置年月日
           set(year,2,1)
           设置的是国外的,国外的2月1日,相当于咱们得3月1日
         */
        calendar.set(year,2,1);
        calendar.add(Calendar.DATE,-1);
        int day = calendar.get(Calendar.DATE);
        if (day==29){
            System.out.println(year+"是闰年");
        }else {
            System.out.println(year+"不是闰年");
        }
    }
}

第六章.SimpleDateFormat 日期格式化类

1.SimpleDateFormat 介绍

java
1.概述:SimpleDateFormat extends DateFormat
2.作用:
  a.将Date对象按照指定的格式格式化成String
  b.将符合日期格式的String转成Date对象
3.构造:
  SimpleDateFormat(String pattern) -> 按照指定的日期格式创建SimpleDateFormat对象
4.方法:
  a.String format(Date date)-> 将Date对象按照指定格式转成String
  b.Date parse(String time) -> 按照符合日期格式的字符串转成Date对象
时间字母表示说明
y
M
d
H
m
s

字母不能改变,但是中间的连接符可以改变

java
public class Demo05DateFormat {
    public static void main(String[] args) throws ParseException {
        Date date = new Date();
        System.out.println("date = " + date);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String time = sdf.format(date);
        System.out.println("time = " + time);
        System.out.println("=========================");

        String time2 = "2000-10-10 10:10:10";
        Date date1 = sdf.parse(time2);
        System.out.println("date1 = " + date1);
    }
}

第七章.JDK8 新日期类

1. LocalDate 本地日期

1.1.获取 LocalDate 对象

java
1.概述:LocalDate是一个不可变的日期时间对象,表示日期,通常被视为年月日
2.作用:操作年月日
3.获取:
  a.static LocalDate now()  获取当前系统时间
  b.static LocalDate of(int year, int month, int dayOfMonth)  设置年月日
java
public class Demo06LocalDate {
    public static void main(String[] args) {
        LocalDate local1 = LocalDate.now();
        System.out.println("local1 = " + local1);

        System.out.println("======================");

        LocalDate local2 = LocalDate.of(2000, 10, 10);
        System.out.println("local2 = " + local2);
    }
}

1.2.LocalDateTime 对象

java
1.概述:LocalDateTime是一个不可变的日期时间对象,代表日期时间,通常被视为年 ----- 秒   2.作用:操作精确时间
3.获取:
  a.static LocalDateTime now()-> 获取当前系统时间
  b.static LocalDateTime of(int year, int month, int dayOfMonth, int hour, int minute, int second)-> 设置年月日时分秒
java
public class Demo07LocalDateTime {
    public static void main(String[] args) {
        LocalDateTime local1 = LocalDateTime.now();
        System.out.println("local1 = " + local1);

        System.out.println("=======================");
        LocalDateTime local2 = LocalDateTime.of(2000, 10, 10, 10, 10, 10);
        System.out.println("local2 = " + local2);
    }
}

1.3.获取日期字段的方法 : 名字是 get 开头

java
int getYear()->获取年份
int getMonthValue()->获取月份
int getDayOfMonth()->获取月中的第几天
java
public class Demo08LocalDate {
    public static void main(String[] args) {
        LocalDate local1 = LocalDate.of(2000, 10, 10);
        System.out.println(local1.getYear());
        System.out.println(local1.getMonthValue());
        System.out.println(local1.getDayOfMonth());
    }
}

1.4.设置日期字段的方法 : 名字是 with 开头

java
LocalDate withYear(int year):设置年份
LocalDate withMonth(int month):设置月份
LocalDate withDayOfMonth(int day):设置月中的天数
java
public class Demo09LocalDate {
    public static void main(String[] args) {
        LocalDate local1 = LocalDate.now();
        //System.out.println(local1);
        //LocalDate localDate1 = local1.withYear(2000);
        //System.out.println("localDate1 = " + localDate1);
        //LocalDate localDate2 = localDate1.withMonth(10);
        //System.out.println("localDate2 = " + localDate2);
        //LocalDate localDate3 = localDate2.withDayOfMonth(10);
        //System.out.println("localDate3 = " + localDate3);
        LocalDate localDate = local1.withYear(2000).withMonth(10).withDayOfMonth(10);
        System.out.println("localDate = " + localDate);
    }
}

1.5.日期字段偏移

java
设置日期字段的偏移量,方法名plus开头,向后偏移
设置日期字段的偏移量,方法名minus开头,向前偏移
java
public class Demo10LocalDate {
    public static void main(String[] args) {
        LocalDate localDate = LocalDate.now();

        //LocalDate localDate1 = localDate.plusYears(-1);
        //int year = localDate1.getYear();
        //System.out.println("year = " + year);

        LocalDate localDate1 = localDate.minusYears(1);
        System.out.println(localDate1.getYear());
    }
}

2.Period 和 Duration 类

2.1 Period 计算日期之间的偏差

java
1.作用:计算年月日时间偏差
2.方法:
  static Period between(LocalDate d1,LocalDate d2):计算两个日期之间的差值

  getYears()->获取相差的年
  getMonths()->获取相差的月
  getDays()->获取相差的天
java
public class Demo11Period {
    public static void main(String[] args) {
        LocalDate local1 = LocalDate.of(2023, 10, 10);
        LocalDate local2 = LocalDate.of(2024, 11, 9);

        Period period = Period.between(local1, local2);
        System.out.println(period.getYears());
        System.out.println(period.getMonths());
        System.out.println(period.getDays());
    }
}

2.2 Duration 计算时间之间的偏差

java
1.作用:计算精确时间
2.方法:
  static Duration between(Temporal startInclusive, Temporal endExclusive)  -> 计算时间差

  Temporal是一个接口,常用的实现类:LocalDate,LocalDateTime ,但是Duration是计算精确时间偏差的,所以这里传递能操作时分秒的LocalDateTime对象

3.利用Duration获取相差的时分秒 -> to开头
  toDays() :获取相差天数
  toHours(): 获取相差小时
  toMinutes():获取相差分钟
  toMillis():获取相差秒(毫秒)
java
public class Demo12Duration {
    public static void main(String[] args) {
        LocalDateTime local1 = LocalDateTime.of(2023, 10, 10, 10, 10, 10);
        LocalDateTime local2 = LocalDateTime.of(2024, 11, 11, 11, 11, 11);
        Duration duration = Duration.between(local1, local2);
        //toDays() :获取相差天数
        System.out.println(duration.toDays());
        //toHours(): 获取相差小时
        System.out.println(duration.toHours());
        //toMinutes():获取相差分钟
        System.out.println(duration.toMinutes());
        //toMillis():获取相差秒(毫秒)
        System.out.println(duration.toMillis());
    }
}

1.计算年月日时间偏差用 Period

2.计算精确时间偏差用 Duration

3.DateTimeFormatter 日期格式化类

java
1.获取:
  static DateTimeFormatter ofPattern(String pattern)   -> 获取对象,指定格式
2.方法:
  a.String format(TemporalAccessor temporal)-> 将日期对象按照指定的规则转成String
    TemporalAccessor:是一个接口,实现类有LocalDate以及LocalDateTime

  b.TemporalAccessor parse(CharSequence text)-> 将符合规则的字符串转成日期对象
1743411383790
java
public class Demo13DateTimeFormatter {
    public static void main(String[] args) {
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        LocalDateTime localDateTime = LocalDateTime.now();
        String format = dtf.format(localDateTime);
        System.out.println(format);

        System.out.println("=====================");

        String time = "2000-10-10 10:10:10";
        TemporalAccessor temporalAccessor = dtf.parse(time);
        System.out.println(temporalAccessor);

        LocalDateTime localDateTime1 = LocalDateTime.from(temporalAccessor);
        System.out.println("localDateTime1 = " + localDateTime1);

        //LocalDateTime localDateTime1 = LocalDateTime.parse(time, dtf);
        //System.out.println("localDateTime1 = " + localDateTime1);


    }
}

第八章.System 类

java
1.概述:系统相关工具类
2.特点:
  a.构造私有
  b.方法静态
3.使用:
  类名直接调用
方法说明
static long currentTimeMillis()获取当前系统时间毫秒值
static void exit(int status)退出当前正在执行的 jvm
static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)数组复制
src:源数组
srcPos:从源数组的哪个索引开始复制
dest:目标数组
destPos:从目标数组的哪个索引开始粘贴
length:复制多少个
java
public class Demo01System {
    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        for (int i = 0; i < 10; i++) {
            if (i==5){
                //退出正在执行的jvm
                //System.exit(0);
            }
            System.out.println("哈哈哈");
        }
        long end = System.currentTimeMillis();

        System.out.println(end-start);

        System.out.println("============================");

        int[] arr1 = {1,2,3,4,5,6};
        int[] arr2 = new int[10];
        System.arraycopy(arr1,0,arr2,0,2);
        System.out.println(Arrays.toString(arr2));
    }
}

第九章.Arrays 数组工具类

java
1.概述:数组工具类
2.作用:操作数组
3.特点:
  a.构造私有
  b.方法静态
4.使用:
  类名直接调用
方法说明
static void sort(int[] a)数组升序
static String toString(int[] a)将数组元素打印出来[元素 1,元素 2...]
static int binarySearch(int[] a, int key)二分查找,前提数组是升序的
static int[] copyOf(int[] original, int newLength)数组扩容,返回新数组
java
public class Demo02Arrays {
    public static void main(String[] args) {
        int[] arr = {5,4,3,2,1};
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));

        System.out.println("========================");

        int[] arr2 = {1,2,3,4,5,6,7,8,9};
        int index = Arrays.binarySearch(arr2, 5);
        System.out.println("index = " + index);

        System.out.println("==========================");

        int[] arr3 = {1,2,3,4,5};

        int[] newArr = Arrays.copyOf(arr3, 10);
        System.out.println(Arrays.toString(newArr));

    }
}
1743412692836