常用API(3)
这里写目录标题
一.Math类
1.数学工具类Math
java.util.Math是数学相关工具类,提供大量与数学运算相关得静态方法。
常用的静态方法有:
- public static double abs (double num): 获取绝对值
- public static double ceil (double num): 向上取整(12.1–>13)
- public static double floor (double num): 向下取整(12.1–>12)
- public static long round (double num): 四舍五入
另外介绍一个常用的成员变量:
- Math.PI 代表近似的圆周率常量
例子:计算再-10.8到5.9之间绝对值大于6或者小于2.1的整数有多少个?
/*
分析:1.已经给定范围:使用for循环
2.起点-10.8应该转换成整数-10,有两种方法(1)想上取整ceil(double num)(2)强制类型转换,把0.8舍弃
3.找到绝对值,通过Math.abs(double num);
4.一旦发现一个数,让计数器++进行统计
*/
double min = -10.8;
double max = 5.9;
int count = 0; //用于计数
for (int i = (int)min;i < max;i++) {
int abs = Math.abs(i);
if (abs > 6 || abs < 2.1) {
sout(i);
count++;
}
}
sout("总共有:"+count);
二.Object类
1.Object类的toString方法
java.lang.Object
类Object是类层次结构的根类。每个类都使用Object作为超类(父类),所有对象(包括数组)都实现了这个类的方法
toString()方法返回了一个字符串
- public String toString()
返回该对象的字符串表示,通常toString方法返回一个”以文本方式表示“此对象的字符串。结果应是一个简明但是易于读懂的信息表达式,建议所有的子类都重写此方法
Object类的toString方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at标记符"@"和此对象的哈希码的无符号十六进制组成。
换句话说该方法返回一个字符串,他的值等于:
getClass().getName()+’@’+Inter.toHexString(hashCode())
2.Object类的equals方法
String类中的equals方法是比较字符串中的内容,是重写了Object类中的equals方法
- public boolean equals(Object obj): 指示某个对象是否与此对象相等
源代码如下:
public boolean equals(Object obj) {
return (this == obj);
}
参数:Object obj:可以传递任意的对象
== 比较运算符
基本数据类型比较的是数值
引用数据类型比较的是两个对象的地址值
this是谁?哪个对象调用的方法,方法中的this就是那个对象
3.重写Object类的equals方法
默认是比较两个对象的地址值,没有什么意义,我们一般像String类一样重写equals方法使之比较两个对象的属性
例子:
@Override
public boolean equals(Object obj) {
//提高效率
if (null == obj) {
return false;
}
//传参如果是this本身,也做一个判断
if (obj == this) {
return true;
}
//使用向下转型,将obj转换成Person类型
if (obj instanceof Person) {
Person p = (Person)obj;
}else {
return false
}
//比较两个对象的属性,一个对象是this(p1),一个对象是p(obj-->p2)
boolean b = this.name.equals(p.name) && this.age == p.age;
return b;
}
equals方法可以使用快捷键添加,和get、set方法一样
我们同时还可以看一下系统的源码
if (o == null || getClass() != o.getClass()) return false;
//getClass() != o.getClass()使用反射技术,判断o是不是Person类型,等效于instance of
Person person = (Person)o;
return age == person.age && Objects.equals(name,person.name);
那么Objects.equals又是什么呢?
4.Objects类的equals方法
在JDK1.7添加了一个Objects工具类。它提供了一些方法操作对象,它由一些静态的实用方法组成。这些方法是null-save
(空指针安全)或null-tolerate
(容忍空指针的)用于计算对象的hashcode、返回字符串表示形式、比较两个对象
NullPointException:null是不能调用方法的,不然就会抛出空指针异常
而Objects类的equals方法:对象个对象进行比较,可以防止空指针异常
public static boolean equals(Object a,Object b) {
return (a == b) || (a != null && a.equals(b));
}
其实进入方法一看什么意思就很清楚了
三.Date类
1.毫秒值的概念和使用
Date类是日期类表示时期和时间的类
java.util.Date类,表示特定的瞬间,精确到秒
特定的瞬间:一个时间点
毫秒值的作用:可以对时间和日期进行运算
例子:2099-01-03到2088-01-01中间一共多少天
这里有一个时间原点:1970年1月1日 00:00:00中国要加8个小时
那么我们先是把日期换成毫秒,也就是计算当前日期到时间原点之间一共经历了多少毫秒,然后我们把日期转换为毫秒计算,计算完毕之后,再把毫秒转换成日期即可
2.Date类的构造方法和成员方法
- Date类的空参构造方法:Date()获取当前系统的日期和时间
- Date类的带参构造方法:Date(long date):传参传一个毫秒值,把毫秒值转换成Date日期
- 常用的成员方法:getTime():返回自1970年1月1日00:00:00以来此Date对象表示的毫秒数。
3.DateFormat类
java.text.DateFormat 是日期格式化类,可以将英文日期转换成中文日期,它是一个抽象类无法直接使用
DateFormat直接子类SimpleDateFormat类
功能:
- 格式化 日期–>文本
- 解析 文本–>日期和标准化
那么怎么格式化和解析呢?
成员方法:
- String format(Date date): 按照指定的模式把Date日期格式化为符合模式的字符串
- Date parse(String source): 把符合模式的字符串解析成Date日期
java.text.SimpleDateFormat extends DateFormat
构造方法:
SimpleDateFormat(String pattern)
用给定的模式和默认语言环境的日期格式符号描述构造SimpleDateFormat
参数:String pattern:传递指定模式
模式区分大小写:
年 | 月 | 日 | 时 | 分 | 秒 |
---|---|---|---|---|---|
y | M | d | H | m | s |
写对应的模式,会把模式替换为对应的日期和时间。
例: “yyyy-MM-dd HH:mm:ss”
注意:模式中的字母不能更改,连接模式的符号可以改变
4.DateFormat类的format方法和parse方法
- 使用DateFormat类中的方法,format把日期格式化为指定的模式
使用步骤:
- 创建SimpleDateFormat对象,构造方法中传递指定的模式
- 调用SimpleDateFormat对象方法format,按照构造方法中指定的模式
把Date日期格式化为符号模式的字符串(文本) String format(Date date)
我们下面还是做一个例子吧:
public class Main {
public static void main(String[] args) {
Date date = new Date();
System.out.println(date);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
String format = sdf.format(date);
String format1 = sdf1.format(date);
System.out.println(format);
System.out.println(format1);
}
}
运行结果:
- 使用DateFormat类中的方法parse把文本解析成日期
使用步骤:
- 创建SimpleDateFormat对象,构造方法中传递指定的模式
- 调用SimpleDateFormat类中的方法parse。要符合构造方法中的模式
注意:publc Datr parse(String source) throws ParseException
parse方法声明了一个异常叫ParseException解析异常
如果字符串和构造方法中的模式不一样,那么程序就会抛出此异常,调用一个抛出异常的方法就要必须得处理这个异常,要么throws继续抛出这个异常,要么try-catch自己处理
举个例子吧:
private static void tanglei02() throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyy年MM月dd日 HH时mm分ss秒");
Date parse = sdf.parse("2020年5月11日 21时03分01秒");
System.out.println(parse);
}
运行结果:
四.Calendar类
1. Calendar类介绍和获取对象的方法
java.util.Calendar是日历类,在Date类后出现,替换了许多Date的方法,提供了很多操作日历字段的方法
Calendar类是一个抽象类,那么我们如何使用它呢?
我们不使用Calendar的直接已知子类,我们可以通过类方法getInstance()方法,该方法返回了Calendar子类对象
下面还是来试试:
public class Calendar1 {
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
System.out.println(c);
}
}
运行结果:
发现一长条很多字段对应的值都在上面,打印出来的不是地址值,说明重写了toString方法。
2. Calendar类常用方法
Calendar常用方法:
- public int get(int field): 返回给定日历字段的值
- public void set(int field,int value): 将给定的日历字段设置为给定值
- public abstract void add(int field,int amount): 根据日历的规则,为给定的日历字段添加或减去指定的时间量
- public Date getTime(): 返回一个表示此Calendar时间值(从历元到现在的毫秒的偏移量)的Date对象
成员参数:
int field:日历的字段,可以使用Calendar类的静态成员变量获取
例子:
package com.company.calendar;
import java.util.Calendar;
import java.util.Date;
/**
* @author Lenovo
*/
public class Calendar1 {
public static void main(String[] args) {
// Calendar c = Calendar.getInstance();
// System.out.println(c);
tanglei1();
tanglei2();
tanglei3();
tanglei4();
}
private static void tanglei4() {
/*public Date getTime():
返回一个表示此Calendar时间值(从历元到现在的毫秒的偏移量)的Date对象
把日历对象转换为日期对象
*/
Calendar c = Calendar.getInstance();
Date date = c.getTime();
System.out.println(date);
}
private static void tanglei3() {
/*public abstract void add(int field,int amount):
根据日历的规则,为给定的日历字段添加或减去指定的时间量
参数1:日历字段
参数2:int amound:增加减少指定的值
*/
Calendar c = Calendar.getInstance();
c.add(Calendar.YEAR,2);
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
System.out.println(year + "年" + month + "月" + day + "日");
}
private static void tanglei2() {
/*public void set(int field,int value):
将给定的日历字段设置为给定值
参数:1.传递给定的日历字段
2.int value,给指定的日历字段设置值
*/
Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR,9999);
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
System.out.println(year + "年" + month + "月" + day + "日");
//用set方法同时设置年月日(重载get方法)
c.set(8888,8,8);
System.out.println(year + "年" + month + "月" + day + "日");
}
private static void tanglei1() {
//public int get(int field): 返回给定日历字段的值
//参数:传递指定的日历字段(YEAR,MONTH)
//返回值:日历字段代表的具体的值
//1.通过getInstance()方法获取Calendar子类对象,用父类引用,多态写法
Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
System.out.println(year + "年" + month + "月" + day + "日");
}
}
运行结果:
五.System类
1.System类的常用方法
java.lang.System 提供了大量的静态方法,可以获取与系统相关的信息或者系统级的操作
常用方法:
- public static long currentTimeMillis(): 返回以毫秒为单位的当前时间
- public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length): 将数组中指定的部分拷贝到另一个数组中(数组复制)
1. src 源数组。需要复制的数组
2. srcPos 源数组的起始位置
3. dest 目标数组
4. src 目标数组的起始位置
5. src 要复制的数组元素的数量
第一个方法常用来测试程序的效率
例子:
private static void tanglei1() {
/*
第一个方法常用来测试程序的效率
public static long currentTimeMillis(): 返回以毫秒为单位的当前时间
*/
//程序执行前获取一次毫秒值
long s = System.currentTimeMillis();
for (int i = 0; i <= 9999; i++) {
System.out.println(i);
}
long e = System.currentTimeMillis();
System.out.println("程序总耗时:" + (e-s) + "毫秒");
}
运行结果:
例子2:
private static void tanglei2() {
/*
public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length):
将数组中指定的部分拷贝到另一个数组中(数组复制)
1. src 源数组。需要复制的数组</font>
2. srcPos 源数组的起始位置</font>
3. dest 目标数组</font>
4. src 目标数组的起始位置</font>
5. src 要复制的数组元素的数量</font>
*/
int[] src = {1,2,3,4,5};
int[] dest = {6,7,8,9,10};
System.arraycopy(src,0,dest,0,3);
//因为直接打印,打印的是地址,我们借助数组工具类的toString方法
System.out.println(Arrays.toString(dest));
}
运行结果: