第五章:API常用类2
1.Math类
java.lang.math
Math类主要是一些静态方法用于科学计算。
因此在使用的时候先导包,具体的使用的时候通过Math类的类名来调用具体方法
Math类方法的参数和返回值类型一般为double类型
public class MathDemo {
public static void main(String[] args) {
System.out.println(Math.abs(-3));//求绝对值
System.out.println(Math.sqrt(9));//求平方根
System.out.println(Math.pow(2,3));//a的b次幂
System.out.println(Math.max(2,3));//求两个数的最大值
System.out.println(Math.min(5,6));//求两个数的最小值
System.out.println(Math.random());//求1-9之间的随机数
System.out.println(Math.ceil(5.2));//向上取整
System.out.println(Math.floor(9.9));//向下取整
System.out.println(Math.round(5.4));//四舍五入
}
}
2.Random类
这个类是伪随机,即就是有规律的随机
在进行随机时,随机算法的起源数字称为种子数(seed),在种子数的基础上进行一定的变换,从而产生随机数字
并且相同种子数的Random对象,相同批次产生的随机数完全相同。
也就是说,只要种子数相同,那么两个对象每一次产生两个的随机数都完全相同。
1.构造方法
1.无参构成方法
// 该构造方法使用一个和当前系统时间对应的相对时间有关的数字作为种子数,然后使用这个种子数构造Random对象
// 可返回的类型有 int, long, float, double, boolean
Random r = new Random();
System.out.println(r.nextBoolean());
2.有参构造方法
Random r1 =new Random(5);
// 7,4,1,9,43,3
// 7,4,1,9,43,3
Random r2 =new Random(5);
System.out.println("种子数5::"+r1.nextDouble());
System.out.println("种子数5::"+r2.nextDouble());
2.成员方法
1.无参成员方法
// 这个方法产生的随机数没有范围的限制
// 产生的随机数本质上是 int型,因此只要是比 int型容量大的数值类型都可以接收
Random r4 = new Random();
float d1 = r4.nextInt();
System.out.println(d1);
2.有参成员方法
/*public int nextInt(int n)
这个就相当于有了界限
参数如果是负数,编译通过,运行时报错。也不能是小数,直接编译报错
接收类型只要比int型容量大就可以接收
bound表示范围,界限;可以渠道(0,n-1]之间的正整数
*/
double d2 = r4.nextInt(1);
System.out.println(d2);
3.System类
System类代表系统,系统级的很多属性和控制方法都放置在该类中,该类位于java.lang包。并且System类不会被实例化
System类中包含了in(标准输入流),out(标准输出流),err(标准错误输出流)三个成员变量
public class SystemDemo {
public static void main(String[] args) {
System.out.println(System.currentTimeMillis());
//获得系统时间 1970.1.1 0:0:0 至今的毫秒值差
Byte [] a = {1,2,3,4,5};
Byte[]b= new Byte[10];
System.arraycopy(a,0,b,0,10);
System.out.println(Arrays.toString(b));
/*
System.arraycopy( a, srcpos, b, destpos, a.length)
a:源数组 srcpos:源数组起始位置 b:目标数组 destpos:目标数组起始位置 a.length:a数组的长度
*/
System.exit(0);
//关闭、退出虚拟机
}
}
4.Date类
这个类的很多方法现在已经被弃用了,成为了过期方法。
public class DataDemo {
public static void main(String[] args) {
Date date = new Date();
System.out.println(date);
//日期对象中封装了当时时间信息,精确到毫秒
System.out.println(date.getTime());
System.out.println(date.getDate());// 这一月的第几天,过期的方法,但是可以使用
System.out.println(date.getDay());// 这个星期的第几天
System.out.println(date.getYear()+1900);// 年份
System.out.println(date.getMonth()+1);// 月份,国外的月份是从零开始的
}
}
5.Calendar类
关于时间建议使用这个类,这是一个抽象类,不能被实例化
public class Demo {
public static void main(String[] args)
// getInstance 这个类方法实际上返回的还是子对象 GregorianCalendar
Calendar c = new GregorianCalendar();
System.out.println(c.getTime());
System.out.println(c.get(Calendar.DAY_OF_MONTH));//这年的第几天
System.out.println(c.get(Calendar.YEAR));//年份
System.out.println(c.get(Calendar.WEEK_OF_MONTH));//这月的第几周
System.out.println(c.get(Calendar.DAY_OF_WEEK));//这周的第几天
}
}
6.SimpleDateFormat类
简单日期格式化
主要功能:格式化(日期—>字符串),解析(字符串—>日期),和标准化
在java.text包
public class SDF {
public static void main(String[] args) {
/*调用构造方法自定义格式
模式匹配代码(注意大小写和数量)
yyyy 2020年 yy 20年
MM 09月 dd 12日 HH8时 mm 18时
ss 20秒 SS 200毫秒
*/
//1.日期转字符串
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String str = sdf.format(date);
System.out.println(str);*/
//2.字符串转日期
String str1 = "1999-11-05";
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
try {
Date data1 = sdf.parse(str1);、
//使用parse方法,并且需要抛出异常
System.out.println(data1);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
7.BigInteger类
在Java中有许多数字处理的类,但是都有一定的局限性。我们学过的Integer也只是int的包装类,范围是没有变化的。
所以在java中还提供了范围更大的数据类型,它支持任意精度的整数。
Bigteger类位于Java.math包中
public class BIDemo {
public static void main(String[] args) {
//构造方法的形参是字符串,可以直接将十进制的字符串变成大整数
BigInteger a1 = new BigInteger("123456789456979813213131");
BigInteger a2 = new BigInteger("5489451213184851231331");
/*
BigInteger不是基本类型,所以不能使用+,-,*,/
但是可以使用add()加,subtract()减,multiply()乘,divide()除 方法进 行运算
*/
System.out.println(a1.add(a2));//a1+a2
System.out.println(a1.subtract(a2));//a1-a2
System.out.println(a1.multiply(a2));//a1*a2
System.out.println(a1.divide(a2));//a1/a2
}
}
8.BigDecimal类
在计算机中存在float,double这样的浮点数,但是计算机是二进制的,浮点数会失去一定的精度值。
根本原因:十进制通常没有完全相同的二进制形式;十进制数的二进制表示形式只能无限接近那个值。
double a = 0.9~0.8 a==0.1(false)
因此有了BigDecimal类,存在在java.math类中
BigDecimal是不可变的,在进行操作之后会创建一个新的对象,原对象不变,因此一定要注意保留操作后的。
public class BDDemo {
public static void main(String[] args) {
BigDecimal b1 = new BigDecimal("10");
BigDecimal b2 = new BigDecimal("3");
System.out.println(b1.subtract(b2));
/*如果不能整除,程序运行后会报错
divide()方法可以传入三个参数
BigDecimal divisor(除数),int scale(保留小数的位数),int roundingMond(舍入模式)
ROUND_HALF_DOWN 向下舍入 ROUND_HALF_UP
向上舍入(四舍五入时可以使用)
*/
System.out.println(b1.divide(b2,4, RoundingMode.FLOOR));//保留小数点后4位,之后向下取整
System.out.println(b1.divide(b2,5,RoundingMode.CEILING));//保留小数点后5位,之后向上取整
System.out.println(b1.add(b2));
}
}
9.正则表达式
Regular Expression,在代码中常简写为regex,regexp或者RE
在什么情况下使用?
从各种终端向程序中输入数据时,需要对象的输入的数据格式进行验证(长度格式())
它是一种模式匹配语法,有许多特定字符组成,每种字符匹配一种规则,我们使用这些特定的字符匹配某个字符串,判断字符串是否满足规则需求,符合返回true,否则返回false。
符号 | 含义 |
---|---|
\\d | 匹配一个0-9数字 |
\\D | 匹配一个非数字字符 |
[2,4,6];[246] | 匹配246中的任意一个 |
? | 一次或一次也没有 |
* | 0次或多次 |
+ | 一次或多次 |
{n} | 至少n个 |
{n,m} | 至少n个,最多m个 |
\\s | 匹配一个空格字符(空白字符) |
[a-z] | 匹配一个小写字母 |
[A-Z] | 匹配一个大写字母 |
[a-zA-Z] | 匹配一个大写或小写字母 |
\\w | 匹配大小写字母、数字、下划线 |
\\W | 除了上面的 |
\. | 预定义字符,表示任意字符,使用时需要转义 |