Java进阶13讲__第四讲

本讲主要内容:

1.API    

2.时间

3.Arrays类

 一、API

1.Object

1.equals:重写后用于比较对象的内容

2.clone:了解

克隆分为浅克隆深克隆:

2.Objects

3.包装类

4.StringBuilder


5.StringBuffer

6.StringJoiner

7.Math

8.System

9.Runtime

package cn.hdc.oop4.api.Runtime;

import java.io.IOException;

public class Test {
    public static void main(String[] args) throws IOException, InterruptedException {
        Runtime r = Runtime.getRuntime();
        System.out.println(r.availableProcessors());
//        r.exit(0);
        System.out.println(r.totalMemory() / Math.pow(1024.0, 2));
        System.out.println(r.freeMemory() / Math.pow(1024.0, 2));
        Process exec = r.exec("S:\\WeChat\\WeChat.exe");
        Thread.sleep(5000);
        exec.destroy();

    }
}

10.BigDecimal

package cn.hdc.oop4.api.BigDecimal;

import java.math.BigDecimal;
import java.math.RoundingMode;

public class Test {
    public static void main(String[] args) {
        double a = 0.1;
        double b = 0.2;
//        BigDecimal a1 = new BigDecimal(a);
//        BigDecimal b1 = new BigDecimal(b);
//        BigDecimal a1 = new BigDecimal(Double.toString(a));
//        BigDecimal b1 = new BigDecimal(Double.toString(b));
//        BigDecimal a1 = new BigDecimal(String.valueOf(a));
//        BigDecimal b1 = new BigDecimal(String.valueOf(b));
        BigDecimal a1 = BigDecimal.valueOf(a);
        BigDecimal b1 = BigDecimal.valueOf(b);
        System.out.println(a1.add(b1));//加法
        System.out.println(a1.subtract(b1));//减法
        System.out.println(a1.multiply(b1));//乘法
        System.out.println(a1.divide(b1));//除法
        /*Bigecimal只做精确运算*/
        BigDecimal b2 = BigDecimal.valueOf(0.1);
        BigDecimal b3 = BigDecimal.valueOf(0.3);
        /*0.1/0.3除不尽,设置余数位数2,RoundingMode.HALF_UP四舍五入*/
        System.out.println(b2.divide(b3, 2, RoundingMode.HALF_UP));//除法
        BigDecimal c = b2.add(b3);
        System.out.println(c.doubleValue());
    }
}

2.时间

1.Date

package cn.hdc.oop4.date.date;

import javax.xml.crypto.Data;
import java.util.Date;

public class Test {
    public static void main(String[] args) {
//        1.创建一个Date的对象,代表系统当前时间
        Date date = new Date();
        System.out.println(date);
//        2.拿到当前时间的毫秒值
        System.out.println(date.getTime());
//        3.把时间毫秒值转换成日期对象  80s之后是多少
        long time = date.getTime() + 80 * 1000;
        Date d2 = new Date(time);
        System.out.println(d2);
//        4.直接把日期对象的时间通过setTime方法进行修改
        Date d3 = new Date();
        d3.setTime(time);
        System.out.println(d3);
    }
}

2.SimpleDateFormat

public class Test {
    public static void main(String[] args) {
        Date d = new Date();
        System.out.println(d);
        long time = d.getTime();
        System.out.println(time);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss EEE a");
        System.out.println(sdf.format(d));
        System.out.println(sdf.format(time));
    }
}

        String dstr = "2024-08-08 09:19:10";
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date d2 = format.parse(dstr);
        System.out.println(d2);

3.Calendar

import java.util.Calendar;

public class Test {
    public static void main(String[] args) {
        Calendar now = Calendar.getInstance();
        System.out.println(now);
        //获取日历中的某个信息
        int year = now.get(Calendar.YEAR);
        System.out.println(year);
        System.out.println(now.get(Calendar.MONTH) + 1);
        System.out.println(now.get(Calendar.DAY_OF_YEAR));
        System.out.println(now.getTime());
        now.set(Calendar.MONTH, 11);
        System.out.println(now.getTime());
        System.out.println(now.getTimeInMillis());
        
    }
}

4.JDK8新增日期、时间

1.LocalDate

package cn.hdc.oop4.date.jdk8.localdate;

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.Month;

public class Test {
    public static void main(String[] args) {
//       获取本地日期对象
        LocalDate l = LocalDate.now();
//        获取日期对象中的信息
        int year = l.getYear();
        int monthValue = l.getMonthValue();
        Month month = l.getMonth();
        int dayOfMonth = l.getDayOfMonth();
        int dayOfYear = l.getDayOfYear();
        DayOfWeek dayOfWeek = l.getDayOfWeek();
        int value = l.getDayOfWeek().getValue();
//        直接修改某个信息
        LocalDate year2 = l.withYear(2099);
        LocalDate mont1 = l.withMonth(11);
        LocalDate dayOfYear1 = l.withDayOfYear(12);
        LocalDate dayOfMonth1 = l.withDayOfMonth(11);
//        把某个信息加多少
        LocalDate plusDays = l.plusDays(1);
        LocalDate plusMonths = l.plusMonths(1);
        LocalDate plusWeeks = l.plusWeeks(1);
        LocalDate plusYears = l.plusYears(1);
//        把某个信息减多少
        LocalDate minusDays = l.minusDays(1);
        LocalDate minusYears = l.minusYears(1);
        LocalDate minusMonths = l.minusMonths(1);
        LocalDate minusWeeks = l.minusWeeks(1);
//        获取指定日期的LocalDate对象
        LocalDate l1 = LocalDate.of(2025, 12, 30);
        LocalDate l2 = LocalDate.of(2027, 12, 30);
//        判断2个日期对象,是否相等,在前还是在后:equals isBefore isAfter
        System.out.println(l1.equals(l2));
        System.out.println(l1.isBefore(l2));
    }
}

2.LocalTime

import java.time.LocalTime;

public class Test {
    public static void main(String[] args) {
        LocalTime l = LocalTime.now();
        int nano = l.getNano();
        int hour = l.getHour();
        int minute = l.getMinute();
        int second = l.getSecond();
    }
}

3.LocalDateTime

import java.time.*;

public class Test {
    public static void main(String[] args) {
//       获取本地日期对象
        LocalDateTime l = LocalDateTime.now();
//        获取日期对象中的信息
        int year = l.getYear();
        int monthValue = l.getMonthValue();
        Month month = l.getMonth();
        int dayOfMonth = l.getDayOfMonth();
        int dayOfYear = l.getDayOfYear();
        DayOfWeek dayOfWeek = l.getDayOfWeek();
        int value = l.getDayOfWeek().getValue();
        int nano = l.getNano();
        int hour = l.getHour();
        int minute = l.getMinute();
        int second = l.getSecond();
//        合久必分
        LocalDate localDate = l.toLocalDate();
        LocalTime localTime = l.toLocalTime();
//        分久必合
        LocalDateTime of = LocalDateTime.of(localDate, localTime);
        
    }
}

总结:

4.ZoneId

package cn.hdc.oop4.date.jdk8.zoneid;

import java.time.Clock;
import java.time.ZoneId;
import java.time.ZonedDateTime;

public class Main {
    public static void main(String[] args) {
//        ZoneId常见用法
//        获取系统默认的时区
        ZoneId zoneId = ZoneId.systemDefault();
        System.out.println(zoneId.getId());
        System.out.println(zoneId);
//        获取Java支持的全部时区
//        System.out.println(ZoneId.getAvailableZoneIds());
//        把某个时区ID封装成ZoneId对象
        ZoneId zoneId1 = ZoneId.of("America/New_York");
        ZonedDateTime now = ZonedDateTime.now(zoneId1);
        System.out.println(now);
//        世界标准时间
        System.out.println(ZonedDateTime.now(Clock.systemUTC()));
//        系统默认时区的时间
        ZonedDateTime now1 = ZonedDateTime.now();
        System.out.println(now1);
    }
}

5.ZoneDateTime

6.Instant

7.DateTimeFormatter

package cn.hdc.oop4.date.jdk8.dateTimeFormatter;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class Main {
    public static void main(String[] args) {
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
//        对时间进行格式化
        LocalDateTime now = LocalDateTime.now();
        System.out.println(now);
        System.out.println(dtf.format(now));
//        格式化时间还有一种方案
        System.out.println(now.format(dtf));//反向格式化
//        解析时间:一般使用LocalDateTime提供的方法进行解析
        String str = "2029年12月12日 12:12:12";
        LocalDateTime parse = LocalDateTime.parse(str, dtf);
        System.out.println(parse);
    }
}

8.Period

package cn.hdc.oop4.date.jdk8.Period;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.Period;

public class Main {
    public static void main(String[] args) {
        LocalDate start = LocalDate.of(2001, 10, 8);
        LocalDate now = LocalDate.of(2024, 11, 9);
        Period period = Period.between(start, now);
        System.out.println(period.getYears());
        System.out.println(period.getDays());
        System.out.println(period.getMonths());
    }
}

9.Duration

package cn.hdc.oop4.date.jdk8.Duration;

import java.time.Duration;
import java.time.LocalDateTime;

public class Main {
    public static void main(String[] args) {
        LocalDateTime now = LocalDateTime.now();
        LocalDateTime start = LocalDateTime.of(2001, 10, 8, 3, 24, 16);
        Duration between = Duration.between(start, now);
        System.out.println("间隔天数" + between.toDays());
        System.out.println("间隔小时数" + between.toHours());
        System.out.println("间隔毫秒数" + between.toMillis());
        System.out.println("间隔秒数" + between.toSeconds());
        System.out.println("间隔分钟数" + between.toMinutes());
        System.out.println("间隔纳秒数" + between.toNanos());
    }
}

3.Arrays类

1.Arrays类

package cn.hdc.oop4.arrays;

import java.util.Arrays;
import java.util.function.IntToDoubleFunction;
import java.util.function.IntUnaryOperator;

public class arrays_initialize {
    public static void main(String[] args) {
        int[] arr = new int[]{10, 20, 30, 40, 50, 60};
        double[] d = new double[]{10.5, 20.5, 30.5, 40.5, 50.5, 60.5};
        System.out.println(Arrays.toString(arr));
        System.out.println(Arrays.toString(Arrays.copyOfRange(d, 1, 3)));
        System.out.println(Arrays.toString(Arrays.copyOf(arr, 8)));
        Arrays.setAll(arr, new IntUnaryOperator() {
            @Override
            public int applyAsInt(int operand) {
                return arr[operand] * 8;
            }
        });
        System.out.println(Arrays.toString(arr));
        int[] sort = new int[]{210, 520, 130, 440, 950, 670};
        Arrays.sort(sort);
        System.out.println(Arrays.toString(sort));
    }
}

2.自定义排序规则

1.方式一

Student.java

package cn.hdc.oop4.arrays;

public class Student implements Comparable<Student> {
    private String name;
    private int age;
    private double height;

    public Student() {
    }

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

    getter...    setter... toString...

    @Override
    public int compareTo(Student o) {
//        约定:如果左边对象 大于 右边对象 返回正整数
//        约定:如果左边对象 小于 右边对象 返回负整数
//        约定:如果左边对象 等于 右边对象 返回0
//        按照年龄升序排序
//        return this.age > o.getAge() ? 1 : this.age < o.getAge() ? -1 : 0;//升序
//        return this.age - o.getAge();//升序
        return o.getAge() - this.age;//降序序
    }
}

 Sort1.java

package cn.hdc.oop4.arrays;

import java.util.Arrays;

public class Sort1 {
    public static void main(String[] args) {
        Student s1 = new Student("wsn", 27, 165);
        Student s2 = new Student("wzn", 21, 150);
        Student s3 = new Student("jsz", 25, 178);
        Student s4 = new Student("wyz", 23, 180);
        Student[] arr = {s1, s2, s3, s4};
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));
    }
}

2.方式二

Teacher.java

package cn.hdc.oop4.arrays;

public class Teacher {
    private String name;
    private int age;
    private double height;

    constructor... getter... setter... toString...

}

Sort2.java

package cn.hdc.oop4.arrays;

import java.util.Arrays;
import java.util.Comparator;

public class Sort2 {
    public static void main(String[] args) {
        Teacher s1 = new Teacher("wsn", 27, 165);
        Teacher s2 = new Teacher("wzn", 21, 150);
        Teacher s3 = new Teacher("jsz", 25, 178);
        Teacher s4 = new Teacher("wyz", 23, 180);
        Teacher[] arr = {s1, s2, s3, s4};
        Arrays.sort(arr, new Comparator<Teacher>() {
            @Override
            public int compare(Teacher o1, Teacher o2) {
//                return o1.getAge() - o2.getAge();
//                return o1.getHeight() > o2.getHeight() ? 1 : o1.getHeight() < o2.getHeight() ? -1 : 0
                return Double.compare(o1.getHeight(), o2.getHeight());
            }
        });
        System.out.println(Arrays.toString(arr));
    }
}

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值