一、Math类:针对数学运算进行操作的类
1、常用的方法
A:绝对值 public static int abs(int a)
B:向上取整 public static double ceil(double a)
C:向下取整 public static double floor(double a)
D:两个数据中的大值 public static int max(int a, int b)
E:a的b次幂 public static double double pow(double a ,double b)
F:随机数 public static double random()
G:四舍五入 public static int round(float a)
H:正平方根 public static doule sqrt(double)
/** * * Math类:、 * A:绝对值 public static int abs(int a) B:向上取整 public static double ceil(double a) C:向下取整 public static double floor(double a) D:两个数据中的大值 public static int max(int a, int b) E:a的b次幂 public static double double pow(double a ,double b) F:随机数 public static double random() G:四舍五入 public static int round(float a) H:正平方根 public static doule sqrt(double) */ public class Demo { public static void main(String[] args) { //取绝对值 System.out.println(Math.abs(-10)); //向上取整 System.out.println(Math.ceil(12.3));//13.0 System.out.println(Math.ceil(12.66));//13.0 //向下取整 System.out.println(Math.floor(12.3));//12.0 System.out.println(Math.floor(12.66));//12.0 //求2个数的最大值 System.out.println(Math.max(3, 4)); //求2个数的最小值 System.out.println(Math.min(3, 4)); //求a的b次幂 System.out.println(Math.pow(2, 3));//相当于2的3次方 //产生一个随机随 System.out.println(Math.random());//随机随范围0.0<=x<1.0 //四舍五入 System.out.println(Math.round(3.4));//3 System.out.println(Math.round(3.5));//4 //正平方跟 System.out.println(Math.sqrt(4)); //相当于 Math.pow(4,0.5) } }
/** * * 需求:请设计一个方法,可以实现获取任意范围内的随机数。 * * 分析: * A:键盘录入两个数据。 * int strat; * int end; * B:想办法获取在start到end之间的随机数 * 我写一个功能实现这个效果,得到一个随机数。(int) * C:输出这个随机数 */ public class Demo { public static void main(String[] args) { //键盘输入2个数 Scanner sc = new Scanner(System.in); System.out.println("请输入start:"); int start = sc.nextInt(); System.out.println("请输入end:"); int end = sc.nextInt(); //在start到end之间产生一个随机数 for(int x =0;x<100;x++){ int c = random(start,end); //输出随机数 System.out.println(c);} } //产生随机数的方法 private static int random(int start, int end) { int num = (int) (Math.random()*(end-start+1))+start; return num; } }
二、Random类:产生随机数的类
/* * Random:产生随机数的类 * * 构造方法: * public Random():没有给种子,用的是默认种子,是当前时间的毫秒值 * public Random(long seed):给出指定的种子 * * 给定种子后,每次得到的随机数是相同的。 * * 成员方法: * public int nextInt():返回的是int范围内的随机数 * public int nextInt(int n):返回的是[0,n)范围的内随机数 */ public class RandomDemo { public static void main(String[] args) { // 创建对象 // Random r = new Random(); Random r = new Random(1111); for (int x = 0; x < 10; x++) { // int num = r.nextInt(); int num = r.nextInt(100) + 1; System.out.println(num); } } }
三、System类:System 类包含一些有用的类字段和方法。它不能被实例化。
public class Demo3_System { /** * * A:System类的概述 * System 类包含一些有用的类字段和方法。它不能被实例化。 * B:成员方法 * public static void gc():运行垃圾回收器 * public static void exit(int status):终止当前正在运行的 Java 虚拟机。参数用作状态码;根据惯例,非 0 的状态码表示异常终止。 * public static long currentTimeMillis()获取当前时间的毫秒值从1970年1月1日 00:00:00 开始 * pubiic static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)复制数组 * C:案例演示 * System类的成员方法使用 */ public static void main(String[] args) { //demo1(); //demo2(); //demo3(); int[] src = {11,22,33,44,55}; int[] dest = new int[8]; for (int i = 0; i < dest.length; i++) { System.out.println(dest[i]); } System.out.println("--------------------------"); System.arraycopy(src, 0, dest, 0, src.length); //将数组内容拷贝 for (int i = 0; i < dest.length; i++) { System.out.println(dest[i]); } } public static void demo3() { long start = System.currentTimeMillis(); //1秒等于1000毫秒 for(int i = 0; i < 1000; i++) { System.out.println("*"); } long end = System.currentTimeMillis(); //获取当前时间的毫秒值 System.out.println(end - start); } public static void demo2() { System.exit(1); //非0状态是异常终止,退出jvm System.out.println("11111111111"); } public static void demo1() { for(int i = 0; i < 100; i++) { new Demo(); System.gc(); //运行垃圾回收器,相当于呼喊保洁阿姨 } } } class Demo { //在一个源文件中不允许定义两个用public修饰的类 @Override public void finalize() { System.out.println("垃圾被清扫了"); } }
四、BigInteger类:可以让超过Integer范围内的数据进行运算
/** ** A:BigInteger的概述 * 可以让超过Integer范围内的数据进行运算 * B:构造方法 * public BigInteger(String val) * C:成员方法 * public BigInteger add(BigInteger val) 加法 * public BigInteger subtract(BigInteger val) 减法 * public BigInteger multiply(BigInteger val) 乘法 * public BigInteger divide(BigInteger val) 除法 * public BigInteger[] divideAndRemainder(BigInteger val) 取除法运算后的结果(商)和余数 */ public class Demo { public static void main(String[] args) { BigInteger bi1 = new BigInteger("5"); BigInteger bi2 = new BigInteger("2"); System.out.println(bi1.add(bi2));//bi1+bi2 System.out.println(bi1.subtract(bi2));//bi1-bi2 System.out.println(bi1.multiply(bi2));//bi1*bi2 System.out.println(bi1.divide(bi2));//bi1/bi2 BigInteger[] arr = bi1.divideAndRemainder(bi2);//取商和余数 for(int x=0;x<arr.length;x++){ System.out.println(arr[x]);// 商:2 余数;1 } } }
五、BigDecimal类:不可变的、任意精度的有符号十进制数,可以解决数据丢失问题
public class Demo5_BigDecimal { /** * * A:BigDecimal的概述 * 由于在运算的时候,float类型和double很容易丢失精度,演示案例。 * 所以,为了能精确的表示、计算浮点数,Java提供了BigDecimal * 不可变的、任意精度的有符号十进制数。 * B:构造方法 * public BigDecimal(String val) * C:成员方法 * public BigDecimal add(BigDecimal augend) * public BigDecimal subtract(BigDecimal subtrahend) * public BigDecimal multiply(BigDecimal multiplicand) * public BigDecimal divide(BigDecimal divisor)
* public BigDecimal divide(BigDecimal divisor,int scale,int roundingMode):商,几位小数,如何舍取
*/ * D:案例演示 * BigDecimal类的构造方法和成员方法使用 十进制表示1/3 0.3333333333333333333333333333333333333333 */ public static void main(String[] args) { //System.out.println(2.0 - 1.1); /*BigDecimal bd1 = new BigDecimal(2.0); //这种方式在开发中不推荐,因为不够精确 BigDecimal bd2 = new BigDecimal(1.1); System.out.println(bd1.subtract(bd2));*/ /*BigDecimal bd1 = new BigDecimal("2.0"); //通过构造中传入字符串的方式,开发时推荐 BigDecimal bd2 = new BigDecimal("1.1"); System.out.println(bd1.subtract(bd2));*/ BigDecimal bd1 = BigDecimal.valueOf(2.0); //这种方式在开发中也是推荐的 BigDecimal bd2 = BigDecimal.valueOf(1.1); System.out.println(bd1.subtract(bd2));
System.out.println("divide:"
+ bd1.divide(bd2, 3, BigDecimal.ROUND_HALF_UP)); }
六、Date类:表示特定的瞬间,精确到毫秒
构造方法:
Date():根据当前的默认毫秒值创建日期对象
Date(long date):根据给定的毫秒值创建日期对象
成员方法:
public long getTime():获取时间,以毫秒为单位
public void setTime(long time):设置时间
从Date得到一个毫秒值
getTime()
把一个毫秒值转换为Date
构造方法
setTime(long time)
/** * Date类:表示特定的瞬间,精确到毫秒 构造方法: Date():根据当前的默认毫秒值创建日期对象 Date(long date):根据给定的毫秒值创建日期对象 成员方法: public long getTime():获取时间,以毫秒为单位 public void setTime(long time):设置时间 从Date得到一个毫秒值 getTime() 把一个毫秒值转换为Date 构造方法 setTime(long time) */ public class Demo { public static void main(String[] args) { /*Date d = new Date(); System.out.println(d);//输出当前时间 年月日 小时 :分:秒 Date d = new Date(1000);//输入的毫秒数 System.out.println(d);//得到的结果是从1970年1月1日 00:00:00秒后加上给定的毫秒数后的时间 */ /*Date d = new Date(); d.setTime(1000); System.out.println(d);//和Date(long time)一样 */ Date d = new Date(); System.out.println(d.getTime());//获取从1970年1月1日到当前时间的毫秒数,相当于System.currentTimeMills() System.out.println(System.currentTimeMillis()); } }
七、DateForamt类:可以进行日期和字符串的格式化和解析,但是由于是抽象类,所以使用具体子类SimpleDateFormat。
SimpleDateFormat的构造方法:
SimpleDateFormat():默认模式
SimpleDateFormat(String pattern):给定的模式
年 y
月 M
日 d
时 H
分 m
秒 s
DateForamt类的成员方法
public final String format(Date date):将一个 Date 格式化为日期/时间字符串。
public Date parse(String source): 将自定义的时间格式字符串转成 英文格式的时间 时间字符串必须与构造函数中的格式一致
public class Demo { public static void main(String[] args) throws ParseException { Date d = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); System.out.println(sdf.format(d)); String str = "2017/12/33 22:90:20"; Date d2 = sdf.parse(str); System.out.println(d2);
Date d3 = new Date();
SimpleDateFormat sdf2 = new SimpleDateFormat();//默认格式
System.out.println(sdf2.format(d3)); }
结果:2017/04/05 17:00:21
Tue Jan 02 23:30:20 CST 2018
17-4-5 下午5:00
八、Calendar类:是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。
成员方法
public static Calendar getInstance() 使用默认时区和语言环境获得一个日历。
public int get(int field) 返回给定日历字段的值
public void add(int field,int amount) 根据日历的规则,为给定的日历字段添加或减去指定的时间量
public final void set(int year,int month,int date)设置日历字段 YEAR
、MONTH
和 DAY_OF_MONTH
的值
public class Demo { public static void main(String[] args) throws ParseException { Calendar c = Calendar.getInstance();// 使用默认时区和语言环境获得一个日历 System.out.println(c); //public int get(int filed)演示 int a = c.get(Calendar.DAY_OF_MONTH); System.out.println(a); System.out.println(c.get(Calendar.YEAR));//获取年 System.out.println(c.get(Calendar.MONTH));//获取月,是从零开始算起 System.out.println("现在的日期是:"+c.get(Calendar.YEAR)+"年"+(c.get(Calendar.MONTH)+1)+"月"+c.get(Calendar.DAY_OF_MONTH)+"日"); //public void add(int field,int amount) 根据日历的规则,为给定的日历字段添加或减去指定的时间量 c.add(Calendar.YEAR, -1);//返回一年前 System.out.println("一年前的今天是:"+c.get(Calendar.YEAR)+"年"+(c.get(Calendar.MONTH)+1)+"月"+c.get(Calendar.DAY_OF_MONTH)+"日"); //未来5年的2个月前10天后 即 2023年216号 c.add(Calendar.YEAR, 5); c.add(Calendar.MONTH, -2); c.add(Calendar.DAY_OF_MONTH, 10); System.out.println("未来的日期是:"+c.get(Calendar.YEAR)+"年"+(c.get(Calendar.MONTH)+1)+"月"+c.get(Calendar.DAY_OF_MONTH)+"日"); //public final void set(int year,int month,int date)设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值 c.set(2008, 8, 8); int year = c.get(Calendar.YEAR); int mouth = c.get(Calendar.MONTH); int date = c.get(Calendar.DATE); System.out.println("获得的日期是:"+year+"年"+mouth+"月"+date+"日"); } }