您的位置:首页 > 职场人生

黑马程序员——常用的API之冷门兵器

2016-01-04 05:40 661 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
A:BigDecimal

float类型和double的数据存储和整数不一样。它们大部分的时候,都是带有有效数字位。

于是在运算的时候,float类型和double很容易丢失精度。所以,为了能精确的表示、计算浮点数,Java提供了BigDecimal

BigDecimal类:不可变的、任意精度的有符号十进制数,可以解决数据丢失问题。

* 构造方法:
* 		public BigDecimal(String val)
*
* 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):商,几位小数,如何舍取
B:BigInteger

BigInteger:可以让超过Integer范围内的数据进行运算
* 构造方法:
* BigInteger(String val)<pre name="code" class="java"> * 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):返回商和余数的数组



C:Math用于数学运算的类

* 成员变量:
* 		public static final double PI
* 		public static final double E
* 成员方法:
* 		public static int abs(int a):绝对值
*		public static double ceil(double a):向上取整
*		public static double floor(double a):向下取整
*		public static int max(int a,int b):最大值 (min自学)
*		public static double pow(double a,double b):a的b次幂
*		public static double random():随机数 [0.0,1.0)
*		public static int round(float a) 四舍五入(参数为double的自学)
*		public static double sqrt(double a):正平方根
// public static double ceil(double a):向上取整
System.out.println("ceil:" + Math.ceil(12.34));//13
System.out.println("ceil:" + Math.ceil(12.56));//13
System.out.println("--------------");

// public static double floor(double a):向下取整
System.out.println("floor:" + Math.floor(12.34));//12
System.out.println("floor:" + Math.floor(12.56));//12
System.out.println("--------------");
请设计一个方法,可以实现获取任意范围内的随机数
public static int getRandom(int start, int end) {
// 回想我们讲过的1-100之间的随机数
// int number = (int) (Math.random() * 100) + 1;
// int number = (int) (Math.random() * end) + start;
// 发现有问题了,怎么办呢?
int number = (int) (Math.random() * (end - start + 1)) + start;
return number;
D:Random:产生随机数的类
* 构造方法:
* 		public Random():没有给种子,用的是默认种子,是当前时间的毫秒值
*		public Random(long seed):给出指定的种子
*
*		给定种子后,每次得到的随机数是相同的。
*
* 成员方法:
* 		public int nextInt():返回的是int范围内的随机数
*		public int nextInt(int n):返回的是[0,n)范围的内随机数
E:System类包含一些有用的类字段和方法,它不能被实例化。
* 方法:
* 		public static void gc():运行垃圾回收器。
*		public static void exit(int status):终止当前正在运行的 Java 虚拟机。参数用作状态码;根据惯例,非 0 的状态码表示异常终止。
*		public static long currentTimeMillis():返回以毫秒为单位的当前时间
*		public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)
*				从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置,总共复制length个元素。
数组复制的案例
public class SystemDemo {
public static void main(String[] args) {
// 定义数组
int[] arr = { 11, 22, 33, 44, 55 };
int[] arr2 = { 6, 7, 8, 9, 10 };
// 用arr的22,33替换arr2的8,9
// 从arr数组的第2个元素开始复制到arr2数组的第3个元素,总共复制2个元素。
System.arraycopy(arr, 1, arr2, 2, 2);

System.out.println(Arrays.toString(arr));
System.out.println(Arrays.toString(arr2));
}
}
F:Date 表示特定的瞬间,精确到毫秒。
* 构造方法:
* 		Date():根据当前的默认毫秒值创建日期对象
* 		Date(long date):根据给定的毫秒值创建日期对象


/* 从Date得到一个毫秒值
* 		getTime()
* 把一个毫秒值转换为Date
* 		构造方法
* 		setTime(long time)
*/


G:DateForamt 对日期和字符串进行格式化和解析的抽象类

但是由于是抽象类,所以使用具体子类SimpleDateFormat。

* Date	 --	 String(格式化)
* 		public final String format(Date date)
*
* String -- Date(解析)
* 		public Date parse(String source)
* SimpleDateFormat的构造方法:
* 		SimpleDateFormat():默认模式
* 		SimpleDateFormat(String pattern):给定的模式
* 			这个模式字符串该如何写呢?
* 			通过查看API,我们就找到了对应的模式
* 			年 y
* 			月 M
* 			日 d
* 			时 H
* 			分 m
* 			秒 s
* 			2014年12月12日 12:12:12对应
* 			yyyy年MM月dd日 HH:mm:ss
案例:

把当前的时间以"yyyy年MM月dd日 HH:mm:ss"格式打印出来,且把"2008-08-08 12:12:12"解析为时间

public class DateFormatDemo {
public static void main(String[] args) throws ParseException {
// Date -- String
// 创建日期对象
Date d = new Date();
// 创建格式化对象,给定模式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
// public final String format(Date date)
String s = sdf.format(d);
System.out.println(s);

//String -- Date
String str = "2008-08-08 12:12:12";
//在把一个字符串解析为日期的时候,请注意格式必须和给定的字符串格式匹配
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date dd = sdf2.parse(str);
System.out.println(dd);
}
}
H:Calendar 对日历进行操作的类
/* 最常用来为其创建对象的方式是通过该类的静态方法getInstance()
* public static Calendar getInstance()	返回的 Calendar 基于当前系统的日历时间(北京时间)。
*
* 获取日历字段的方法:
* 		public int get(int field):返回给定日历字段的值。
* 		日历类中的每个日历字段都是静态的成员变量,并且是int类型。使用类名直接获取
* 		如:Calendar.YEAR;Calendar.MONTH;Calendar.DATE;<pre name="code" class="java"> */



// 其日历字段已由当前日期和时间初始化:
Calendar rightNow = Calendar.getInstance(); // 子类对象

// 获取年
int year = rightNow.get(Calendar.YEAR);
// 获取月
int month = rightNow.get(Calendar.MONTH);
// 获取日
int date = rightNow.get(Calendar.DATE);

System.out.println(year + "年" + (month + 1) + "月" + date + "日");
设置和更改日历字段的方法
/*
* public void add(int field,int amount):根据给定的日历字段和对应的时间,来对当前的日历进行操作。
* public final void set(int year,int month,int date):设置当前日历的年月日
*/
案例1:获取5年后的10天前日期,然后把当前日期设置为2011年11月11日

public class CalendarDemo {
public static void main(String[] args) {
// 获取当前的日历时间
Calendar c = Calendar.getInstance();

// 5年后的10天前
c.add(Calendar.YEAR, 5);
c.add(Calendar.DATE, -10);
// 获取年
int year = c.get(Cal
4000
endar.YEAR);
// 获取月
int month = c.get(Calendar.MONTH);
// 获取日
int date = c.get(Calendar.DATE);
System.out.println(year + "年" + (month + 1) + "月" + date + "日");
System.out.println("--------------");

c.set(2011, 11, 11);

// 获取年
year = c.get(Calendar.YEAR);
// 获取月
month = c.get(Calendar.MONTH);
// 获取日
date = c.get(Calendar.DATE);
System.out.println(year + "年" + (month + 1) + "月" + date + "日");
}
}


案例2:编写程序,该程序启动后用户可以按“yyyy-MM-dd”的格式输入一个日期,程序计算这一天是星期几,并且计算出是一年中的第几天。

public class Test9 {
public static void main(String[] args) throws ParseException {
//给定模式创建SimpleDateFormat对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个日期,格式为‘yyyy-MM-dd’:");
String str = sc.nextLine();
//解析日期
Date d = sdf.parse(str);

//创建日历对象
Calendar cal = Calendar.getInstance();
//设置当前的日历时间为解析的时间
cal.setTime(d);

//获取星期
int week = cal.get(Calendar.DAY_OF_WEEK);
System.out.println("这一天是星期"+(week-1));
//获取天数
int day = cal.get(Calendar.DAY_OF_YEAR);
System.out.println("这一天是一年中的第"+day+"天");
}
}

案例3:获取任意一年的二月有多少天

/*
* 获取任意一年的二月有多少天
*
* 分析:
* 		A:键盘录入任意的年份
* 		B:设置日历对象的年月日
* 			年就是A输入的数据
* 			月是2
* 			日是1
* 		C:把时间往前推一天,就是2月的最后一天
* 		D:获取这一天输出即可
*/
public class CalendarTest {
public static void main(String[] args) {
// 键盘录入任意的年份
Scanner sc = new Scanner(System.in);
System.out.println("请输入年份:");
int year = sc.nextInt();

// 设置日历对象的年月日
Calendar c = Calendar.getInstance();
c.set(year, 2, 1); // 其实是这一年的3月1日
// 把时间往前推一天,就是2月的最后一天
c.add(Calendar.DATE, -1);

// 获取这一天输出即可
System.out.println(c.get(Calendar.DATE));
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息