Math类
概述:
该类中提供了数学中的常用计算方法,比如求绝对值,取整等;
常用方法:
方法名 | 方法说明 |
---|---|
static double abs(double a) | 返回double类型数据的绝对值,abs方法每种数字类型都有重载 |
static double ceil(double a) | 对double类型的数据进行向上取整(即大于等于该double数值的最小整数) |
static double floor(double a) | 对double类型数据进行向下取整(即小于等于该double数值的最大整数) |
static int max(int a, int b) | 返回两个整数中的最大值(每种数字类型都有对应的重载方法) |
static int min(int a, int b) | 返回两个整数中的最小值(每种数字类型都有对应的重载方法) |
static int round(float a) | 对浮点数进行四舍五入取整 |
static double sqrt(double a) | 对double类型的数值进行开平方 |
static double pow(double a, double b) | 返回a的b次方 |
static double random() | 返回一个伪随机数,范围为[0.0, 1.0) |
代码示例:
public static void main(String[] args) {
// static int max(int a, int b)
System.out.println(Math.max(3, 4)); // 4
// static double ceil(double a)
System.out.println(Math.ceil(12.23)); // 13.0
// static double floor(double a)
System.out.println(Math.floor(12.23)); // 12.0
// static double pow(double a, double b)
System.out.println(Math.pow(2, 3)); // 8.0
// static double sqrt(double a)
System.out.println(Math.sqrt(4)); // 2.0
// static double abs(double a)
System.out.println(Math.abs(-22)); // 22.0
// static int min(int a, int b)
System.out.println(Math.min(3, 4)); // 3
// static int round(float a)
System.out.println(Math.round(12.23f)); // 12
}
--------------------------------------------------------------------------------
/**
* 获取7-9之间的随机数
* 操作随机数方法的常用步骤
*/
public class Demo04 {
public static void main(String[] args) {
// 大的数减去小的数,那么我们现在的范围就是[0, 2]
// 将差值加1
// 使用random()方法乘上面的值,范围为[0, 3)
// 然后向下取整,范围为[0,2],再加上第一步减去的小的数,最终范围[7,9]
for (int i = 0; i < 4; i++) {
double num = Math.floor(Math.random() * 3) + 7;
System.out.println(num);
}
}
}
System类
常用方法:
方法 | 方法说明 |
---|---|
static void arraycopy(Object src, int srcPos,Object dest, int destPos, int length) | 将一个数组中的内容从srcPos开始复制到另一个数组中的destPost去,复制长度为length |
static long currentTimeMillis() | 获取当前时间(以毫秒为单位) |
解释:
static void arraycopy(Object src, int srcPos,Object dest, int destPos, int length)
该方法完成的是将数组src中的内容从srcPos索引位置开始,复制到数组destPos中的destPos位置,总共复制的个数为length个元素;static long currentTimeMillis()
该方法获取当前的时间,其相对的时间为1970-01-01 08:00:00 ,因为中国在东八区,所以是从八点开始计算;
代码示例:
int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int[] brr = new int[5];
// 将arr数组中从0索引位置起始的元素复制5个,到brr数组中以0索引位置开始
System.arraycopy(arr, 0, brr, 0, 5);
for (int i = 0; i < brr.length; i++) {
System.out.print(brr[i] + " ");
}
运行结果:
1 2 3 4 5
--------------------------------------------------------------------------------
System.out.println(System.currentTimeMillis());
double start = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
System.out.println(i);
}
double end = System.currentTimeMillis();
System.out.println("运行毫秒数:" + (end - start));
运行结果:
1577362226785
省略循环输出
运行毫秒数:110.0
currentTimeMillis()方法的应用场景:
- 计算程序的运行时间,如上述代码示例第二段;
- 对于一些需要保证唯一不重复的操作(比如文件的名字不能重复);
Arrays类
Arrays类的作用:
Arrays数组工具类,其作用就是用来操作数组;例如:排序功能、二分查找、拷贝功能、填充功能、转成字符串功能等(具体可以自行去API文档查看);
常用方法:
方法 | 方法说明 |
---|---|
sort(参数列表) | 对数组进行排序 |
fill(参数列表) | 给数组填充一样的值 |
copyOf(参数列表) | 复制数组中的元素 |
代码示例:
public class ArraysDemo01 {
public static void main(String[] args) {
int[] arr = {4, 2, 5, 6, 1, 9, 3};
// 数组的排序
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
// 数组的复制
int[] brr = Arrays.copyOf(arr, 5);
System.out.println(Arrays.toString(brr));
// 数组的填充
Arrays.fill(brr, 3);
System.out.println(Arrays.toString(brr));
}
}
运行结果:
[1, 2, 3, 4, 5, 6, 9]
[1, 2, 3, 4, 5]
[3, 3, 3, 3, 3]
日期相关的类
Date类
概述:
Date类代表了一个特点的时间,精确到毫秒;其用来对时间进行操作;
常用方法:
方法 | 方法说明 |
---|---|
Date() | 日期的无参构造方法 |
Date(long date) | 日期的有参构造方法 |
long getTime() | 返回自1970年1月1日以来,由此 Date对象表示的00:00:00 GMT的毫秒数 |
void setTime(long time | 设置此 Date 对象以表示1970年1月1日00:00:00 GMT后的 time 毫秒的时间点 |
代码示例:
public class DateDemo01 {
public static void main(String[] args) {
// 无参构造方法,初始化获取的是当前的时间
Date date = new Date();
System.out.println(date);
// 有参构造方法
Date date1 = new Date(1000);
System.out.println(date1);
date1.setTime(10000);
System.out.println(date1);
long time = date1.getTime();
System.out.println(time);
}
}
SimpleDateFormat类
为什么要进行日期的格式化:
Date类提供的toString方法打印的日期格式不是我们自己想要的,为了达到我们想要的格式,就出现了日期格式转换类;
构造方法:
方法名 | 说明 |
---|---|
public SimpleDateFormat() | 构造一个SimpleDateFormat,使用默认模式和日期格式 |
public SimpleDateFormat(String pattern) | 构造一个SimpleDateFormat使用给定的模式和默认的日期格式 |
常用方法:
public final String format(Date date) // 将日期格式化成日期/时间字符串解析(从String到Date)
public Date parse(String source) // 从给定字符串的开始解析文本以生成日期
代码示例:
public class SimpleDateFormatDemo {
public static void main(String[] args) throws ParseException {
// 日期格式化:将Date转为String
// 创建一个日期类对象
Date d = new Date();
// 创建日期格式类对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 将日期类转成字符串
String format = sdf.format(d);
System.out.println(format);
// 解析字符串:将String转为Date
String date = "2048年3月14日 2时5分30秒";
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
Date parse = sdf2.parse(date);
System.out.println(parse);
}
}
运行结果:
2020-01-12 17:09:48
Sat Mar 14 02:05:30 CST 2048
Calendar类
概述:
Calendar类为日历类,其提供了很多的方法来对日期字段进行操作;
常用方法:
public int get(int field) // 返回给定日历字段的值
public abstract void add(int field, int amount) // 根据日历的规则,将指定的时间量添加或减去给定的日历字段
public final void set(int year,int month,int date) // 设置当前日历的年月日
代码示例:
public class CalendarDemo {
public static void main(String[] args) {
// 获取日历类的对象
Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH) + 1;
int day = c.get(Calendar.DATE);
System.out.println(year + "年" + month + "月" + day + "日");
// 输出10年后的10天前
c.add(Calendar.YEAR, 10);
c.add(Calendar.DATE, -10);
int year2 = c.get(Calendar.YEAR);
int month2 = c.get(Calendar.MONTH) + 1;
int day2 = c.get(Calendar.DATE);
System.out.println(year2 + "年" + month2 + "月" + day2 + "日");
}
}
注意:
月份默认从0开始,即0代表1月,11代表12月;
案例:
获取任意一年的二月有多少天;
public class CalendarTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入需要查阅的年份:");
int year = sc.nextInt();
Calendar c = Calendar.getInstance();
c.set(year, 2, 1);
c.add(Calendar.DATE, -1);
int day = c.get(Calendar.DATE);
System.out.println(year + "年的2月份有" + day + "天");
}
}
包装类
概述:
Java是一个纯面向对象的高级语言,但是为了操作方便,将8种基本数据类型设计为非对象类型的数据,但是为了将这些基本数据类型的数据能够像对象一样的去操作,Java就提供了一种包装类机制,每一种基本数据类型都有对应的包装类;
基本数据类型对应的包装类:
byte ---> Byte
short ---> Short
int ---> Integer
long ---> Long
float ---> Float
double ---> Double
char ---> Character
boolean ---> Boolean
Integer类
转换成Integer的常用方法:
public static Integer valueOf(int i) // 返回表示指定的int值的Integer实例
public static Integer valueOf(String s) // 返回一个保存指定值的Integer对象 String
代码示例:
public class IntegerTest {
public static void main(String[] args) {
int num = 10;
String str = "20";
Integer a = Integer.valueOf(num);
Integer b = Integer.valueOf(str);
Integer c = num;
System.out.println(a == c); // true
System.out.println(a == b); // false
System.out.println(c == num); // true
}
}
由此可见,利用valueOf方法和直接赋值给Integer对象的效果是一样的,因为有个自动装箱的操作;其实,Integer c = num; 其底层的操作是Integer c = Integer.valueOf(num);所以它们两个是相等的;有自动装箱就有自动拆箱,当 c== num的时候,num就进行了自动拆箱操作,所以返回true;
自动装箱和自动拆箱:
自动装箱:就是把基本数据类型转换为对应的包装类类型;
自动拆箱:就是把包装类类型转换为对应的基本数据类型;
代码示例:
Integer i = 10;
i += 10; // ==> i = i + 10; ==> i + 10 自动拆箱 ==> i = 20 自动装箱
int和String类型的相互转换:
-
int转换为String:
int num = 10; // 方式一 String s1 = num + ""; // 最暴力最简单的方式 // 方式二 String s2 = String.valueOf(num);
-
String转换为int:
String str = "10"; // 方式一 Integer a = Integer.valueOf(str); int num1 = x.intValue(); // 方式二 int num2 = Integer.paresInt(str);