math类
- 包含执行基本数字运算的方法,Math类没有公开的构造器
- 如何使用类中的成员呢?看类的成员是否都是静态的如果是,通过类名就可以直接调用
Math类的常用方法
public static int abs(int a)-------------------//获取参数绝对值public static double ceil(double a)------------//向上取整public static double floor(double a)-----------//向下取整public static int round(float a)---------------//四舍五入public static int max (int a,int b)------------//获取两个int值中的较大值public static double pow(double a,double b)--//返回a的b次幂的值public static double ramdom()----------------//返回值为double的随机值,范围[0.0,1.0)
public class mathh {
public static void main(String[] args) {
// 取绝对值
System.out.println(Math.abs(-12));
// 向上取整数
System.out.println(Math.ceil(4.222));
// 向下取整数
System.out.println(Math.floor(4.21));
// 求指数次方
System.out.println(Math.pow(2,3));
// 四舍五入
System.out.println(Math.round(4.23));
System.out.println(Math.round(4.61));
System.out.println(Math.random());//0.0-1任意数
}
}
System类
- System的功能是通用的,都是直接用类名调用即可,所以System不能被实例化(不能实例化俗解不能new)
System类常用的方法
public static void exit(int status)--------终止当前运行的java虚拟机,非零表示异常终止public static long currentTimeMillis()----返回当前系统的时间毫秒值形式public static void arraycopy(数据源数组,起始索引,目的地数组,起始索引,拷贝个数)-拷贝数组
public static long currentTimeMillis()----返回当前系统的时间毫秒值形式
计算程序跑了多长时间
public class SystemDome {
public static void main(String[] args) {
long l = System.currentTimeMillis();
for (int i = 0; i <1000000 ; i++) {
System.out.println("输出:"+i);
}
long l1 = System.currentTimeMillis();
System.out.println((l1-l)/1000.0+ "s");
System.out.println(System.currentTimeMillis());
}
}
public static void arraycopy(数据源数组,起始索引,目的地数组,起始索引,拷贝个数)-拷贝数组
import java.util.Arrays;
public class SystemDome {
public static void main(String[] args) {
long l = System.currentTimeMillis();
for (int i = 0; i <1000000 ; i++) {
System.out.println("输出:"+i);
}
long l1 = System.currentTimeMillis();
System.out.println((l1-l)/1000.0+ "s");
System.out.println(System.currentTimeMillis());
int [] arry1={10,20,30,40,50,60,};
int[] arry2=new int[6];
// arraycopy(Object src, int srcPos,
// Object dest, int destPos,
// int length);
System.arraycopy(arry1,3,arry2,3,3);//(数据源数组,起始索引,目的地数组,起始索引,拷贝个数)
System.out.println(Arrays.toString(arry2));
}
}
BigDecimal类
作用:解决精度失真的问题
使用步骤:
创建对象BigDecimal封装浮点型数据(最好的方式是调用方法)
public static BigDecimal valueOf(double val)---------包装浮点数成为BigDecimal对象。
BigDecimal常用api
public BigDecimal add(BigDecimal b)----------加法
pubilc BigDecimal subtract(BigDecimal b)----减法
public BigDecimal mltiply(BigDecimal b)------乘法
public BigDecimal divide(BigDecimal b)-------除法
public BigDecimal divide(另一个BigDecimal对象,精确几位,舍入模式)
package BigDecimall;
import java.math.BigDecimal;
import java.math.RoundingMode;
public class BigDecimalDemo {
public static void main(String[] args) {
double a=0.1;
double b=0.2;
System.out.println(a+b);
//包装浮点型数据成为大数据对象BigDecimal
BigDecimal a1=BigDecimal.valueOf(a);
BigDecimal b1=BigDecimal.valueOf(b);
BigDecimal c=a1.add(b1);//调用加法 a1+b1
BigDecimal cc=a1.subtract(b1);//a1-b1
BigDecimal ccc=a1.multiply(b1);//a1乘b1
BigDecimal cccc=a1.divide(b1);//a1除以b1
System.out.println(ccc);
System.out.println(cc);
System.out.println(c);
System.out.println(cccc);
//注意BigDecimal一定要精度计算
//10除以3=0.3333333....会报错
BigDecimal a11=BigDecimal.valueOf(10.0);
BigDecimal b11=BigDecimal.valueOf(3.0);
BigDecimal z=a11.divide(b11,3, RoundingMode.UP);
System.out.println(z);
//转为double类型
double as=c.doubleValue();
System.out.println(as);
}
}
Data类
使用Data类的无参构造方法创建的对象可以获取本机的当前日期和时间
package datapakge;
import java.util.Date;
public class DataDemo {
public static void main(String[] args) {
Date date = new Date();//获取本机时间
System.out.println(date);
}
}
用由有参构造方法计算(时间过去一小时120秒)之后的时间是多少
package datapakge;
import java.util.Date;
public class DataDemo {
public static void main(String[] args) {
Date date = new Date();//获取本机时间
System.out.println(date);
long teme = date.getTime();//获取时间毫秒值
teme += (60 * 60 + 120) * 1000;//在一小时一百二十秒后
Date t = new Date(teme);//将时间毫秒值转换成时间
System.out.println(t);//输出时间
}
}
SimpleDateFormat类
- 可以对Date对象或时间毫秒值格式化成我们喜欢的时间形式。
- 也可以吧字符串的时间形式解析成日期对象
package datapakge;
import java.text.SimpleDateFormat;
import java.util.Date;
public class SimpleDateFormatDemo {
public static void main(String[] args) {
Date date = new Date();
System.out.println(date);
//格式化这个日期对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss EEE a");//EEE星期几 a代表上午或者下午
//开始格式化日期对象成为字符串形式
String as = sdf.format(date);
System.out.println(as);
//格式化时间毫秒值 121后的时间多少
long s = System.currentTimeMillis();//获取时间毫秒值
s += 120 * 1000;//增加120秒
String format = sdf.format(s);//格式化时间毫秒值
System.out.println(format);
}
}
输出结果
计算出
2022年4月9日 23:20:20 往后2天14小时03秒的时间是多少
package datapakge;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class SimpleDateFormatDemo1 {
public static void main(String[] args) throws ParseException {
//使用SimpleDateFormatDemo解析字符串时间成为日期对象
//时间2022年4月9日 23:20:20 往后2天14小时03秒的时间是多少
//把时间放到字符串中
String a = "2022年4月9日 23:20:20";
//把字符串解析日期对象
SimpleDateFormat s = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
Date d = s.parse(a);//获得Sat Apr 09 23:20:20 CST 2022
System.out.println(d);
String format1 = s.format(d);
System.out.println(format1);
System.out.println("----------------------------------");
System.out.println("往后2天14小时03秒的时间是:");
// long f1 = d.getTime();
// System.out.println(f1);
//往后走的时间 L防止
long f = d.getTime() + (2L * 24 * 60 * 60 + 14 * 60 * 60 + 3) * 1000;//时间毫秒值
String format = s.format(f);//格式化时间毫秒值 转换成2022年04月12日 13:20:23
System.out.println(format);
}
}
结果