Java接口--Java common API

19 阅读5分钟

首先,学会查阅API文档并合理利用浏览器搜索是快速进步的一种方式。


下文有几个Java中常用的API

一、Scanner 类

通过 Scanner 类来获取用户的输入:

import java.util.Scanner; 
 
public class ScannerDemo {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        // 从键盘接收数据
 
        // next方式接收字符串
        System.out.println("next方式接收:");
        // 判断是否还有输入
        if (scan.hasNext()) {
            String str1 = scan.next();
            String str2 = scan.nextLine();
            System.out.println("输入的数据为:" + str1);
            System.out.println("输入的数据为:" + str2);
        }
        scan.close();
    }
}
$ javac ScannerDemo.java
$ java ScannerDemo

next方式接收:
runoob com
输入的数据为:runoob
输入的数据为:runoob com

思考在实例化一个String类型对象str1后,是否可以举一反三实例化一个int类型的对象?

此时考虑到存在方法的重载,直接将String改为int,发现IDEA标红不通过。

接着查看“ scan. ”,发现此实例化对象还可以使用nextInt()方法,且返回值为int类型。

Ctrl点击此方法查看源码,可以通过代码文档注释理解用法,同样也可以在浏览器查询此方法来理解一个新了解到的方法。

发现默认时使用的是十进制,可以通过方法中参数添加将其更改为二进制传递。

int str1 = scan.nextInt(2);

这就是我们举一反三学习一个类中新方法的操作。


二、Number类

当需要使用数字的时候,我们通常使用内置数据类型,如:byte、int、long、double 等。

然而,在实际开发过程中,我们经常会遇到需要使用对象,而不是内置数据类型的情形。为了解决这个问题,Java 语言为每一个内置数据类型提供了对应的包装类 (Integer、Long、Byte、Double、Float、Short),它们都是抽象类 Number 的子类。

包装类

Number类显然是抽象类。

由编译器特别支持的包装称为装箱,所以当内置数据类型被当作对象使用的时候,编译器会把内置类型装箱为包装类。

相似的,编译器也可以把一个对象拆箱为内置类型。Number 类属于 java.lang 包。



三、Math类

Math类被定义为final类,类中方法都被定义为静态(static)方法,目的是在静态main函数里面直接使用。

编写工具类时,其中方法可以定义成static方法,方便直接使用。



四、Random类

Random random = new Random(long seed);
int i = random.nextInt(bound:10);
// bound是设置的随机数界限
System.out.println(i);

随机数生成算法中存在“种子”

当不手动指定种子时,Random默认使用时间戳作为种子



五、ThreadLocalRandom类

Random类中提供的Random.nextDouble()和Random.nextFloat()只保证0.0~1.0的界限。

Random 如果我们想限制随机数生成的界限时,除了使用“加减乘除”的方式,还可以直接使用Random的子类ThreadLocalRandom类。

ThreadLocalRandom

double i = ThreadLocalRandom.current().nextDouble(origin:0.9, bound:1.5);
// origin和bound是设置的随机数界限
System.out.println(i);

ThreadLocalRandom类多线程随机数生成,性能较Random相比更高。



六、Date类

返回系统当前时间:

import java.util.Date; 
 
public class DateDemo {
    public static void main(String[] args) {
        Date date1 = new Date();
        // Unix时间戳,以毫秒为准,需要乘以1000转换为秒
        Date date2 = new Date(1L*1000);
        System.out.println(date1.toString());
        System.out.println(date2.toString());
        // 获取当前时间的时间戳
         System.out.println(new Date().getTime());
    }
}
Tue Mar 22 19:07:07 CST 2022
Thu Jan 01 08:00:01 CST 1970
1647947227518


七、DateFormat类和SimpleDateFormat类

Data类中很多方式都已经过时(Deprecated)

我们通常使用DateFormat类来对时间进行格式化操作

DateFormat类是一个abstract(抽象类)

SimpleDateFormat类则是此抽象类的子类


用SimpleDateFormat类实例化一个规定格式的对象

不论Date值如何改变,都使其以规定的格式输出

/**
  (查看API文档)
  SimpleDateFormat函数语法:
  G 年代标志符
  y 年
  M 月
  d 日
  h 时 在上午或下午 (1~12)
  H 时 在一天中 (0~23)
  m 分
  s 秒
  S 毫秒
  E 星期
  D 一年中的第几天
  F 一月中第几个星期几
  w 一年中第几个星期
  W 一月中第几个星期
  a 上午 / 下午 标记符
  k 时 在一天中 (1~24)
  K 时 在上午或下午 (0~11)
  z 时区
 */

import java.util.Date; 
import java.util.DateFormat; 
import java.util.SimpleDateFormat; 
 
public class SimpleDateFormatDemo {
    public static void main(String[] args) {
        Date date = new Date(); 
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
        // format()方法将给定日期格式化为Date/Time字符串。
        System.out.println(simpleDateFormat.format(date));
    }
}
2022-03-22 19:20:46

将规定格式的字符串转换为Date标准输出格式

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

public class Test {
    public static void main(String[] args) throws ParseException {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String nowTime = "2022-03-22 19:20:46";
        // parse: 按指定的源格式把String转换为Date对象
        Date date = simpleDateFormat.parse(nowTime);
        System.out.println(date);
        // format: 按指定的目标格式把Date对象转换为String
        System.out.println(simpleDateFormat.format(date));
    }
}
Tue Mar 22 19:20:46 CST 2022
2022-03-22 19:20:46


八、Calendar类

推荐使用日期类

Calendar并非单例模式

常量:

import java.util.Calendar;

Calendar calendar = Calendar.getInstance();
calendar.get(Calendar.DATE);//-----------------------
calendar.get(Calendar.DAY_OF_MONTH);//---------------某月中当天为第几天
calendar.get(Calendar.DAY_OF_WEEK);//----------------从星期天开始计算,如果今天星期二,则返回3
calendar.get(Calendar.DAY_OF_YEAR);//----------------
calendar.get(Calendar.HOUR);//-----------------------12小时制
calendar.get(Calendar.HOUR_OF_DAY);//----------------24小时制,一般使用此属性赋值
calendar.get(Calendar.MILLISECOND);//----------------
calendar.get(Calendar.MINUTE);//---------------------
calendar.get(Calendar.SECOND);//---------------------
calendar.get(Calendar.WEEK_OF_MONTH);//--------------
calendar.get(Calendar.WEEK_OF_YEAR);//---------------
calendar.get(Calendar.MONTH);//-----------------------月份获取需要 +1,赋值时需要 -1

// 赋值时,week 与 month 是很值得注意的,week 需要指定 setFirstDayOfWeek , 然而,月份则需要加减 1。我们一般采用 年 月 日 时 分 秒( Calendar.YEAR 、Calendar.MONTH 、Calendar.DAY_OF_MONTH、 Calendar.HOUR_OF_DAY 、Calendar.MINUTE、 Calendar.SECOND )

赋值:

Calendar.set(Calendar.XXX, VVVV);//--------------------- 对以上每个字段(field)进行赋值
Calendar.set(year,month,date,hour,minute,second);//----- 分别对字段(field)进行赋值,效率高


java的Calendar类



九、System类

系统级别的,性能可能更高

final定义的类,可以直接使用

获取当前时间戳:

public class Main {
    public static void main(String[] args) {
        System.out.println(System.currentTimeMillis());
    }
}
1647954226672