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); }