Java基础学习笔记19——常用API
目录
6.2.2、SimpleDateFormat类的格式化和解析日期的方法
1、Math类
1.1、Math类概述
Math类在java.lang包下,故使用时不需要导包。Math类是最终类,故不可能有子类。
Math包含执行基本数字运算的方法,如基本指数,对数,平方根和三角函数。
Math没有构造方法,如何使用类中的成员呢?
- 看类的成员是否都是静态的,如果是,通过类名就可以直接调用。
1.2、Math类的属性(字段)
修饰符和类型 | Field | 描述 |
---|---|---|
static double | E | 自然常数 |
static double | PI | 圆周率 |
1.3、Math类的常用方法
修饰符和类型 | 方法 | 描述 |
---|---|---|
public static int | abs(int a) | 返回a 的绝对值 |
public static double | ceil(double a) | 返回 ≥ a 的最小double值,等于一个整数 |
public static double | floor(double a) | 返回 ≤ a 的最大double值,等于一个整数 |
public static int | round(float a) | 按照四舍五入返回最接近参数的int值 |
public static int | max(int a, int b) | 返回两个int值中的较大值 |
public static int | min(int a, int b) | 返回两个int值中的较小值 |
public static double | pow(double a, double b) | 返回a的b次方的值 |
public static double | random() | 返回值为double的征值,范围 [0.0, 1.0] |
2、System类
2.1、System类概述
System类在java.lang包下,故使用时不需要导包。System类是最终类,故不可能有子类。
System类包含几个有用的类字段和方法。它不能被实例化(成员被static修饰,直接通过类访问)。
System类提供的方法包括标准输入、标准输出和错误输出流;访问外部定义的属性和环境变量;一种加载文件和库的方法;以及用于快速复制阵列的一部分实用方法。
2.2、System类的属性(字段)
修饰符和类型 | Field | 描述 |
---|---|---|
static PrintStream | err | “标准”错误输出流 |
static InputStream | in | “标准”输入流 |
static PrintStream | out | “标准”输出流 |
2.3、System类的常用方法
修饰符和类型 | 方法 | 描述 |
---|---|---|
public static void | exit(int status) | 终止当前运行的Java虚拟机(JVM)。 该参数作为状态代码;按照惯例,非零状态码表示异常终止。使用时传参为0即可。 该方法在类Runtime调用exit方法。此方法从不正常返回。 调用System.exit(n)有效地等效于调用:Runtime.getRuntime().exit(n) |
public static long | correntTimeMillis() | 返回当前时间(以毫秒为单位)。虽然返回值的时间单位为毫秒,但该值的粒度取决于底层操作系统,并且可能较大。例如,许多操作系统以几十毫秒为单位测量时间。 结果值为当前时间和1970年1月1日之间的毫秒差值。 |
3、Object类
3.1、Object类概述
Object类在java.lang包下,故使用时不需要导包。Object类是类层次结构的根类,每个类都有Object作为超类。所有类都直接或间接地继承自该类,所有对象(包括数组)都实现了这个类的方法。
3.1、Object类的构造方法
构造方法(Constructor) | 描述 |
---|---|
Object() | 构造一个新对象 |
为什么说子类的构造方法默认访问的是父类的无参构造方法?因为它们的顶级父类只有无参构造方法。
3.2、Object类的常用方法
看方法源码:选中方法,按下Ctrl+B。
修饰符和类型 | 方法 | 描述 |
---|---|---|
public String | toString() | 返回对象的字符串表示形式。 一般来说,toString方法返回一个“toString代表”这个对象的字符串。 结果应该是一个简明扼要的表达,容易让人阅读。建议所有子类覆盖此方法,可自动生成。 |
public boolean | equals(Object obj) | 比较对象是否相等。默认比较地址,重写可以比较内容,可自动生成 |
4、Arrays类
4.1、Arrays类概述
Arrays类在java.uitl包下,使用时需要导包。该类包含用于操作数组的各种方法(如排序和查找)。
4.2、Arrays类的常用方法
方法名 | 描述 |
---|---|
public static String toString(int[] a) | 返回指定数组的内容的字符串表示形式 |
public static void sort(int[] a) | 按照数字顺序排列指定的数组 |
工具类的设计思想:
- 构造方法用private修饰(防止外界创建该对象);
- 成员用public static 修饰(让使用类名来访问该类的成员方法)。
5、基本类型包装类
5.1、基本类型包装类概述
基本类型包装类在java.lang包下,故使用时不需要导包。将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据。
常用的操作之一:基本数据类型与字符串之间的转换。
基本数据类型与相应的包装类:
基本数据类型 | 包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
5.2、Integer类
Integer:包装一个对象中的原始类型int的值。
5.2.1、Integer类的构造方法
构造方法 | 描述 |
---|---|
Integer(int value) | 已过时。很少使用这个构造函数。 静态工厂valueOf(int)通常是一个更好的选择,因为它可能产生明显更好的空间和时间性能。 |
Integer(String s) | 已过时。很少使用这个构造函数。 使用parseInt(String)将字符串转换为int原语,或使用valueOf(String)将字符串转换为Integer对象。 |
5.2.2、Integer类的常用方法
方法名 | 描述 |
---|---|
public Integer(int value) | 根据int值创建Ingeter对象(过时) |
public Integer(String s) | 根据String值创建Integer对象(过时) |
public static Integer valueOf(int i) | 返回表示指定的int值的Integer实例 |
public static Integer valueOf(String s) | 返回一个保存指定值String值的Integer对象 |
5.2.3、int 和 String 的相互转换
1)int 转换为 String:
//返回int参数的字符串表示形式。该方法是String类中的方法
public static String valueOf(int i){}
2)String 转换为 int:
//将字符串解析为int类型。该方法是Integer类中的方法
public static parseInt(String s){}
5.3、自动装箱和拆箱
- 装箱:把基本数据类型转换为对应的包装类类型。
- 拆箱:把包装类类型转换为对应的基本数据类型。
注意:在使用包装类类型的时候,如果做操作,最好先判断是否为null。(推荐:只要是对象,在使用前就必须进行不为null的判断。)
代码演示:
package integerPackage;
public class Test1 {
public static void main(String[] args) {
//装箱:把基本数据类型转换为对应的包装类类型
Integer i = Integer.valueOf(100); //装箱
Integer ii = 100; //自动装箱
//拆箱:把包装类类型转换为基本数据类型
ii = ii.intValue() + 200; //自动装箱,ii.intValue()为拆箱操作
ii += 200; //自动拆箱
Integer iii = null;
if(iii != null) {
iii += 300;
}
}
}
6、日期类
6.1、Date类
6.1.1、Date类概述和构造方法
Date类在java.uitl包下,使用时需要导包。Date类不是一个最终类,故可以有子类。
Date类代表了一个特定的时间,以毫秒的精度。
构造方法:
构造方法 | 描述 |
---|---|
Date() | 分配一个Date对象并对其初始化,以便它表示分配的时间,精确到毫秒。 |
Date(long date) | 分配一个Date对象,并将其初始化为表示从标准基准时间(称为“时代”)即1970年1月1日00:00:00 GMT起的指定毫秒数。 |
代码演示:
package datePackage;
import java.util.Date;
public class Test {
public static void main(String[] args) {
//Date() 分配一个Date对象并对其初始化,以便它表示分配的时间,精确到毫秒。
Date d1 = new Date();
System.out.println(d1); //重写了toString()方法
//Date(long date) 分配一个Date对象,并将其初始化为表示从标准基准时间(称为“时代”)即1970年1月1日00:00:00 GMT起的指定毫秒数。
long date = 1000*60*60;
Date d2 = new Date(date);
System.out.println(d2);
}
}
结果:
Wed Jan 05 19:21:01 CST 2022
Thu Jan 01 09:00:00 CST 1970
6.1.2、Date类的常用方法
方法名 | 描述 |
---|---|
public long getTime() | 获取的是日期对象从1970年1月1日00:00:00到现在的毫秒值 |
public void setTime(long time) | 设置时间,给的是毫秒值 |
6.2、SimpleDateFormat类
6.2.1、SimpleDateFormat类概述
SimpleDateFormat类在java.text包下,使用时需要导包。SimpleDateFormat类不是一个最终类,故可以有子类。
SimpleDateFormat是一个具体的类,用于以区域设置敏感的方式格式化和解析日期。它允许格式化(日期文本),解析(文本日期)和规范化。
日期和时间格式由日期和时间模式字符串指定,在日期和时间模式字符串中,从'A'到'Z'以及从'a'到'z'引号的字母被解释为表示日期或时间字符串的组件的模式字母。
y | 年 |
M | 月 |
d | 日 |
H | 时 |
m | 分 |
s | 秒 |
6.2.1、SimpleDateFormat类的构造方法
方法名 | 描述 |
---|---|
public SimpleDateFormat() | 构造一个SimpleDateFormat,使用默认模式和日期格式 |
public SimpleDateFormat(String pattern) | 构造一个SimpleDateFormat使用给定的模式和默认的日期格式 |
6.2.2、SimpleDateFormat类的格式化和解析日期的方法
方法名 | 描述 |
---|---|
public final String format(Date date) | 将日期格式化成日期/时间字符串 |
public Date parse(String source) | 从给定字符串的开始解析文本以生成日期 |
代码演示:
package datePackage;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test {
public static void main(String[] args) throws ParseException {
//格式化:从 Date 到 String
Date d = new Date();
SimpleDateFormat sdf1 = new SimpleDateFormat();
String s1 = sdf1.format(d);
System.out.println(s1);
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String s2 = sdf2.format(d);
System.out.println(s2);
System.out.println("--------");
//解析:从 String 到 Date
String ss = "2022-04-05 15:35:26";
SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date dd = sdf3.parse(ss);
System.out.println(dd);
}
}
结果:
2022/1/5 下午7:51
2022年01月05日 19:51:04
--------
Tue Apr 05 15:35:26 CST 2022
6.3、Calendar类(日历类)
6.3.1、Calendar类概述
Calendar类在java.util包下,使用时需要导包。有一个直接子类GregorianCalendar。Calendar是一个抽象类,不能直接实例化,需要通过子类来实例化。
Calendar类可以为某一特定时刻和一组日历字段(如YEAR,MONTH,DAY_OF_MONTH,HOUR等等,被称为日历字段)之间的转换提供了一些方法,并为操作日历字段提供了一些方法。
Calendar提供了一个类方法getInstance()用于获取Calendar对象,其日历字段已使用当前日期和时间初始化:Calendar rightNow = Calendar.getInstance();
6.3.2、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 datePackage;
import java.util.Calendar;
public class TestCalender {
public static void main(String[] args) {
//获取对象。Calendar是一个抽象类
Calendar c = Calendar.getInstance(); //多态
//public int get(int field):返回给定日历字段的值
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH) + 1; //月份从0开始
int date = c.get(Calendar.DATE);
System.out.println(year + "年" + month + "月" + date + "日");
//public abstract void add(int field, int amount):根据日历的规则,将指定的时间量添加或减去给定的日历字段
//需求:10年后的2天前
c.add(Calendar.YEAR, 10);
c.add(Calendar.DATE,-2);
//public int get(int field):返回给定日历字段的值
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH) + 1; //月份从0开始
date = c.get(Calendar.DATE);
System.out.println(year + "年" + month + "月" + date + "日");
//public final void set(int year, int month, int date):设置当前日历的年月日
c.set(2050,10,11); //这里的月是从0开始的
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH) + 1; //月份从0开始
date = c.get(Calendar.DATE);
System.out.println(year + "年" + month + "月" + date + "日");
}
}
结果:
2022年1月5日
2032年1月3日
2050年11月11日