Java进阶—Base API

一.引言 

Java入门-CSDN博客 

前接Java入门课,该课属于Java进阶阶段 

二.API的定义与用途 

  • API是应用程序接口,是为了方便客户和开发人员使用,以实现某种功能
  • Java API就是提供给JAVA工程师的一种方法库,API文档中拥有Java 的大部分知识
  • 这些API就是一些JDK里面给我们的类,这些类已经封装完成,在使用过程中只需要了解它的功能
  • 同时我们书写API也是将API写好,最后由别的工程师去利用

三.Scanner(普通类) 

我们在Java入门中讲到了Scanner类,这里是进阶;

Java进阶—Base API_第1张图片

Java进阶—Base API_第2张图片

从上面的图片可以看出,nextInt有两个Java进阶—Base API_第3张图片

我们使用Ctrl点进去看看 Java进阶—Base API_第4张图片

看不懂英语可以翻译,如果还是不懂可以,拷贝public Boolean hasNextInt(int radix)上Google问一问,翻译与搜索得出两个nextInt一个表示十进制,一个表示自定义进制; Java进阶—Base API_第5张图片Java进阶—Base API_第6张图片Java进阶—Base API_第7张图片

四. Number(包装类)

Number类是使用面向对象的思想重新定义了数据类型,将全部的数字数据类型变成一个对象,并且全部继承Number类中,对这些数据类型进行维护,并且为这些数据类型提供相应的方法;

Java进阶—Base API_第8张图片Java进阶—Base API_第9张图片Java进阶—Base API_第10张图片

使用Ctrl点住Double,查看 Java进阶—Base API_第11张图片

可以看出Double类继承Number类,我们点进Number类看看Java进阶—Base API_第12张图片

从上面可以看出基本类型变量中的数字类型变量,全部以面向对象的思想重写了一遍; 


        Double arrOne = 33.33;
        double arrTwo = 22.22;

Java进阶—Base API_第13张图片

Java进阶—Base API_第14张图片

从上可以看出Double定义的arrOne是一个对象可以使用一些写好的方法,而double定义的arrTwo不是一个对象,是一个变量;

接下来我们要说Number称为包装类的原因;

        // 这种由编译器特别支持的包装称为装箱;
        // 所以当内置数据类型被当作对象使用的时候,编译器会把内置类型装箱为包装类。
        Double str = 2.1; // str装箱,拿来赋值

        // 相似的,编译器也可以把一个对象拆箱为内置类型。Number 类属于 java.lang 包。
       str = str + 11.1; // str拆箱,拿出来用

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

方法 

Java Number & Math 类 | 菜鸟教程 (runoob.com)

1.xxxValue() 方法用于将 Number 对象转换为 xxx 数据类型的值并返回。Java进阶—Base API_第15张图片

        Integer x = 5;
        // 返回 byte 原生数据类型
        System.out.println( x.byteValue() );

        // 返回 short 原生数据类型
        System.out.println( x.shortValue());

        // 返回 long 原生数据类型
        System.out.println( x.longValue() );

        // 返回 float 原生数据类型
        System.out.println(x.floatValue());

        // 返回 double 原生数据类型
        System.out.println(x.doubleValue());

Java进阶—Base API_第16张图片

2.equals() 方法用于判断 Number 对象与方法的参数进是否相等。

       Integer number1 = 3;
       Integer number2 = 3;
       Double  number3 = 3.00D;
       Short   number4 = 3;

        System.out.println(number1.equals(number2));
        System.out.println(number1.equals(number3));
        System.out.println(number1.equals(number4));

 Java进阶—Base API_第17张图片

五.Math(工具类) 

Java 的 Math 包含了用于执行基本数学运算的属性和方法,如初等指数、对数、平方根和三角函数

Math类在使用时不用new一个对象,只要Math.方法就可以使用这个方法,Math的方法都被定义为 static 形式,通过 Math 类可以在主函数中直接调用;

Java Number & Math 类 | 菜鸟教程 (runoob.com)例如,取大的值函数为Math.max(),就是一个螺丝刀(Math)拧螺丝(max()),没有必要每一次拧螺丝的时候都买一把新刀:Java进阶—Base API_第18张图片

 Java Number & Math 类 | 菜鸟教程 (runoob.com)

 1.abs() 返回参数的绝对值。参数可以是 int, float, long, double, short, byte类型

       int number1 = -22;
       double number2 = 33.22D;
       Integer number3 = -3;
       Double number4 = -33D;

        System.out.println(Math.abs(number1));
        System.out.println(Math.abs(number2));
        System.out.println(Math.abs(number3));
        System.out.println(Math.abs(number4));

Java进阶—Base API_第19张图片

2.ceil() 返回大于等于( >= )给定参数的的最小整数,类型为双精度浮点型。

   floor() 返回小于等于(<=)给定参数的最大整数 。 

        double number1 = 11.65D;
        double number2 = -30.40D;

        System.out.println(Math.ceil(number1));
        System.out.println(Math.ceil(number2));

        System.out.println(Math.floor(number1));
        System.out.println(Math.floor(number2));

Java进阶—Base API_第20张图片

3.它表示四舍五入,算法为 Math.floor(x+0.5),即将原来的数字加上 0.5 后再向下取整,所以,Math.round(11.5) 的结果为12,Math.round(-11.5) 的结果为-11。 Java进阶—Base API_第21张图片

        double number1 = 11.65D;
        double number2 = -30.40D;

        System.out.println(Math.round(number1));
        System.out.println(Math.round(number2));

Java进阶—Base API_第22张图片

4. min() 返回两个参数中的最小值。 max() 返回两个参数中的最大值。

        System.out.println(Math.min(-33.11,99933));
        System.out.println(Math.max(-33.11,99933));

5. random() 返回一个随机数。

        System.out.println(Math.random());
        System.out.println(Math.random());

Java进阶—Base API_第23张图片

6.关于三角函数 

package com.google.apl;

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

        System.out.println("90 度的正弦值:" + Math.sin(Math.PI/2));
        System.out.println("0度的余弦值:" + Math.cos(0));
        System.out.println("60度的正切值:" + Math.tan(Math.PI/3));
        System.out.println("1的反正切值: " + Math.atan(1));
        System.out.println("π/2的角度值:" + Math.toDegrees(Math.PI/2));
        System.out.println(Math.PI);

    }
}

Java进阶—Base API_第24张图片

7. 指数、对数、平方根

自己去菜鸟看 Java Number & Math 类 | 菜鸟教程 (runoob.com)

六.Random(随机数类) 

我們在上面Math工具类,说过random()方法,但是存在精度问题,在这里我们会详细描述random类;

1.他有两个构造方法

Java进阶—Base API_第25张图片

        // 实例化random类
        Random random = new Random();

创建一个新的随机数生成器,种子为时间戳,使用这个的比较多;

        // 实例化random类
        Random random = new Random(3333333);

科普时间戳与种子:什么是时间戳?时间戳有什么用?(适合新人)_时间戳是什么意思_莫参商的博客-CSDN博客 

Random 中的种子怎么理解 - 爱学习的小象 - 博客园 (cnblogs.com)

2. 如何使用与限定范围

整数类型 

        // 实例化random类
        Random random = new Random();

        // 生成随机数赋值给fuck
        int fuck = random.nextInt();

        // 输出fuck
        System.out.println(fuck);

Java进阶—Base API_第26张图片

        // 实例化random类
        Random random = new Random();

        // 生成随机数介于0到100之间,赋值给fuck
        int fuck = random.nextInt(100);

        // 输出fuck
        System.out.println(fuck);

Java进阶—Base API_第27张图片

接下来我们试一试double类型

        // 实例化random类
        Random random = new Random();

        // 生成随机数赋值给fuck
        double fuck = random.nextDouble();

        // 输出fuck
        System.out.println(fuck);

问题random取随机数无法给,double取范围; Java进阶—Base API_第28张图片

于是我们查看jdk文档发现,double无法取范围 Java进阶—Base API_第29张图片

我们应该这么办,于是我看到了,random还有两个子类 

 Java进阶—Base API_第30张图片

我点进子类ThreadLocalRandom,发现这个子类可以限制double类型的范围,甚至完善了int类型的范围;Java进阶—Base API_第31张图片

3.子类ThreadLocalRandom 

jdk文档:Random (Java Platform SE 8 ) (oracle.com) 

从jdk文档中可以看出ThreadLocalRandom与父类random不同,相对于Random的功能更全面和高效,同时线程安全,在使用的过程中也与时间戳有关,用于并发操作;

使用方法:它提供了一个current方法;

Java进阶—Base API_第32张图片

Java进阶—Base API_第33张图片

七.Date(时间类)

打开jdk文档查看java.util.date Java进阶—Base API_第34张图片

可以看出Data类的构造方法好多都弃用了,那我们讲讲没有弃用的两个构造方法

1.Data() 

        // 使用方法一
        Date date = new Date();
        System.out.println("当前时间 : " + date);


        // 使用方法二,推荐,使用匿名方法
        System.out.println(new Date());

Java进阶—Base API_第35张图片

CST是时区简称, 表示中国东八区时间(北京时间)

全球时区 简称 缩写 简介 PST EST GMT CST EDT UTC 等_时区缩写_whatday的博客-CSDN博客

 2.Data(long date)

 是以Unix时间为基准,Unix时间以毫秒为单位,1秒 = 1000毫秒

获取现在的Unix时间:时间戳 |时间戳转换 |Unix 时间戳 (shijianchuo.net) 

 System.out.println(new Date(1694024639L * 1000));

Java进阶—Base API_第36张图片

现在我们看一看Date的方法 Java进阶—Base API_第37张图片

可以看出很多都弃用了 

 1.getTime()

 换算成Unix时间

Java进阶—Base API_第38张图片

八.Format(格式化类)

由于Date类弃用了非常多构造方法与方法,可以我们还想使用,这时可以使用它的衍生类:

DataFormat用于对时间格式化,使用的过程中需要使用它的子类SimpleDataFormat;

从jdk文档查看java.text.Format

 Java进阶—Base API_第39张图片

我们可以看出它有一个子类DataFormat可以对时间进行格式化(转换),我们点进去Java进阶—Base API_第40张图片

可以看出它是一个抽象类,无法实例化,所有我们要使用它的子类 SimpleDataFormatJava进阶—Base API_第41张图片

 Java进阶—Base API_第42张图片

 Java进阶—Base API_第43张图片

我们这里只说最常用的构造方法与方法 

构造方法:SimpleDateFormat(String pattern)  使用给定模式

方法一: format(Date date, StringBuffer toAppendTo, FieldPosition pos)  将给定的 Date成日期/时间字符串,并将结果追加到给定的 StringBuffer 。 

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

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

        // 要格式化的话,那必须有格式化对象
        Date date = new Date();

        // 格式化,并制定时间格式:年-月-日 时:分:秒
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        // 使用format方法输出
        System.out.println(dateFormat.format(date));

    }
}

 Java进阶—Base API_第44张图片

也可以自己制定自己喜欢的格式 :

项目 含义 表示 示例
y Year 2023
M 年中的月份 Month 11
D 年中的天数 Number 301
d 月份中的天数 Number 28
E 星期 Text Tuesday; Tue
H 一天中的小时数(0-23) Number 16
h am/pm中的小时数(1-12) Number 11
m 分钟数 Number 21
s 秒数 Number 33
S 毫秒数 Number 777

方法二:parse(String text, ParsePosition pos)  从字符串中解析文本以产生一个 Date 。 

package com.google.apl;

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

public class Main {

    public static void main(String[] args) throws ParseException {


        // 格式化,并制定时间格式:年-月-日 时:分:秒
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        // 当前时间
        String nowTime = "2023-9-16 14:11:11";

        // 使用parse方法,转换成Date格式时间,并抛出异常,后面会讲异常        Date date = dateFormat.parse(nowTime);

        // 输出Date格式时间
        System.out.println(date);
    }

    }

后面会讲抛出异常

 Java进阶—Base API_第45张图片

九.Calendar(日期类)

Calendar类是对日期和时间进行控制的,在这个类中有许多的字段,可以直接当作工具类进行使用,在社交软件中我们可以用这个来计算年龄;

打开jdk:java.util.CalendarJava进阶—Base API_第46张图片

可以从上面可以看出Calendar是一个抽象类,无法new(实例化),但是它提供了一个Static单例:Java进阶—Base API_第47张图片

可以用字段,这里只介绍字段在哪里,找到Fields标签Java进阶—Base API_第48张图片

 1.get获取日期

        // static单例设计
        Calendar calendar = Calendar.getInstance();

        // 获取年,并赋给year
        int year = calendar.get(calendar.YEAR);

        // 获取月,并赋给month,注意:国外的月份是从零月开始
        int month = calendar.get(calendar.MONTH);

        // 获取日,并赋给dayofmonth,注意表示日的字段是DAY_OF_MONTH
        int dayofmonth = calendar.get(calendar.DAY_OF_MONTH);

        // 获取星期几,并赋给dayofweek,注意表示星期几的字段是DAY_OF_WEEK
        // 注意:外国的星期是从星期日开始
        int dayofweek = calendar.get(calendar.DAY_OF_WEEK);

        // 输出
        System.out.print(year+"-"+month+"-"+dayofmonth+"\t"+dayofweek);

 如何使用中国日期,月份加一,星期几减一;

        // static单例设计
        Calendar calendar = Calendar.getInstance();

        // 获取年,并赋给year
        int year = calendar.get(calendar.YEAR);

        // 获取月,并赋给month,注意:国外的月份是从零月开始
        int month = calendar.get(calendar.MONTH) +1;

        // 获取日,并赋给dayofmonth,注意表示日的字段是DAY_OF_MONTH
        int dayofmonth = calendar.get(calendar.DAY_OF_MONTH);

        // 获取星期几,并赋给dayofweek,注意表示星期几的字段是DAY_OF_WEEK
        // 注意:外国的星期是从星期日开始
        int dayofweek = calendar.get(calendar.DAY_OF_WEEK) -1;

        // 输出
        System.out.print(year+"-"+month+"-"+dayofmonth+"\t"+dayofweek);

2.设置日期 Java进阶—Base API_第49张图片

没有设置的会获取当前时间信息;

3.添加日期 Java进阶—Base API_第50张图片

十.System(系统类) 

打开jdk:java.lang.SystemJava进阶—Base API_第51张图片

可以看出这是一个最终类,自己在把文档看一看可以看出它的方法都是静态的;

成员变量 

1.PrintStream out

标准输出流。此流已打开并准备接收输出数据。通常,此流对应于显示器输出或者由主机环境或用户指定的另一个输出目标。

2.InputStream in 

标准输入流。此流已打开并准备提供输入数据。通常,此流对应于键盘输入或者由主机环境或用户指定的另一个输入源。

3.PrintStream err 

标准的错误输出流。其语法与 System.out 类似,不需要提供参数就可输出错误信息。也可以用来输出用户指定的其他信息,包括变量的值。

 方法 

1.快速获取当前Unix时间戳 Java进阶—Base API_第52张图片

2.arraycopy() 方法 

该方法的作用是数组复制,即从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。

        int[] number1 = {1,2,3,4,5};
        int[] number2 = {6,7,8,9,10};

        // number2从下标 1 开始的数据复制到数组 number2 从下标 1 开始的位置,总共复制3个
        System.arraycopy(number1,1,number2,1,3);

        for (int one:number1) {
            System.out.print(one+"\t");
        }

        System.out.println();

        for (int two:number2) {
            System.out.print(two+"\t");
        }

Java进阶—Base API_第53张图片

3. exit() 方法 

该方法的作用是终止当前正在运行的 Java 虚拟机。

public class ExitExample {
    public static void main(String[] args) {
        System.out.println("程序开始执行...");

        // 在这里写下你的代码

        System.out.println("程序即将终止...");
        System.exit(0);
        // 0 表示正常终止,非零值表示非正常终止
    }
}

4.gc() 方法 

该方法的作用是请求系统进行垃圾回收,完成内存中的垃圾清除。至于系统是否立刻回收,取决于系统中垃圾回收算法的实现以及系统执行时的情况。

System.gc();

5.getProperty() 方法 

        String version = System.getProperty("java.version");
        String name = System.getProperty("os.name");
        String user = System.getProperty("user.name");

        System.out.println("Java 运行时环境版本:"+version);
        System.out.println("当前操作系统是:"+name);
        System.out.println("当前用户是:"+user);

Java进阶—Base API_第54张图片

你可能感兴趣的:(java,开发语言)