Java常用类库(二)

上次讲到了java.lang包下面的Runtime、System、StringBuffer这三个类,今天我们来说一说Data类、Random类、Math类、大数字操作类。

Data类

日期是一个重要的单位,在Java之中如果用户想要取得当前系统的日期时间,可采用java.util.Data类对象,而这个Data类的构造方法:

  • 无参构造:public Data() ;
  • 有参构造:public Data(long data)
//操作Dataimport java.util.Date;
public class test {    
public static void main(String[] args) {        
Date date = new Date() ;        
System.out.println(date);    
    }
}

运行结果:Tue Dem 05 17:07: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(date);
    }
}

运行结果:
long表示的时间: 1502787648899
Data类表示的时间: Tue Dem 05 17:07:40 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(str);  

运行结果:

Tue Dem 05 17:14:09 CST 2017 2017-12-05 17:14: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);
}

运行结果:

String is :2011-11-11 11:11:11.111invert to date is :Fri Nov 11 11:11:11 CST 2011

基本数据类型、包装类、String、Date类之间的转换
那么到此为止已经知道了基本数据类型、包装类、String、Date类之间的转换:
1. 基本类型数据 –> 包装类:自动装箱和自动拆箱
2. 基本数据类型 –> String: 使用valueOf()
3. long –> Date:Date类的构造方法
4. Date –> long:getTime() 方法
5. String –> 基本类型:包装类
6. 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接口,但是此接口里面没有任何方法,是标识接口,只表示一种能力,具备克隆能力。

// 编写具有克隆的类:
Personclass 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("12");        
BigInteger bigB = new BigInteger("3");        
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));    
    }
}

运行结果:

15
9
36
4
商:4,
余数:0

以上只是针对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 scale 保留的小数位数     
*/   
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.657809.7 -14.0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值