常用API
(一)Math类
1.概述
Math包含执行基本数字运算的方法
没有构造方法,如何使用类中的成员?
看类的成员是否都是静态,如果是,通过类名就可以直接调用
2.Math类的常用方法
(二)Sytem类
1.概述
System包含有用的类字段和方法,它不能被实例化
2.System类的常用方法
public static void exit(int status) 终止当前运行的Java虚拟机,非零表示异常终止
public static long currentTimeMillis() 返回当前时间(以毫秒为单位)
(三)Object类
1.概述
Object是类层次结构的根,每个类都可以将Object作为超类。所有类都直接或者间接的继承自该类
构造方法:public Object()
回想面向对象中,为什么说子类的构造方法默认访问的是父类的无参构造方法?
因为他们的顶级父类只有无参构造方法
2.Object类的常用方法
(1) toString方法
public String toString() 返回对象的字符串表示形式
建议所有子类重写此方法
如何重写?自动生成即可 alt + insert
(2)equals方法
public boolean equals(Object obj) 比较对象是否相等
默认比较地址,重写可以比较内容,自动生成
(四)Arrays
1.冒泡排序
将一组数据按照固定的规则进行排序
冒泡排序:一种排序的方式,对要进行排序的数据中相邻的数据进行两两比较,将较大的数据放在后面,依次对所有的数据进行操作,直至所有数据按要求完成排序。
原理:
- 如果有n个数据进行排序,总共需要比较n-1次
- 每一次比较完毕,下一次的比较就会少一个数据参与
代码实现:
for (int x = 0; x < arr.length - 1; x++) { //如果有n个元素需要排序,则一共需要排序n-1次
for (int i = 0; i < arr.length - 1 - x; i++) { //减1是防止索引越界,减x是每次排序完下次排序都会少排序一个元素
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
}
2.Arrays类概述和常用方法
(1)概述
Arrays类包含用于操作数组的各种办法
(2)常用方法
public static String toString(int[ ] a) 返回指定数组的内容的字符串表示形式
public static void sort(int[ ] a) 按照数字顺序排列指定的数组
工具类的设计思想:
- 构造方法用private修饰
- 成员用public static 修饰
(五)基本类型包装类
1.概述
将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据
常用的操作之一:用于基本数据类型与字符串之间的转换
2.Integer类的概述和使用
Integer:包装一个对象中的原始类型int的值
代码演示:
public static void main(String[] args) {
Integer i = new Integer("100");
System.out.println(i);
Integer i2 = new Integer(100);
System.out.println(i2);
Integer i3 = Integer.valueOf("abc");
System.out.println(i3); //NumberFormatException
Integer i4 = Integer.valueOf(100);
System.out.println(i4);
}
3.int和String的相互转换
(1)int 转换为 String
public static String valueOf(int i):返回int参数的字符串表示形式。该方法是String类中的方法
(2)String转换为int
public static int parseInt(String s):将字符串解析为int类型。该方法是Integer类中的方法
4.案例(字符串中数据排序)
代码实现:
import java.util.Arrays;
//需求:有一个字符串:“91 27 46 38 50”,请写程序实现最终输出结果是:“27 38 46 50 91”
public class Demo {
public static void main(String[] args) {
//定义一个字符串
String s = "91 27 46 38 50";
//将字符串的数字数据存储到一个String类型的数组中
String[] strArr = s.split(" ");
/* for (int i = 0; i < strArr.length; i++){
System.out.println(strArr[i]);
}*/
//定义一个int类型的数组,把String[]数组中的每一个元素存储到int数组中
int[] arr = new int[strArr.length];
for (int i = 0; i < strArr.length; i++) {
arr[i] = Integer.parseInt(strArr[i]);
}
/*for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}*/
//对数组进行排序
Arrays.sort(arr);
//把排序后的数组按要求进行拼接得到一个字符串,这里采用StringBuilder来实现
StringBuilder sb = new StringBuilder();
sb.append("“");
for (int i = 0; i < arr.length; i++) {
if(i == arr.length - 1){
sb.append(arr[i]);
} else {
sb.append(arr[i]).append(" ");
}
}
sb.append("“");
//将StringBuilder类型转换为String类型
String result = sb.toString();
//输出结果
System.out.println(result);
}
}
5。自动装箱和拆箱
- 装箱:把基本数据类型转换为对应的包装类类型
- 拆箱:把包装类类型转换为对应的基本数据类型
//装箱
Integer i = Integer.valueOf(100);
//自动装箱
Integer i = 100;
i += 200; //i = i + 200; i + 200 自动拆箱; i = i + 200; 是自动装箱
注意:在使用包装类类型的时候,如果做操作,最好先判断是否为null
推荐:只要是对象,在使用前就必须进行不为null的判断
(六)日期类
1.Date类的概述和构造方法
Date代表了一个特定的时间,精确到毫秒
构造方法:
public Date() 分配一个Date对象,并初始化,以便它代表它被分配的时间,精确到毫秒
public Date(long date) 分配一个Date对象,并将其初始化为表示从标准基准时间起指定的毫秒数
2.Date类的常用方法
public long getTime() 获取的是日期对象从1970年1月1日00:00:00到现在的毫秒值
public void setTime(long time) 设置时间,给的是毫秒值
3.SimpleDateFormat类概述
SimpleDateFormat是一个具体的类,用于以区域设置敏感的方式格式化和解析日期。我们重点学习日期格式化和解析
日期格式化由日期和时间模式字符串指定,在日期和时间模式字符串中。从“A”到“Z”以及从“a”到“z”引号的字母被解释为表示日期或时间字符串的组件的模式字母
常用的模式字母以及对应关系如下:
- y 年
- M 月
- d 日
- H 时
- m 分
- s 秒
4.SimpleDateFormat类构造方法
public SimpleDateFormat() 构造一个SimpleDateFormate,使用默认模式和日期格式
public SimpleDateFormate(String patten) 构造一个SimpleDateFormate使用给定的模式和默认的日期格式
5.SimpleDateFormat格式化和解析日期
(1)格式化(从Date到String)
public final String format(Date date): 将日期格式化成日期/时间字符串
(2)解析(从String到Date)
public Date parse(String source):从给定字符串的开始解析文本以生成日期
代码演示:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Demo {
public static void main(String[] args) throws ParseException {
//格式化:从Date到String
Date d = new Date();
// SimpleDateFormat sdf = new SimpleDateFormat();//无参构造 为默认系统给的格式
//自定义格式使用SimpleDateFormat的带参构造参数为自定义格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss");
//使用SimpleDateFormat的格式化方法 public final String format(Date date)
String s = sdf.format(d);
System.out.println(s); //2021年12月29日 11:50:47
//解析:从String到Date
String s2 = "2021-12-29 23:48:00";
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date d2 = sdf2.parse(s2);
System.out.println(d2); //Wed Dec 29 23:48:00 CST 2021
}
}
(3)案例:(日期工具类)
代码实现:
DateUtils:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateUtils {
//构造方法私有
//成员方法静态
private DateUtils() {
}
//用于把日期转换为指定格式的方法
public static String dateToString(Date d, String format) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
String s = sdf.format(d);
return s;
}
//用于字符串解析为指定格式的日期
public static Date stringToDate(String s, String format) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat(format);
Date d = sdf.parse(s);
return d;
}
}
测试类:
import java.text.ParseException;
import java.util.Date;
public class DateDemo {
public static void main(String[] args) throws ParseException {
//测试日期工具类的格式化方法
Date d = new Date();
String format = "yyyy年MM月dd日 hh:mm:ss";
String result = DateUtils.dateToString(d,format); //静态成员方法通过直接访问类名.方法 如果是非静态方法,需要通过实例化对象访问
System.out.println(result);//2021年12月30日 12:12:37
//测试日期工具类的解析方法
String s = "2021年12月30日 12:12:37";
String format2 = "yyyy年MM月dd日 hh:mm:ss";
Date Dresult = DateUtils.stringToDate(s,format);
System.out.println(Dresult);//Thu Dec 30 00:12:37 CST 2021
}
}
6.Calendar类概述
Calendar为某一时刻和一组日历字段之间的转换提供了一些方法,并为操作日历字段提供了一些方法
Calendar提供了一个类方法getInstance用于获取Calendar对象,其日历字段已使用当前日期和时间初始化:
Calendar rightNow = Calendar.getInstance();
7.Calendar的常用方法
代码演示:
//获取对象
Calendar c = Calendar.getInstance();//多态的形式创建对象
System.out.println(c);
//public int get(int field)
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH) + 1;
int date = c.get(Calendar.DATE);
System.out.println(year+"年"+month+"月"+date+"日");//2021年12月30日
//10年后的5天前
//public abstract void add(int field,int amount)
c.add(Calendar.YEAR,10);
c.add(Calendar.DATE,-5);
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH) + 1;
int date = c.get(Calendar.DATE);
System.out.println(year+"年"+month+"月"+date+"日");//2031年12月25日
//public final void set(int year,int month,int date)
c.set(2033,11,12);
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH) + 1;
int date = c.get(Calendar.DATE);
System.out.println(year+"年"+month+"月"+date+"日");//2033年12月12日