包装类
1.概念
为了提高操作基本数据类型的数据便捷性,给基本数据类型提供对应的类,类里定义丰富的信息以及功能,只要创建出类对象就能更加方便和快捷的去操作基本类型数据。
注意:
1.除了Character以及Integer之外其他包装类都是首字母大写
2.由基本类型数据来构建包装类对象—封箱
3.基本数据类型直接赋值给包装类的对象—自动封箱
包装类.valueOf(基本数据类型)
包装类对象直接赋值给基本数据类型—自动拆箱
包装类对象.xxxValue()
代码演示:
//定义变量
int i=1;
//创建Integer类的对象
//由基本类型数据来构建包装类的对象--封箱
//Integer in=new Integer(i);
//把基本类型数据直接赋值给包装类的对象---自动封箱
//底层实现Integer in=Integer.valueOf(i);
//自动封箱底层实现---包装类.valueOf(基本类型数据)
//自动封箱是jdk1.5的新特性
Integer in=i;
//自动封箱
//底层实现--Character c=Character.valueOf('a');
Character c='a';
System.out.println(in);
Integer in=new Integer(1);
//包装类对象直接赋值给基本数据类型---自动拆箱
//底层实现---int i=in.intvalue();
//自动拆箱底层实现---包装类对象...xxxValue();
//自动拆箱是jdk1.5新特性
int i=in;
Double d=new Double(2.3);
//底层实现---double d1=d.doubleValue();
double d1=d;
System.out.println(i);
4.自动封箱/拆箱是jdk1.5新特性
5.当整型包装类做自动封箱时,在-128 ~ 127之间共享同一个数组,但是如果超过这个范围,每次返回一个新对象(character共享范围是(0~127))
6.包装类的哈希码值是固定值
package cn.tedu.baozhuang;
//输出每个字符出现的次数
public class Test {
public static void main(String[] args) {
//包装类的对象的哈希码值是固定值
System.out.println(new Integer(1).hashCode());
System.out.println(new Byte((byte)1).hashCode());
System.out.println(new Short((short)1).hashCode());
System.out.println(new Character('a').hashCode());
System.out.println(new Long(1L).hashCode());
System.out.println(new Float(1.1f).hashCode());
System.out.println(new Double(1.1).hashCode());
System.out.println(new Boolean(true).hashCode());
}
}
数学类(Math):
提供简单的数学运算(所有的属性和方法都是静态的)
代码演示:
package cn.tedu.math;
public class MathDemo {
public static void main(String[] args) {
//绝对值
System.out.println(Math.abs(-2.14));//2.14
//向上取整
System.out.println(Math.ceil(1.000001));//2.0
//向下取整
System.out.println(Math.floor(0.9999));//0.0
//四舍五入(结果是整数)
System.out.println(Math.round(3.445));//3
//第一个参数是底数,第二个参数是次幂
System.out.println(Math.pow(2.0,3.0));//8.0
//随机数(从0.0-1.0之间,不包含1.0)
//底层根据伪随机算法
System.out.println(Math.random());
//获取从20到40(包含)之间的随机整数
System.out.println(20+(int)(Math.random()*21));
//简易验证码
//验证码可以出现的内容
char[] cs={'4','A','只','8','b','2','花','花'};
//字符串来存储验证码内容
String str="";
//循环实现随机获取验证码的内容
for (int i=1;i<=4;i++){//验证码有四位
str += cs[(int) (Math.random()*8)];//下标范围(0-7)随机
}
System.out.println(str);
}
}
BigDecimal类—支持小数精确运算 (需要参数是字符串形式)
package cn.tedu.math;
import java.math.BigDecimal;
public class BigDecimalDemo {
//在运算过程中可以提高到80位来运算,但是最终还是以64位来存储
public static void main(String[] args) {
//绝大部分小数的二进制补码是无线位数不能精确运算
double d=2.1-1.9;
System.out.println(d);//0.20000000000000018
//只有参数是字符串形式才能进行精确运算
BigDecimal bd1=new BigDecimal("2.1");
BigDecimal db2=new BigDecimal("1.9");
//调用方法操作对象的值
System.out.println(bd1.subtract(db2));//0.2
}
}
BigInteger—支持超大数之间运算
package cn.tedu.math;
import java.math.BigInteger;
public class BigIntegerDemo {
public static void main(String[] args) {
//超大数之间的运算
BigInteger bi1=new BigInteger("124265476554631231435325176438935436226491");
BigInteger bi2=new BigInteger("176438926654365324521341543265491");
//通过调用对象操作对象值
System.out.println(bi1.multiply(bi2));
}
}
时间类
Date类:代表时间和日期
SimpleDateFormat类提供日期和字符串的相互转换
parse():把字符串转成日期
format():把日期转成字符串
代码演示:
package cn.tedu.math;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateDemo {
public static void main(String[] args) throws ParseException {
//创建代表时间和日期的类的对象
//Date date=new Date();
//有参构造---在指定的基础上加上1900年1月
//黑线---代表过时,代表在某个新版本中就会被淘汰
/* Date date=new Date(2008-1900,8-1,4);
//CST(中国标准时区)
System.out.println(date);*///Mon Aug 04 00:00:00 CST 2008
//字符串转成日期
String str="2012-12-12 12:12:12";
//创建对象
SimpleDateFormat sdf1=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//调用方法把字符串转成日期
Date date=sdf1.parse(str);
//日期转成字符串
//创建对象
SimpleDateFormat sdf2=new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
//调用方法把日期转成字符串
String s=sdf2.format(date);
System.out.println(s);//2012年12月12日 12时12分12秒
}
}
Calendar—日历类
package cn.tedu.math;
import java.util.Calendar;
import java.util.Date;
public class CalendarDemo {
public static void main(String[] args) {
//获取Calendar类的子类对象
Calendar c=Calendar.getInstance();
//设置时间
//c.setTime(new Date(2012-1900,12-1,12));
//获取日历信息
System.out.println(c.get(Calendar.DAY_OF_MONTH));//19 这一月的第19天
System.out.println(c.get(Calendar.AM_PM));//1
}
}