Java 常用类库(二)
2017-08-15 17:24
204 查看
日期处理
java.util.Data类
日期是一个重要的单位,在Java之中如果用户想要取得当前系统的日期时间,可采用java.util.Data类对象,而这个Data类的构造方法:无参构造:public Data() ;
有参构造:public Data(long data) ;
//操作Data import java.util.Date; public class test { public static void main(String[] args) { Date date = new Date() ; System.out.println(date); } }
运行结果:
Mon Aug 14 10:52:40 CST 2017
提示:关于long和Data的相互转型
Long数据类型一直被强调是:可以保持文件大小或者日期时间数据,而这一特性在Data类库中有两个方法可以实现long表示的日期和Data类表示的时间的转换。
构造方法:public Data(long data);
返回long数据:public long getTime();
// long和Data的相互转型 import java.util.Date; public class test { public static void main(String[] args) { Date date = new Date(System.currentTimeMillis()) ; System.out.println("long表示的时间:" + System.currentTimeMillis()); System.out.println("Data类表示的时间" + date); System.out.println("Data类-->long类型:" + date.getTime()); } }
运行结果:
long表示的时间: 1502787648899 Data类表示的时间: Tue Aug 15 17:00:48 CST 2017 Data类-->long类型:1502787648899
java.text.SimpleDateFormat类
为了得到良好的体验,必须要想办法格式化Date类的数据显示结果。Java为此提供了一个专门的处理类:java.text.SimpleDateFormat类。在SimpleDateFormat类之中主要使用如下几个操作方法:
构造方法:public SimpleDateFormat(String pattern) ;
将Date格式化为String(DateFormat类):public final String format(Date date) ;
将String格式化为(DateFormat类):public Date parse(String source) throws ParseException ;
但是在实例化SimpleDateFormat类的时候需要传入一些日期时间的标记,而所有的标记字符都在SimpleDateFormat类中定义:年(yyyy)、月(MM)、日(dd)、时(HH)、分(mm)、秒(ss)、毫秒(SSS)。
将Data类的时间格式化为String
// 将Data格式化为String import java.text.SimpleDateFormat; import java.util.Date; public class test { public static void main(String[] args) { Date date = new Date() ; // 注意此格式化语句,指定了格式化的具体内容,与输出直接对应 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS毫秒,(我就是为验证格式而生的)") ; String str = sdf.format(date) ; System.out.println(date); System.out.println(str); } }
运行结果:
Mon Aug 14 11:17:09 CST 2017 2017-08-1 d7f8 4 11:17:09.726毫秒,(我就是为验证格式而生的)
将格式化的String时间转换为Data类的时间
// 将格式化的字符串日期转换为Data类的日期 import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class test { public static void main(String[] args) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS") ; // 这里的str格式要和sdf规定的格式相同 String str = "2011-11-11 11:11:11.111" ; Date date = sdf.parse(str) ; System.out.println("String is :" + str); System.out.println("invert to date is :" + date); } }
运行结果:
String is :2011-11-11 11:11:11.111 invert to date is :Fri Nov 11 11:11:11 CST 201
基本数据类型、包装类、String、Date类之间的转换
那么到此为止已经知道了基本数据类型、包装类、String、Date类之间的转换:基本类型数据 –> 包装类:自动装箱和自动拆箱
基本数据类型 –> String: 使用valueOf()
long –> Date:Date类的构造方法
Date –> long:getTime() 方法
String –> 基本类型:包装类
String <—–> Date : java.text.SimpleDateFormat类、format()、parse()。
Random类
java.util.Random;用于产生随机数// 产生100以内的随机数 import java.util.Random; public class test { public static void main(String[] args) throws ParseException { Random rand = new Random() ; for(int x = 0;x<10;x++){ System.out.print(rand.nextInt(100) + "\t"); } } }
运行结果:
48 42 10 17 8 53 15 59 98 65
对象克隆
克隆指对象的复制操作,在Object类中提供有clone()方法。protected Object clone() throws CloneNotSupportedException
如果要具体实现克隆,则要被克隆的对象所在的类需要实现Cloneable接口,但是此接口里面没有任何方法,是标识接口,只表示一种能力,具备克隆能力。
// 编写具有克隆的类:Person class Person implements Cloneable{ private String name ; private int age ; public Person(String name,int age){ this.name = name; this.age = age; } public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); // 调用父类(Object)的对象克隆方法即可 } @Override public String toString() { return "姓名:" + this.name + ", 年龄:" + this.age; } } public class test { public static void main(String[] args) throws CloneNotSupportedException { Person pA = new Person("James",20) ; Person pB = (Person) pA.clone() ; // 克隆对象向下转型 pB.setAge(33); System.out.println(pA.toString()); System.out.println(pB.toString()); } }
运行结果:
姓名:James, 年龄:20 姓名:James, 年龄:33
Math类
Math是一个数学操作类,在Math类之中提供有大量的数学操作方法。这里强调一个方法:public static long round(double a)
public class test { public static void main(String[] args) throws CloneNotSupportedException { System.out.println(Math.round(15.1)); System.out.println(Math.round(15.88)); System.out.println(Math.round(13.5)); // 注意此句运行结果 System.out.println(Math.round(-13.5)); // 注意此句运行结果 System.out.println(Math.round(-13.51)); // 注意此句运行结果 } }
运行结果:
15 16 14 -13 -14
大数字操作类(重点)
如果说现在有两个非常大的数字(超过了double范围)要进行数学的加法计算,可以使用字符串保存每一位的数字,而后按照每个字符进行手工的处理数学计算。但这样的复杂度非常高。为此,Java里面提供了java.math包,此包中提供有两个大数字操作类:BigInteger(大整数)、BigDecimal(大小数)。大整数操作类:BigInteger
BigInteger是Number的子类,但是在使用的时候不用转换为Number类型,在BigInteger类中定义的public BigInteger(String val),因为数据量一大,肯定使用String表示;
// 完成四则运算 import java.math.BigInteger; public class test { public static void main(String[] args) throws CloneNotSupportedException { BigInteger bigA = new BigInteger("1546846548888516489"); BigInteger bigB = new BigInteger("516849884684"); System.out.println(bigA.add(bigB)); System.out.println(bigA.subtract(bigB)); System.out.println(bigA.multiply(bigB)); System.out.println(bigA.divide(bigB)); BigInteger result[] = bigA.divideAndRemainder(bigB); System.out.println("商:" + result[0] + ",余数:" + result[1]); System.out.println(bigA.pow(Integer.MAX_VALUE)); } }
运行结果:
1546847065738401173 1546846032038631805 799487460416873115711482554476 2992835 商:2992835,余数:124260277349
以上只是针对BigInteger类的一个演示,但是这样的代码意义不大,而且也没有使用的环境,如果真遇见了数学问题,一定要去找数学公式第三方开发包。
大小数操作类:BigDecimal
此类操作与BigInteger基本相同,也提供有基本的数学计算,BigDecimal有个非常重要的功能。Math中的round()方法对所有数字进行四舍五入操作过程中,采用的是所有的小数点全部进位,不能保留小数位。但是很多时候这样的操作是不可取的。在BigDecimal类中存在一个除法操作:
public BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode)
第一个参数:被除数,BigDecimal类型
第二个参数:保留的小数位数;
第三个参数:进位模式(例如:public static final int ROUND_HALF_DOWN)
接下来用此方法实现准确度四舍五入:
// 实现准确度四舍五入 import java.math.BigDecimal; import java.math.BigInteger; class MyMath { /** * 四舍五入操作,将由用户输入要四舍五入的数据,同时设置保留小数位 * @param num 包含的是小数数据 * @param scale 保留的小数位数 * @return 处理后的四舍五入数据 */ public static double round(double num,int scale){ BigDecimal bigNum = new BigDecimal(num) ; //只有变为BigDecimal才可以操作divide方法 BigDecimal result = bigNum.divide(new BigDecimal(1), scale, BigDecimal.ROUND_HALF_UP) ; return result.doubleValue() ; } } public class test { public static void main(String[] args) throws CloneNotSupportedException { System.out.println(MyMath.round(7809.651298, 2)); System.out.println(MyMath.round(7809.651298, 1)); System.out.println(MyMath.round(-13.5, 0)); // 对比Math类中的四舍五入语句 } }
运行结果:
7809.65 7809.7 -14.0
相关文章推荐
- java常用类库之日期操作类
- [Java 常用类库]:StringCompress(字符串压缩)
- java 常用集合类库
- java常用类库-正则表达式【1】
- java并发编程 之 常用并发类库使用举例
- 【Java常用类库】_国际化程序
- java常用的类库
- java常用类库(StringBuffer类、Runtime类、System类)
- Java常用类库之时间操作类——Date、Calendar、DateFormat、SimpleDateFormat及实例操作
- [Java 11 常用类库] 总结要点
- java常用类库---StringBuffer
- Java系列(十六)__Java常用类库(2)
- java中常用的类库学习(1)
- Java常用类库——Arrays类(用于普通数组操作)、比较器(Comparable、Comparator 用于对象排序)的使用
- Google的Java常用类库 Guava资料
- Java常用类库--观察者设计模式( Observable类Observer接口)
- java常用类库---大数操作(BigInteger,BigDecimal)
- Java常用类库(Random)
- Java常用类库2
- Java程序员常用工具类库