Java常用API
一,Math
1.Math类中包含执行基本数字运算的方法
Math类没有构造器,里面的方法都是静态的(static),所以可以直接通过**Math.方法名()**来调用
2.Math类中的常用方法
方法名 | 说明 |
---|---|
public static int abs (int a) | 返回参数的绝对值 |
public static double ceil(double a) | 返回大于或等于参数的最小double值的整数 |
public static double floor(double a) | 返回小于或等于参数的最大double值的整数。 |
public static int round(double a) | 按照四舍五入返回最接近参数的值。 |
public static int max(int a, int b) | 返回两个参数的最大值 |
public static int min(int a, int b) | 返回两个参数的最小值 |
public static double pow(double a, double b) | 返回a的b次幂的值。 |
public static double random() | 返回值为double的正数(一个随机数)[0.0,1.0)。 |
示例代码:
public class Test_Math {
public static void main(String[] args) {
System.out.println(Math.abs(-18)); //返回参数的绝对值
System.out.println(Math.ceil(11.2));//返回大于或等于参数的最小double值的整数。
System.out.println(Math.floor(11.2));//返回小于或等于参数的最大double值的整数。
System.out.println(Math.round(11.2));//按照四舍五入返回最接近参数的int值。
System.out.println(Math.max(12,1)); //返回两个参数的最大值。
System.out.println(Math.min(12,1)); //返回两个参数的最小值。
System.out.println(Math.pow(2,3)); //返回a的b次幂的值。
System.out.println(Math.random()); //返回值为double的正数(一个随机数)[0.0,1.0)。
}
}
运行结果:
/*
18
12.0
11.0
11
12
1
8.0
0.10465413582542937
*/
二,System
1.System类概述
System类不能被实例化,用类名访问。
2.System类的常用方法
方法名 | 说明 |
---|---|
public static void exit(int status) | 终止当前正在运行的 Java 虚拟机。参数用作状态码;根据惯例,非 0 的状态码表示异常终止。 |
public static void gc() | 运行垃圾回收器。 |
public static long currentTimeMillis() | 返回以毫秒为单位的当前时间(该方法的作用是返回当前的计算机时间,时间的表达格式为当前计算机时间和GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数。) |
public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length) | 拷贝数组的方法() |
示例代码:
package JavaSE.JavaApi;
import java.util.Arrays;
public class Test_System {
public static void main(String[] args) {
System.out.println("返回当前时间,以毫秒为单位");
System.out.println(System.currentTimeMillis());
int arr_1[] = {1,2,3,4,5};
int arr_2[] = {0,0,0,0,0};
System.out.println(Arrays.toString(arr_1));
System.out.println(Arrays.toString(arr_2));
//表示从arr_1的索引为2的位置开始向后复制三个数字,复制到arr_2中,从索引为开始
System.arraycopy(arr_1,2,arr_2,2,3);
System.out.println(Arrays.toString(arr_1));
System.out.println(Arrays.toString(arr_2));
System.out.println("终止当前运行的java虚拟机");
System.exit(1);
System.out.println("Hello World!");//终止后不执行此代码。
}
}
运行结果:
/*返回当前时间,以毫秒为单位
1616239472252
终止当前运行的java虚拟机
[1, 2, 3, 4, 5]
[0, 0, 0, 0, 0]
[1, 2, 3, 4, 5]
[0, 0, 3, 4, 5]
Process finished with exit code 1*/
三,Object类
1.Object类的概述
Object类是类层次结构的根。每个类都有Object作为超类。所有对象(数组)都实现了这个类的方法。
2.Object类的常用方法
方法名 | 说明 |
---|---|
public String toString() | 返回对象的字符串表示形式,建议所有子类重写该方法 |
public boolean equals(Object obj) | 比较对象是否相等。默认比较地址,重写可自定义比较内容,建议子类重写该方法 |
2.1.toString()方法
一般使用时,建议重写toString()方法。IDEA中自动生成toString方法Alt+Insert toString()选中要输出的信息即可。
Java源码
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
//默认输出类的信息+@+哈希值
示例代码
//1.默认输出的情况
package JavaSE.JavaApi;
public class Test_Object {
public static void main(String[] args) {
var stu = new Student();
stu.setAge(18);
stu.setName("Ther");
System.out.println(stu.toString());
System.out.println(stu);//输出该对象默认调用toString()方法。
}
}
class Student{
private int age;
private String name;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
/*运行结果:JavaSE.JavaApi.Student@2133c8f8
JavaSE.JavaApi.Student@2133c8f8
*/
//2.重写toString()方法
package JavaSE.JavaApi;
public class Test_Object {
public static void main(String[] args) {
var stu = new Student();
stu.setAge(18);
stu.setName("Ther");
System.out.println(stu.toString());
System.out.println(stu);//输出该对象默认调用toString()方法。
}
}
class Student{
private int age;
private String name;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//IDEA中自动生成toString方法Alt+Insert 选中toString()即可。
@Override
public String toString() {
return "Student{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
/*运行结果:
Student{age=18, name='Ther'}
Student{age=18, name='Ther'}
*/
2.2,equals()方法
equals()方法默认比较引用值,使用时一般需要重写方法。
Object类中的equals()方法源码:
public boolean equals(Object obj) {
return (this == obj);
}
Student类中重写了equals方法举例:
//IDEA中自动生成的equals方法
public boolean equals(Object o) {
//this --- stu_1 o --- stu_2
//比较地址是否相同,相同返回true
if (this == o) return true;
//比较参数为null || 参数是否不来自同一个类,如果满足直接返回false
if (o == null || getClass() != o.getClass()) return false;
//向下转型
Student student = (Student) o;// student --- stu_2
//比较年龄和name(Sting 的equals方法)
return age == student.age && Objects.equals(name, student.name);
}
测试Student中的equals()方法:
public class Test_Object_equals {
public static void main(String[] args) {
var stu_1 = new Student(12,"Ther");
var stu_2 = new Student(12,"Ther");
System.out.println(stu_1);
System.out.println(stu_2);
System.out.println(stu_1.equals(stu_2));//重写前返回false,重写equals()方法后返回true
}
}
String 类中重写了 equals() 方法用于比较两个字符串的内容是否相等
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String aString = (String)anObject;
if (coder() == aString.coder()) {
return isLatin1() ? StringLatin1.equals(value, aString.value)
: StringUTF16.equals(value, aString.value);
}
}
return false;
}
//举例
String a = "hello";
String b = "hello";
String c = a;
c = a;
var d = new String("hello");
System.out.println(c.equals(d)); //true
System.out.println(c == d);//false
四,Arrays类
1.Arrays类的概述
Arrays类包中包含用于操作数组的各种方法,在java.util包下,使用时需要导包。
2.Arrays类的常用方法
方法名 | 说明 |
---|---|
public static String toString(datatype[] a) | 返回指定数组的内容的字符串表示形式 |
public static void sort(datatype[] a) | 对指定的数组进行升序排序 |
public static boolean equals(datatype[] a) | 判断两个指定数组是否相等 |
public static int binarySearch(datatype[] a, int key) | 二分查找,返回的整数类型值是需要查找的数的索引。 |
2.1,toString()方法
在常用类Object中,我们讲过toString方法的用法,在这里作用是一样的,但是它是属于Arrays类中的一个静态方法,并不是数组重写Object中的toString方法而来。在使用的时候应注意,直接输出数组名或者调用数组对象的toString方法,并不能输出数组内容。
API源码:
public static String toString(int[] a) {
if (a == null)
return "null";
int iMax = a.length - 1;
if (iMax == -1)
return "[]";
StringBuilder b = new StringBuilder();
b.append('[');
for (int i = 0; ; i++) {
b.append(a[i]);
if (i == iMax)
return b.append(']').toString();
b.append(", ");
}
}
使用示例:
package JavaSE.JavaApi;
import java.util.Arrays;
public class Test_Arrays {
public static void main(String[] args) {
int a[] = {1,3,4,2,9,2};
System.out.println(a);
System.out.println(a.toString());
System.out.println(Arrays.toString(a));
}
}
/*输出结果
[I@49e4cb85
[I@49e4cb85
[1, 3, 4, 2, 9, 2]
*/
2.2,sort()方法
示例:
package JavaSE.JavaApi;
import java.util.Arrays;
public class Test_Arrays {
public static void main(String[] args) {
int a[] = {1,3,4,2,9,2};
System.out.println("排序前:" + Arrays.toString(a));
Arrays.sort(a);
System.out.println("排序后:" + Arrays.toString(a));
}
}
/*输出结果:
排序前:[1, 3, 4, 2, 9, 2]
排序后:[1, 2, 2, 3, 4, 9]
*/
2.3,equals()方法
和toString方法一样,此方法并不是重写Object类中的equals方法而来,它们是两个不同的方法,Arrays类中的equals方法可以用来判断两个非空数组中的内容是否一致,一致指的是长度相同且每个元素对应相同。
示例代码:
import java.util.Arrays;
public class Test_Arrays {
public static void main(String[] args) {
int a[] = {1,3,4,2,9,2};
int b[] = {1,3,4,2,9,2};
int c[] = {1,2,3,4,5,6};
System.out.println(a.equals(b)); //false
System.out.println(Arrays.equals(a, b));//true
System.out.println(Arrays.equals(a, c));//false
}
}
2.4,binarySearch()方法
二分查找,返回的整数类型值是需要查找的数的索引。
public class Test_Arrays {
public static void main(String[] args) {
int a[] = {1,3,4,2,9,2};
System.out.println(Arrays.binarySearch(a, 9));//结果是4,返回结果是元素9的索引位置
}
}
五,基本类型包装类
1.基本类型包装类概述
将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作改数据。
常用的操作之一:用于基本数据类型与字符串之间的转换。
基本数据类型 | 包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
2.Integer类的概述和使用
Integer:包装一个对象中的原始数据类型int的值。
方法名 | 说明 |
---|---|
public Integer(int value) | 根据int值创建一个Integer对象(过时) |
public Integer(String s) | 根据String值创建一个Integer对象(过时) |
public static Integer valueOf(int i) | 返回表示指定int值的Integer示例 |
public static Integer valueOf(String s) | 返回一个保存指定值的Integer对象String |
注意:上述参数的值不能为字符或字母,否则程序会抛出异常。
示例代码:
public class Test_Integer {
public static void main(String[] args) {
// var i1 = new Integer(100);//已过时
// var i2 = new Integer("100");//已过时
var i1 = Integer.valueOf(100);
var i2 = Integer.valueOf("100");
System.out.println(i1);
System.out.println(i2);
}
}
//输出结果
//100
//100
3.int 和 String 的相互转换
基本数据类型包装类的最常见操作就是:用于基本类型和字符串之间的相互转换。
1.int 转换为 String。使用valueOf(int i)方法:返回int参数的字符串表示形式。该方法是String类中的方法。
2.String 转换为 int。使用parseInt(String s)方法:将字符串解析为int类型。该方法是Integer类中的方法。
package JavaSE.JavaApi;
/*
int 和 String 的相互转换
*/
public class Test_Integer_2 {
public static void main(String[] args) {
//1.int to String
//method_1
int num = 100;
String s1 = "" + num;
System.out.println(s1); //输出100
//method_2 use valueOf()
var s2 = String.valueOf(num);
System.out.println(s2);//输出100
//2.String to int
String s = "100";
//method_1 String ---> Integer ---> int
Integer a = Integer.valueOf(s);
int i = a.intValue();
System.out.println(i); //输出100
//method_2 use parseInt(String)
int i1 = Integer.parseInt(s);
System.out.println(i1); //输出100
}
}
4.练习题
有一个字符串"91 27 46 38 50",请写程序实现最终输出结果"27 38 46 50 91"
题解:
package JavaSE.JavaApi;
import java.util.Arrays;
public class Test_test {
public static void main(String[] args) {
String s = "91 27 46 38 50";
//分割字符串
String s1[] = s.split(" ");
//调用Integer包装类里面的parseInt方法。将字符串类型转换为int类型,
int a[] = new int[s1.length];
int j = 0;
for (String s2:s1) {
a[j] = Integer.parseInt(s2);
j++;
}
//对数组进行排序
Arrays.sort(a);
//整形数组添加到StringBuilder对象里面
String s2[] = new String[a.length];
j = 0;
StringBuilder s3 = new StringBuilder();
for (int a1:a) {
s2[j] = String.valueOf(a[j]);
if(j == a.length){
s3.append(s2[j]);
}else {
s3.append(s2[j]).append(" ");
}
j++;
}
//调用toString方法,赋值字符串给s4
String s4 = s3.toString();
System.out.println(s4);
}
}
5.自动装箱和拆箱
装箱:把基本数据类型转换为对应的包装类类型
拆箱:把包装类类型转换为对应的基本数据类型
在jdk5之后支持自动拆装箱操作。(Integer类型不为null)
六,日期类(Date类、Calendar类)
在 Java 中获取当前时间,可以使用 java.util.Date 类和 java.util.Calendar 类完成。其中,Date 类主要封装了系统的日期和时间的信息,Calendar 类则会根据系统的日历来解释 Date 对象.
Date 类带 long 类型参数的构造方法获取的是距离 GMT 指定毫秒数的时间,60000 毫秒是一分钟,而 GMT(格林尼治标准时间)与 CST(中央标准时间)相差 8 小时,也就是说 1970 年 1 月 1 日 00:00:00 GMT 与 1970 年 1 月 1 日 08:00:00 CST 表示的是同一时间。 因此距离 1970 年 1 月 1 日 00:00:00 CST 一分钟的时间为 1970 年 1 月 1 日 00:01:00 CST,即使用 Date 对象表示为 Thu Jan 01 08:01:00 CST 1970。
1.Date类概述和构造方法。
Date 类表示系统特定的时间戳,可以精确到毫秒。Date 对象表示时间的默认顺序是星期、月、日、小时、分、秒、年
构造方法
方法名 | 说明 |
---|---|
public Date() | 分配一个Date对象,并初始化,以便它代表它被分配的时间,精确到毫秒 |
public Date(long date) | 分配一个Date对象,并将其初始化为表示从标准时间起指定的毫秒数 |
示例代码:
package JavaSE.JavaApi;
import java.util.Date;
public class Test_Date {
public static void main(String[] args) {
Date d1 = new Date();
//输出现在计算机的时间,重写了toString()方法 ,默认输出顺序Sun Mar 21 14:45:39 CST 2021
System.out.println(d1);
//给d2传一个带参数的构造方法,参数是一个小时的毫秒数
long date = 1000*60*60;
var d2 = new Date(date);
//输出的时间不是1970年1点而是1970年9点,这是因为中国的时区是东八区。所以加了八个小时。
System.out.println(d2);
}
}
2.Date类的常用方法
方法名 | 说明 |
---|---|
public long getTime() | 获取的是日期对象从1970年1月1日00:00:00(中国时区是08:00)到现在的毫秒数 |
public void setTime(long Time) | 设置时间,给的是毫秒值(long)。 |
示例代码:
package JavaSE.JavaApi;
import java.util.Date;
public class Test_Date_2 {
public static void main(String[] args) {
var d = new Date();
//获取当前对象时间的毫秒数
System.out.println(d.getTime());
//设置当前对象的时间
long a = 0;
d.setTime(a);
//输出时间
System.out.println(d.toString());
}
}
/*
输出:
1616310163610
Thu Jan 01 08:00:00 CST 1970
*/
3.SimpleDateFormat类概述
如果使用 DateFormat 类格式化日期/时间并不能满足要求,那么就需要使用 DateFormat 类的子类——SimpleDateFormat
SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类,它允许进行格式化(日期→文本)、解析(文本→日期)和规范化。SimpleDateFormat 使得可以选择任何用户定义的日期/时间格式的模式。
日期和时间格式由日期和时间模式字符串指定,在日期和时间模式字符串中,从’A’到’Z’以及从’a’到’z’引号的字母被解释为表示时间或字符串的组件的模式字母。
4.SimpleDateFormat类的构造方法
方法名 | 说明 |
---|---|
SimpleDateFormat() | 用默认的格式和默认的语言环境构造 SimpleDateFormat |
SimpleDateFormat(String pattern) | 用指定的格式和默认的语言环境构造 SimpleDateF ormat。 |
SimpleDateFormat(String pattern,Locale locale) | 用指定的格式和指定的语言环境构造 SimpleDateF ormat。 |
5.SimpleDateFormat格式化和解析日期
1.格式化(从Date到String)
public final String format(Date date):将日期格式化成日期/时间字符串。
2.解析(从String到Date)
public Date parse(String source):从给定字符串的开始解析文本以生成日期。
示例代码:
package JavaSE.JavaApi;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Tes_SimpleDateFormat {
public static void main(String[] args) {
//格式化:从Date到String
var d = new Date();
// //无参构造默认输出样式:2021/3/21 下午3:20
// var sdf = new SimpleDateFormat();
var sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");//时间格式为:2021年03月21日 15:22:06
String s = sdf.format(d);
System.out.println(s);
//解析,从String 到 Date
String ss = "2021年03月21日 15:22:06";
var sdf2 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
Date dd = null;
try {
dd = sdf2.parse(ss); //这一块必须要捕获异常或者抛出异常,如果日期格式与字符串格式不相同,会报错
} catch (ParseException e) {
e.printStackTrace();
}
System.out.println(dd);
}
}
6.Calendar类概述
Calendar为某一时刻和一组日历字段之间的转换提供了一些方法,并为操作日历字段提供了一些方法。
Calendar提供了一个类方法getInstance用于获取Calendar对象,其日历字段已使用当前日期和时间初始化:
Calendar rightNow = Calendar.getInstance();
7.Calendar 的常用方法
方法名 | 说明 |
---|---|
public int get(int field) | 返回给定的日历字段的值 |
public abstract void add(int field, int amount) | 根据日历的规则,将指定的时间量添加或减去给定的日历字段 |
public final void set(int year, int month, int date) | 设置当前日历的年月日 |
示例代码:
package JavaSE.JavaApi;
import java.util.Calendar;
public class Test_Calendar {
public static void main(String[] args) {
//获取对象
var c = Calendar.getInstance();//多态的形式
//public int get(int field)
// int year = c.get(Calendar.YEAR);
// int month = c.get(Calendar.MONTH) + 1;//月默认从0开始所以要加1
// int day = c.get(Calendar.DATE);
// System.out.println(year + "年" + month + "月" + day + "日");//输出:2021年3月21日
// public abstract void add(int field, int amount);
// c.add(Calendar.YEAR,-3);//三年前的今天
// int year = c.get(Calendar.YEAR);
// int month = c.get(Calendar.MONTH) + 1;//月默认从0开始所以要加1
// int day = c.get(Calendar.DATE);
// System.out.println(year + "年" + month + "月" + day + "日");//输出:2018年3月21日
// public final void set(int year, int month, int date)
c.set(2048,11,29);
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DATE);
System.out.println(year + "年" + month + "月" + day + "日");//输出:2048年11月29日
}
}
int day = c.get(Calendar.DATE);
// System.out.println(year + “年” + month + “月” + day + “日”);//输出:2021年3月21日
// public abstract void add(int field, int amount);
// c.add(Calendar.YEAR,-3);//三年前的今天
// int year = c.get(Calendar.YEAR);
// int month = c.get(Calendar.MONTH) + 1;//月默认从0开始所以要加1
// int day = c.get(Calendar.DATE);
// System.out.println(year + “年” + month + “月” + day + “日”);//输出:2018年3月21日
// public final void set(int year, int month, int date)
c.set(2048,11,29);
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DATE);
System.out.println(year + “年” + month + “月” + day + “日”);//输出:2048年11月29日
}
}