菜鸟之路Day06一一Java常用API

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: 《菜鸟之路Day06——Java常用API》由blue编写,发布于2025年1月24日。本文详细介绍了Java中常用的API,包括JDK7的时间类(Date、SimpleDateFormat、Calendar)和JDK8新增的时间API(ZoneId、Instant、DateTimeFormatter等),以及包装类的使用。通过多个实例练习,如时间计算、字符串转整数、十进制转二进制等,帮助读者巩固所学内容,提升编程技能。文章强调了理论与实践结合的重要性,鼓励读者多做练习以提高学习效率。

菜鸟之路Day06一一Java常用API

作者:blue

时间:2025.1.24

0.概述

学习内容来自,黑马程序员BV17F411T7Ao

今天是菜鸟之路的第六天,经过昨天的学习效率的下降,今天,我在看视频时,遇到练习,先自己做一遍。不再去管其有用或是没用,毕竟疑行无名,疑事无功。毕竟有算法的基础,这些练习还是相对来说比较简单的。加油吧,今天先下班。

1.JDK7时间类

1.1Date

1.1.1如何创建日期对象

//空参构造
//public Date()
Date date = new Date();

//带参构造
//public Date(long date)
Date date = new Date(指定毫秒值);

1.1.2如何修改时间对象中的毫秒值

//public void setTime(long time)

1.1.3如何获取时间对象的毫秒值

//public long getTime()

1.1.4练习

package Time;

import java.util.Date;
import java.util.Random;

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

        //需求1:打印时间原点开始一年之后的时间

        //分析:
        //1s=1000ms
        //1min=60*1000ms
        //1h=60*60*1000ms
        //1day=24*60*60*1000ms
        //1year=365*24*60*60*1000ms

        Date d = new Date(0L); //原始时间:Thu Jan 01 08:00:00 CST 1970
        System.out.println(d);

        Date d1 = new Date((365L*24*60*60*1000));//一年后的时间
        System.out.println(d1);


        //需求2:定义任意两个Date对象,比较哪个时间在前,哪个时间在后
        Random r = new Random();
        Date d2 = new Date(Math.abs(r.nextInt()));
        Date d3 = new Date(Math.abs(r.nextInt()));
        System.out.println(d2);
        System.out.println(d3);
        if(d3.getTime()>d2.getTime()){
   
            System.out.println("d3时间在后");
        }else{
   
            System.out.println("d2时间在后");
        }

    }
}

1.2SimpleDateFormat

1.2.1SimpleDateFormat的作用

①格式化 (日期对象 - > 字符串)

②解析 (字符串 - > 日期对象)

1.2.2方法

public SimpleDateFormat()//默认格式 1970/1/1
public SimpleDateFormat(String pattern) //指定格式化格式

public final String format(Date date)    //格式化    (日期对象 - > 字符串)
public Date parse(String source)     //解析    (字符串 - > 日期对象)

1.2.3练习

package Time;

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

public class SimpleDateFormatDemo1 {
   
    public static void main(String[] args) throws ParseException {
   
        method1();
        method2();
    }

    //练习1:
    private static void method1() throws ParseException {
   
        //需求:假设初恋出生日期为:2000-11-11
        //用字符串表示这个数据,并转换为:2000年11月11日

        String str = "2000-11-11";
        //细节:创建对象的格式要跟字符串的格式完全一致
        SimpleDateFormat sdf = new SimpleDateFormat("y-M-d");
        Date date = sdf.parse(str);//解析字符串,还原为日期对象

        SimpleDateFormat sdfNew = new SimpleDateFormat("y年M月d日");
        System.out.println(sdfNew.format(date));//将日期格式化为字符串
    }

    //练习2:
    private static void method2() throws ParseException {
   
        //秒杀开始时间:2023年11月11日 0:0:0
        //秒杀结束时间:2023年11月11日 0:10:0
        //需求:小贾2023年11月11日 0:01:0      小皮2023年11月11日 0:11:0
        //用代码说明他们又没有参加上秒杀活动

        String startTime = "2023年11月11日 0:0:0";
        String endTime = "2023年11月11日 0:10:0";

        String xjTime = "2023年11月11日 0:01:0";
        String xpTime = "2023年11月11日 0:11:0";

        //解析时间
        SimpleDateFormat sdf = new SimpleDateFormat("y年M月d日 H:m:s");
        Date start = sdf.parse(startTime);
        Date end = sdf.parse(endTime);
        Date xj = sdf.parse(xjTime);
        Date xp = sdf.parse(xpTime);

        if(xj.getTime()>=start.getTime()&&xj.getTime()<= end.getTime()){
   
            System.out.println("小贾成功参与活动");
        }
        else System.out.println("小贾没有成功参与活动");

        if(xp.getTime()>=start.getTime()&&xp.getTime()<= end.getTime()){
   
            System.out.println("小皮成功参与活动");
        }
        else System.out.println("小皮没有成功参与活动");
    }
}

1.2.4格式化规则

在API帮助文档中,可以清楚的查阅SimpleDateFormat的格式化规则

image-20250124103755561.png

1.3Calendar

个人感觉这个类作用不大,进在此记录一些基础的应用

细节点:日历类中月份的范围:0~11

​ 日历类中星期的特点:星期日是一周中的第一天

public static calendar getInstance() //获取当前时间的日历对象

public final Date getTime()    //获取日期对象

public final setTime(Date date)//给日历设置日期对象

public long getTimeInMillis()//拿到时间亳秒值

public void setTimeInMillis(long millis)//给日历设置时间亳秒值

public int get(int field)//取日期中的某个字段信息

public void set(int field,int value)//修改日历的某个字段信息

public void add(int field,int amount)//为某个字段增加/减少指定的值

2.JDK8新增时间API

JDK8新增的时间对象都是不可变的

如果我们修改了,减少了,增加了时间

那么调用者是不会发生改变的,而是会产生一个新的时间对象

(JDK8这种设计对并发编程大有好处)

对一下API混个眼熟,大概知道是干什么用的,真正要用的时候,查帮助文档

2.1ZoneId(时区类)

static Set<String> getAvailableZoneIds() //获取Java中支持的所有时区

static ZoneId systemDefault() //获取系统默认时区

static ZoneId of(String zoneId) //获取一个指定时区

2.2Instant(时间戳)

static Instant now() //获取当前时间的Instant对象(标准时间)
static Instant ofXxxx(long epochMilli)//根据(秒/毫秒/纳秒)获取Instant对象
ZonedDateTime atZone(ZoneId zone)//指定时区

boolean isXxx(Instant otherInstant)//判断系列方法
    /*
        例子:isAfter:判断调用者代表的时间是否在参数表示时间的后面
        boolean res = instant4.isAfter(instant5);
    */

Instant minusXxx(long millisToSubtract)//减少时间系列的方法
Instant plusXxx(long millisToSubtract)//增加时间系列方法

2.3DateTimeFormatter(日期格式化类)

public static void main(String[] args) {
   
        /*
            static DateTimeFormatter ofPattern(格式)   获取格式对象
            String format(时间对象)                     按照指定方式格式化
        */
        System.out.println(ZoneId.getAvailableZoneIds()); //看看支持的时区
        ZonedDateTime time = Instant.now().atZone(ZoneId.of("Asia/Chongqing"));//获得一个带时区的时间
        DateTimeFormatter df = DateTimeFormatter.ofPattern("y年M月d日 H时m分s秒");
        System.out.println(df.format(time));//格式化

    }

2.4LocalDate,LocalTime,LocalDateTime

至于那些修改的方法,还是查文档吧............混个眼熟

public static void main(String[] args) {
   
        //LocalDate 年,月,日
        //LocalTime 时,分,秒
        //LocalDateTime 年,月,日,时,分,秒

        System.out.println(LocalDate.now());//2025-01-24
        System.out.println(LocalTime.now());//12:36:39.439642
        System.out.println(LocalDateTime.now());//2025-01-24T12:36:39.439642
    }

2.5计算时间间隔的类

Duration:用于计算两个“时间”间隔(秒,纳秒)

Period:用于计算两个“日期”间隔(年,月,日)

ChronoUnit:用于计算两个“日期”间隔

3.包装类

包装类:用一个对象,把基本数据类型给包起来,现在包装类都会自动拆箱和装箱,不需要再去new,直接当基本数据类型使用即可。包装类比起基本数据类型,内置了许多有用的方法,提升了开发效率,并且将基本数据类型进行包装后,方便了其在集合框架内使用。

8种包装类:

  • Integer 对应 int
  • Long 对应 long
  • Double 对应 double
  • Float 对应 float
  • Character 对应 char
  • Boolean 对应 boolean
  • Byte 对应 byte
  • Short 对应 short

8种包装类当中,除了Character都有对应的parseXxx方法,进行类型转换,故而我们的键盘录入格式可以改写为以下这种更优秀的格式。直接接收一整行数据,这样避免了字符串不能接收空格,接收完了再做类型转换.统一了接收格式

public static void main(String[] args) {
   
        Scanner sc = new Scanner(System.in);
        String line = sc.nextLine();//直接接收整行数据
        int x = Integer.parseInt(line);
        double y = Double.parseDouble(line);
        System.out.println(x);
        System.out.println(y);
    }

4.综合练习

练习一

需求:键盘录入一些1-100之间的整数,并添加到集合中,直到集合中所有的数据和超过200为止

    public static void main(String[] args) {
   
        ArrayList<Integer> list = new ArrayList<>();
        Scanner sc = new Scanner(System.in);
        int sum = 0;
        System.out.println("请输入1-100以内的整数");
        while(sum<200){
   
            int x = Integer.parseInt(sc.nextLine());
            if(x<1||x>100){
   
                System.out.println("输入有误,请输入1-100以内的整数");
                continue;
            }
            sum+=x;
            list.add(x);
        }
        for (Integer i : list) {
   
            System.out.print(i+" ");
        }
    }

练习二

自己实现parseInt方法的效果,将字符串形式的数据转成整数。要求:
1.字符串中只能是数字不能有其他字符
2.最少一位,最多10位
3.0不能开头

import java.util.Scanner;

public class Test2 {
   
    public static void main(String[] args) {
   
        int ans;
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        while(true){
   
            if(check(str)){
   
                ans = StringToInt(str);
                break;
            }
            else {
   
                System.out.println("输入有误,请重新输入:");
                str = sc.nextLine();
            }
        }
        System.out.println(ans);
    }

    private static boolean check(String str) {
   //检查是否符合条件
        if(str.charAt(0)=='0') return false;//0不能开头
        if(str.length()>10) return false;//最少一位,最多10位
        for(int i = 0; i< str.length(); i++){
   //字符串中只能是数字不能有其他字符
            char c = str.charAt(i);
            if(c<'0'||c>'9'){
   
                return false;
            }
        }
        return true;
    }

    private static int StringToInt(String str){
   //字符串转整数
        int res = 0;
        for(int i = 0; i< str.length(); i++){
   
            char c = str.charAt(i);
            res=res*10+(c-'0');
        }
        return res;
    }
}

其中check方法我们也可以用正则表达式来改写

private static boolean check2(String str){
   
    return str.matches("[1-9]\\d{0,9}");
}//优雅

练习三

定义一个方法自己实现toBinaryString方法的效果,将一个十进制的整数转成字符串表示的二进制

public class Test3 {
   
    public static void main(String[] args) {
   
        System.out.println(IntToBinaryString(100));
    }
    private static String IntToBinaryString(int num){
   
        StringBuilder sb = new StringBuilder();
        while(num!=0){
   
            sb.append(num%2);
            num/=2;
        }
        return sb.reverse().toString();
    }
}

练习四

计算你活了多少天,用JDK7和JDK8两种方式完成

public class Test4 {
   
    public static void main(String[] args) throws ParseException {
   
        //JDK7
        SimpleDateFormat sdf = new SimpleDateFormat("y-M-d");
        Date now = sdf.parse("2025-1-24");
        Date birth = sdf.parse("2003-8-13");
        long time = (now.getTime()-birth.getTime())/1000L/60/60/24;
        System.out.println("我活了"+time+"天");

        //JDK8
        LocalDate ld1 = LocalDate.of(2003,8,13);
        LocalDate ld2 = LocalDate.now();
        long days = ChronoUnit.DAYS.between(ld1,ld2);
        System.out.println("我活了"+days+"天");
    }
}

练习五

public class Test5 {
   
    public static void main(String[] args) {
   
        //JDK7
        Calendar c = Calendar.getInstance();
        c.set(2000,2,1);//月份的范围:0-11    所以这个表示2000-3-1
        //把日历往前减一天
        c.add(Calendar.DAY_OF_MONTH,-1);
        //看当前时间是28还是29
        int day = c.get(Calendar.DAY_OF_MONTH);
        System.out.println(day);

        //JDK8
        //月份的范围:1~12
        LocalDate ld = LocalDate.of(2000,3,1);
        LocalDate ld2 = ld.minusDays(1);
        int day2 = ld2.getDayOfMonth();
        System.out.println(day2);
    }
}
目录
相关文章
|
2月前
|
Java API Maven
如何使用Java开发抖音API接口?
在数字化时代,社交媒体平台如抖音成为生活的重要部分。本文详细介绍了如何用Java开发抖音API接口,从创建开发者账号、申请API权限、准备开发环境,到编写代码、测试运行及注意事项,全面覆盖了整个开发流程。
406 10
|
2月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
120 2
|
20天前
|
JSON Java 数据挖掘
利用 Java 代码获取淘宝关键字 API 接口
在数字化商业时代,精准把握市场动态与消费者需求是企业成功的关键。淘宝作为中国最大的电商平台之一,其海量数据中蕴含丰富的商业洞察。本文介绍如何通过Java代码高效、合规地获取淘宝关键字API接口数据,帮助商家优化产品布局、制定营销策略。主要内容包括: 1. **淘宝关键字API的价值**:洞察用户需求、优化产品标题与详情、制定营销策略。 2. **获取API接口的步骤**:注册账号、申请权限、搭建Java开发环境、编写调用代码、解析响应数据。 3. **注意事项**:遵守法律法规与平台规则,处理API调用限制。 通过这些步骤,商家可以在激烈的市场竞争中脱颖而出。
|
1月前
|
JSON Java Apache
Java基础-常用API-Object类
继承是面向对象编程的重要特性,允许从已有类派生新类。Java采用单继承机制,默认所有类继承自Object类。Object类提供了多个常用方法,如`clone()`用于复制对象,`equals()`判断对象是否相等,`hashCode()`计算哈希码,`toString()`返回对象的字符串表示,`wait()`、`notify()`和`notifyAll()`用于线程同步,`finalize()`在对象被垃圾回收时调用。掌握这些方法有助于更好地理解和使用Java中的对象行为。
|
1月前
|
算法 Java API
如何使用Java开发获得淘宝商品描述API接口?
本文详细介绍如何使用Java开发调用淘宝商品描述API接口,涵盖从注册淘宝开放平台账号、阅读平台规则、创建应用并申请接口权限,到安装开发工具、配置开发环境、获取访问令牌,以及具体的Java代码实现和注意事项。通过遵循这些步骤,开发者可以高效地获取商品详情、描述及图片等信息,为项目和业务增添价值。
95 10
|
1月前
|
存储 Java 数据挖掘
Java 8 新特性之 Stream API:函数式编程风格的数据处理范式
Java 8 引入的 Stream API 提供了一种新的数据处理方式,支持函数式编程风格,能够高效、简洁地处理集合数据,实现过滤、映射、聚合等操作。
89 6
|
1月前
|
Java API 开发者
Java中的Lambda表达式与Stream API的协同作用
在本文中,我们将探讨Java 8引入的Lambda表达式和Stream API如何改变我们处理集合和数组的方式。Lambda表达式提供了一种简洁的方法来表达代码块,而Stream API则允许我们对数据流进行高级操作,如过滤、映射和归约。通过结合使用这两种技术,我们可以以声明式的方式编写更简洁、更易于理解和维护的代码。本文将介绍Lambda表达式和Stream API的基本概念,并通过示例展示它们在实际项目中的应用。
|
2月前
|
安全 Java API
告别SimpleDateFormat:Java 8日期时间API的最佳实践
在Java开发中,处理日期和时间是一个基本而重要的任务。传统的`SimpleDateFormat`类因其简单易用而被广泛采用,但它存在一些潜在的问题,尤其是在多线程环境下。本文将探讨`SimpleDateFormat`的局限性,并介绍Java 8引入的新的日期时间API,以及如何使用这些新工具来避免潜在的风险。
51 5
|
2月前
|
开发框架 Java 关系型数据库
Java哪个框架适合开发API接口?
在快速发展的软件开发领域,API接口连接了不同的系统和服务。Java作为成熟的编程语言,其生态系统中出现了许多API开发框架。Magic-API因其独特优势和强大功能,成为Java开发者优选的API开发框架。本文将从核心优势、实际应用价值及未来展望等方面,深入探讨Magic-API为何值得选择。
104 2
|
2月前
|
缓存 监控 Java
如何运用JAVA开发API接口?
本文详细介绍了如何使用Java开发API接口,涵盖创建、实现、测试和部署接口的关键步骤。同时,讨论了接口的安全性设计和设计原则,帮助开发者构建高效、安全、易于维护的API接口。
274 4