目录
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进入网页;
3.在弹出的网页中,点击“All Books --> API Documentation”,即可打开API文档;
4.按Ctrl + F打开搜索框,可以搜索具体的类的使用;左边是所有类的目录,右边是选中类的具体内容(构造方法和方法属性等)。
1.2.2 离线使用步骤
1.打开官网Java Downloads | Oracle;往下滑,找到需要的版本下面对应的Documentation Download;
2.点击下载后解压即可,文件路径如下;
3.双击打开,界面如下,和在线浏览一样,根据需要查看类的源码;
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文档。
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);
}
}
输出结果:
1.5 Random类
1.5.1 概述
用来生成随机数字。
1.5.2 格式:固定三步骤,导包、创建、使用
- 导包: import java.util.Random;
- 创建:Random r = new Random(); //小括号中留空
- 使用: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) + "毫秒!");
}
输出结果:
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();
}
}
}
输出结果:
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这门课程展开进行分享。