【JAVA语言-第10话】Java API的下载和使用,装箱和拆箱的详解,Math、Random、System、Object、Objects类的使用和常用方法

目录

Java API的使用和常见工具类

1.1 概述

1.2 API的使用步骤

1.2.1 在线使用步骤

1.2.2 离线使用步骤

1.3 包装类

1.3.1 概述

1.3.2 基本类型对应的包装类

1.3.3 装箱

1.3.3.1 概述

1.3.4 拆箱

1.3.4.1 概述

1.3.5 自动装箱和拆箱

1.3.6 数字和字符串的相互转换

1.3.6.1 数字转字符串

1.3.6.2 字符串转数字

1.4 Math类

1.4.1 概述

1.4.2 常用方法和属性

1.4.3 Math工具类练习

1.5 Random类

1.5.1 概述

1.5.2 格式:固定三步骤,导包、创建、使用

1.6 System类

1.6.1 概述

1.6.2 常用方法

1.6.3 练习

1.7 Object类

1.7.1 概述

1.7.2 常用方法

1.7.3 练习

1.8 Objects类 

1.8.1 概述 

1.8.2 常用方法


Java API的使用和常见工具类

1.1 概述

        API(Application Programming Interface):应用程序编程接口。java API是一本程序员的字典,是JDK提供给我们使用的类的说明文档,这些类被底层的代码实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如果使用即可。

1.2 API的使用步骤

1.2.1 在线使用步骤

1.打开Oracle官网:Java Platform, Standard Edition Documentation - Releases ;

2.选择你使用的JDK版本,这里以JDK8为例,点击JDK8进入网页;

【JAVA语言-第10话】Java API的下载和使用,装箱和拆箱的详解,Math、Random、System、Object、Objects类的使用和常用方法_第1张图片

3.在弹出的网页中,点击“All Books --> API Documentation”,即可打开API文档;

【JAVA语言-第10话】Java API的下载和使用,装箱和拆箱的详解,Math、Random、System、Object、Objects类的使用和常用方法_第2张图片

4.按Ctrl + F打开搜索框,可以搜索具体的类的使用;左边是所有类的目录,右边是选中类的具体内容(构造方法和方法属性等)。

【JAVA语言-第10话】Java API的下载和使用,装箱和拆箱的详解,Math、Random、System、Object、Objects类的使用和常用方法_第3张图片

1.2.2 离线使用步骤

 1.打开官网Java Downloads | Oracle;往下滑,找到需要的版本下面对应的Documentation Download;

【JAVA语言-第10话】Java API的下载和使用,装箱和拆箱的详解,Math、Random、System、Object、Objects类的使用和常用方法_第4张图片

2.点击下载后解压即可,文件路径如下;

【JAVA语言-第10话】Java API的下载和使用,装箱和拆箱的详解,Math、Random、System、Object、Objects类的使用和常用方法_第5张图片3.双击打开,界面如下,和在线浏览一样,根据需要查看类的源码;

【JAVA语言-第10话】Java API的下载和使用,装箱和拆箱的详解,Math、Random、System、Object、Objects类的使用和常用方法_第6张图片

1.3 包装类

1.3.1 概述

         基本数据类型的数据,使用起来非常的方便,但是没有对应的方法来操作这些数据。所以我们可以使用一个类把基本数据类型包装起来,这个类叫做包装类,在包装类中可以定义一些方法,用来操作基本类型的数据。每个基本类型都有其对应的包装类型

1.3.2 基本类型对应的包装类

基本类型 包装类型
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

数字封装类有Byte,Short,Integer,Long,Float,Double;这些类都是抽象类Number的子类。

1.3.3 装箱

1.3.3.1 概述

         把基本类型的数据,包装到包装类中(基本数据类型 转换成 包装类型),可以通过构造方法或者静态方法实现。

    public static void main(String[] args) {
        int i = 10;
        String str = "123";
        String str2 = "abc";

        //基本类型 转换成 包装类型

        /**
         * 方法一:使用构造方法
         *  Integer(int value):使用int类型作为参数的构造方法。
         *  Integer(String s):使用String类型作为参数的构造方法,字符串必须是数字形式,否则会抛出异常,“100”正确,“a”错误。
         */
        Integer i1 = new Integer(i);
        Integer i2 = new Integer(str);//正确
        Integer i3 = new Integer(str2);//报错

        /**
         * 方法二:使用静态方法
         *  public static Integer valueOf(int i):返回一个表示指定int值的Integer实例。
         *  public static Integer valueOf(String s):返回保存指定的String的值的Integer对象。
         */
        Integer i4 = Integer.valueOf(i);
        Integer i5 = Integer.valueOf(str);//正确
        Integer i6 = Integer.valueOf(str2);//报错
    }

报错日志:

1.3.4 拆箱

1.3.4.1 概述

        在包装类中取出基本类型的数据(包装类 转换成 基本数据类型),可以使用成员方法实现。

    public static void main(String[] args) {
        int i = 10;

        //基本类型 转换成 包装类型
        Integer integer = new Integer(i);

        /**
         * 包装类型 转换成 基本类型,使用成员方法:
         *  public int intvalue():以int类型返回该Integer的值。
         */
        int i2  = integer.intValue();
    }

1.3.5 自动装箱和拆箱

基本类型和包装类之间可以相互装换(JDK1.5之后出现的新特性)。

  • 自动装箱:直接把int类型的整数赋值给包装类。
  • 自动拆箱:integer是包装类,无法直接参与运算,可以自动装换为基本类型的数据,在参与计算。
    public static void main(String[] args) {
        int i = 10;

        //不需要调用构造方法,通过=符号自动把 基本类型 转换为 包装类型 就叫自动装箱
        Integer it2 = i;

        //不需要调用Integer的intValue方法,通过=就自动转换成int类型,就叫自动拆箱
        int i3 = it2;
    }

1.3.6 数字和字符串的相互转换

1.3.6.1 数字转字符串
package com.zhy.util;

public class TestNumber {
    public static void main(String[] args) {
        int i = 10;

        //方法1:使用String类的静态方法valueOf
        String str = String.valueOf(i);

        //方法2:先把基本类型装箱为对象,然后调用对象的toString
        Integer it = i;
        String str2 = it.toString();
    }
}
1.3.6.2 字符串转数字
package com.zhy.util;

public class TestNumber {
    public static void main(String[] args) {
        String str = "520";
        //调用Integer的静态方法parseInt,必须保证str是一个数字才能转换,否则会引发报错
        int i= Integer.parseInt(str);
        System.out.println(i);
    }
}

1.4 Math类

1.4.1 概述

         java.util.Math类:是数学相关的工具类,里面提供了大量的静态方法,完成与数学运算相关的操作;无需死记硬背,根据需要查找API文档。【JAVA语言-第10话】Java API的下载和使用,装箱和拆箱的详解,Math、Random、System、Object、Objects类的使用和常用方法_第7张图片

1.4.2 常用方法和属性

定义格式:

        属性:

                Math.PI:常量,代表近似圆周率π。

                Math.E:常量,代表自然常数。

        方法:

                public static double abs(double num):获取绝对值

                public static double ceil(double num):向上取整

                public static double floor(double num):向下取整

                public static long round(double num):四舍五入

                public static double sqrt(double a):开平方根

                public static double pow(double a, double b):次方

        

调用格式:

        属性:

                Math.属性名;

        方法:

                Math.方法名(参数);

1.4.3 Math工具类练习

源代码:

package com.zhy.test;

public class TestNumber {
	public static void main(String[] args) {
		double f1 = 6.4d;
		double f2 = 6.5d;
		double f3 = -6.8d;
        
		System.out.println(f3 + " 的绝对值 = " + Math.abs(f3));
		
        System.out.println(f1 + " 四舍五入 = " + Math.round(f1));
        System.out.println(f2 + " 四舍五入 = " + Math.round(f2));
        
        System.out.println(f1 + " 向上取整 = " + Math.ceil(f1));
        System.out.println(f2 + " 向下取整 = " + Math.floor(f2));
         
        System.out.println("得到一个0-1之间的随机浮点数(取不到1):" + Math.random());
        System.out.println("得到一个0-10之间的随机整数 (取不到10):" + Math.random() * 10);
        System.out.println("得到一个0-100之间的随机整数 (取不到100):" + Math.random() * 100);

        System.out.println("16开平方根 = " + Math.sqrt(16));

        System.out.println("2的6次方 = " + Math.pow(2,6));
         
        System.out.println("π = " + Math.PI);
         
        System.out.println("自然常数 = " + Math.E);
	}
}

输出结果: 

【JAVA语言-第10话】Java API的下载和使用,装箱和拆箱的详解,Math、Random、System、Object、Objects类的使用和常用方法_第8张图片

1.5 Random类

1.5.1 概述

        用来生成随机数字

1.5.2 格式:固定三步骤,导包、创建、使用

  1. 导包: import java.util.Random;
  2. 创建:Random r = new Random();  //小括号中留空
  3. 使用:int num = r.nextInt();int num = r.nextInt(3);
package com.zhy.util;

import java.util.Random;

public class TestRandom {
    public static void main(String[] args) {
        Random random = new Random();
        int num = random.nextInt();//获取一个随机的int数字(范围是所有int范围,正负)
        int num2 = random.nextInt(4);//获取一个随机的int数字(参数代表了范围,左闭右开区间),实际含义[0,4):0,1,2,3
        System.out.println(num);
        System.out.println(num2);
    }
}

1.6 System类

1.6.1 概述

        java.lang.System类:里面提供了大量的静态方法,可以获取与系统相关的信息或系统级操作。

1.6.2 常用方法

public static long currentTimeMillis();

        返回以毫秒为单位的当前时间,用来测试程序的效率。

        

public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length);

        将数组中指定的数据拷贝到另一个数组中。

        

        说明:

                Object src:源数组

                int srcPos:源数组中的起始位置

                Object dest:目标数组

                int destPos:目标数组中的起始位置

                int length:要复制的数组元素的数量

1.6.3 练习

源代码:

    public static void main(String[] args) {
        long startTime = System.currentTimeMillis();

        char[] c1 = {'a','b','c','d','e','f'};
        char[] c2 = new char[3];
        System.arraycopy(c1,1,c2,0,3);
        System.out.println("从c1数组中复制1-3索引的数据 放到 c2数组的0-2索引:");
        System.out.println(c2);

        int[] a = new int[1000000];
        for(int i = 0; i < 1000000; i++){
            a[i] = i;
        }

        long endTime = System.currentTimeMillis();
        System.out.println("该方法总共耗时:" + (endTime - startTime) + "毫秒!");
    }

输出结果:

【JAVA语言-第10话】Java API的下载和使用,装箱和拆箱的详解,Math、Random、System、Object、Objects类的使用和常用方法_第9张图片

1.7 Object类

1.7.1 概述

         java.lang.object类:是java语言中的根类,即所有类的父类,它描述的所有方法子类都可以使用,在对象实例化时候,最终找到的父类就是Object类,如果一个类没有指定父类,那么默认继承Object类。

1.7.2 常用方法

toString():返回该对象的字符串表示。

equals(Object obj): 用于判断两个对象的内容是否相同。

finalize():当一个对象没有任何引用指向时,虚拟机JVM就会自动调用该方法回收对象。

hashCode():方法返回一个对象的哈希值,这在后续的集合学习中了解哈希表存储才会用到。

        

还有一些线程相关的方法,放在后续多线程内容的时候在同步讲解,更易理解。
wait(),notify(),notifyAll()

1.7.3 练习

 源代码:

public class Animal {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    protected void finalize() throws Throwable {
        System.out.println("正在回收没有任何引用指向的对象!");
    }

    public static void main(String[] args) {
        Animal animal = new Animal();
        //1.toString方法
        //每个类都默认继承了Object类,如果没有重写,那就是打印该对象在内存中的地址值
        System.out.println("对象的toString方法:" + animal.toString());
        //直接打印对象,其实就是打印toSting的返回值,所以两种写法没有差异
        System.out.println("直接打印对象:" + animal);

        //2.equals方法
        animal.setName("年年");
        Animal animal2 = new Animal();
        animal2.setName("年年");
        //引用类型,判断两个对象的地址值是否一致。结果为false
        System.out.println(animal.equals(animal2));
        //因为String类重写了equals方法,改为内容的比较。所以结果为true
        System.out.println(animal.getName().equals(animal.getName()));

        //3.finalize方法
        Animal a;
        for (int i = 0; i < 1000000; i++) {
            //只有一个引用,不断生成新的对象
            //每创建一个对象,前一个对象,就没有引用指向了,这些对象就满足垃圾回收的条件
            //当,垃圾堆积的比较多的时候,就会触发垃圾回收,一旦这个对象被回收,它的finalize()方法就会被调用
            a = new Animal();
        }
    }
}

输出结果:

【JAVA语言-第10话】Java API的下载和使用,装箱和拆箱的详解,Math、Random、System、Object、Objects类的使用和常用方法_第10张图片

1.8 Objects类 

1.8.1 概述 

         这是一个工具类,它提供了一些方法来操作对象,它由一些静态的实用方法组成,这些方法是null-save(空指针安全的)或null-tolerant(容忍空指针的),用于计算对象的hashcode、返回对象的字符串表示形式,比较两个对象。

1.8.2 常用方法

equals方法:

        源码格式:判断两个对象是否相等,对象可以为null,不会出现异常

        public static boolean equals(Object a,Object b){

            return (a==b) ||(a!=null && a.equals(b));

        }

    public static void main(String[] args) {
        Animal animal = new Animal();
        Animal animal2 = new Animal();

        //引用类型,判断两个对象的地址值是否一致。下面两种比较方法的差异是:
        //animal.equals(animal2):当animal为null是会引发空指针异常
        //Objects.equals(animal,animal2):当引用为空不会引发异常,比较安全
        System.out.println(animal.equals(animal2));
        System.out.println(Objects.equals(animal,animal2));
    }

        

题外话:

        如果文章中存在错误的地方,欢迎大家指正出来,共同学习进步,后续会陆续就JAVA这门课程展开进行分享。

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