Integer的使用
java中为8种基本数据类型对应准备了8种包装类型。8种包装类型属于引用类型,父类是Object。
以学习Integer类学习为例
public class _6_Integer {
public static void main(String[] args) {
// 自动装箱 = Integer.valueOf(123);
// 整型常量池的范围 : -128~127之间
Integer i1 = 123;
Integer i2 = 123;
System.out.println(i1 == i2);//true
i1 = new Integer(123);
i2 = new Integer(123);
System.out.println(i1 == i2);//false
//等于 new Integer(128);
i1 = 128;
i2 = 128;
System.out.println(i1 == i2);//false
String s1 = "asd";
String s2 = "asd";
System.out.println(s1 == s2);//true
s1 = new String("asd");
s2 = new String("asd");
System.out.println(s1 == s2);//false
}
}
// 深入理解自动装箱和自动拆箱
//
// 1 都是编译时进行的操作
// 2 自动装箱 的时候,会把赋值 操作 改变为 Integer.valueOf(值)
//
// Integer.valueOf() 底层实现 :
//
// public static Integer valueOf(int i) {
// if (i >= IntegerCache.low && i <= IntegerCache.high)
// return IntegerCache.cache[i + (-IntegerCache.low)];
// return new Integer(i);
// }
//
//
// IntegerCache 是Integer中的静态内部类,也就是我们说的整型常量池
//
// static final int low = -128;
// static final int high = 127;
// static final Integer cache[];
// 在static语句块中,对cache数组 进行初始化操作
// cache = new Integer[(high - low) + 1]; 长度为256
// 初始化数组中的数据
// cache[k] = new Integer(j++);
// 数组中数据为 -128,-127,-126.....127 共 256个数字,下标为0~255
//
// 此时 整型常量池就初始化完成了,在堆内存中创建了256个对象,
//
// valueOf方法中这么写的
// // 判断 要赋值的数据值 是否在-128到127之间
// if (i >= IntegerCache.low && i <= IntegerCache.high)
// // 如果在这个范围内的话,之间在case数组中把对应的对象的地址拿出来,返回回去
// return IntegerCache.cache[i + (-IntegerCache.low)];
// // 如果不再这个范围内的话,就new一个新的对象,保存这个数据
// return new Integer(i);
//
// 所以 我们写 Integer i1 = 123; Integer i2 = 123; 使用 == 是相等的,因为他们指向堆内存的地址都是同一个
//
// 反之 我们写 Integer i3 = 128; 就等于 Integer i3 = new Integer(128) , 如果使用== 肯定是不等的
// 需要使用equals才可以
将十进制转换成二进制字符串(静态的):static String toBinaryString(int i)
将十进制转换成十六进制进制字符串(静态的):static String toHexString(int i)
将十进制转换成八进制进制字符串(静态的):static String toOctalString(int i)
Data的使用
获取系统当前时间
import java.util.Date;
public class DateText {
public static void main(String[] args) {
//获取系统当前时间(精确到毫秒的系统当前时间)
//直接调用无参数构造方法就行
Date nowTime = new Date();
//java.util.Date类的toString()方法已经被重写了。
//输出的不是一个对象的内存地址,是一个日期字符串
System.out.println(nowTime);
}
}
日期格式化
将日期类型Date,按照指定的格式进行转换:Date–转换成具有一定格式的日期字符串–>String
SimpleDateFormat是java.text包下的,专门负责日期格式化的
import java.beans.SimpleBeanInfo;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateText {
public static void main(String[] args) {
Date nowTime = new Date();
System.out.println(nowTime);
/*
yyyy 年(年是四位)
MM 月(月是2位)
dd 日
HH 时
mm 分
ss 秒
SSS 毫秒(毫秒3位,最高999)
*/
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
String nowTimes = sdf.format(nowTime);
System.out.println(nowTimes);
}
}
日期字符串String转换成Date类型
String time = "2008-08-08 08:08:08 888";
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
//格式不能乱写,要和日期字符串格式相同
Date dateTime = sdf2.parse(time);//parse需要抛出异常
System.out.println(dateTime);
获取1970年1月1日到现在的总毫秒数
long nowTimeMillis = System.currentTimeMills();
System.out.println(nowTimeMillis);
统计方法执行时长
long begin = System.currentTimeMills();
print();//执行的方法
long end = System.currentTimeMills();
System.out.println((end - begin)+"毫秒");
通过毫秒构造Date对象
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateText1 {
public static void main(String[] args) {
//这个时间是什么时间?
//1070-01-01 00:00:00 001
Date time = new Date(1);//注意这是一个毫秒
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
String strTime = sdf.format(time);
//北京是东八区,差八个小时
System.out.println(strTime);
}
}
System.out【out是System类的静态变量】
System.out.println()【println()方法不是System类的,是PrintStream类的方法】
System.gc()建议启动垃圾回收器
System.currentTimemillis()获取自1970年1月1日到系统当前时间的总毫秒数。
System.exit(0) 退出JVM
Math的使用
java.text.DecimalFormat
专门负责数字格式化的
语法格式: DecimalFormat df = new DecimalFormat("数字格式")
public static void main(String[] args) {
System.out.println(Math.abs(-12.4));//12.4 绝对值
System.out.println(Math.ceil(2.432));//3.0 向上取整
System.out.println(Math.floor(4.999));//4.0 向下取整
System.out.println(Math.max(42.4,9.7));//42.4 谁大
System.out.println(Math.min(3.14,7.28));//3.14 谁小
System.out.println(Math.sqrt(64));//8.0 开平方
System.out.println(Math.cbrt(27));//3.0 开立方
System.out.println(Math.random());//0.9953898357853841
System.out.println(Math.random()*10 + 10);//11.270487712390562
System.out.println(Math.rint(2.500002));//3.0 四舍五入:四舍六入五去双
System.out.println(Math.pow(2,3));//8.0 2^3 2的3次方
}
BigInteger的使用
BigDecimal 属于大数据,精度很高。不属于基本数据类型,属于java对象(引用数据类型)。
public static void main(String[] args) {
BigInteger bgi = new BigInteger("11");
BigDecimal bgd1 = new BigDecimal(20);
BigDecimal bgd2 = new BigDecimal(10);
BigDecimal bgd3 = bgd1.add(bgd2);//30
bgd3 = bgd1.subtract(bgd2);//10
bgd3 = bgd1.multiply(bgd2);//200
bgd3 = bgd1.divide(bgd2);//2
bgd3 = bgd1.remainder(bgd2);//0
System.out.println(bgd3);
System.out.println(Long.MAX_VALUE);//9223372036854775807
BigDecimal sum = new BigDecimal(1);
for (int i = 1;i<=100;i++){
sum = sum.multiply(new BigDecimal(i));
}
//93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
System.out.println(sum);
}
Random的使用
Random位于java.util
包下,可以产生随机数。
Random 类是随机数产生类,可以指定一个随机数的范围,然后任意产生在此范围中的数字
import java.util.Random;
// nextInt(最大值 - 最小值 +1) + 最小值
//Random()方法生成大于等于0 且小于10的整数
public class _1_Random {
public static void main(String[] args) {
Random rd = new Random();
int result = rd.nextInt(10);
System.out.println(result);//3
result = rd.nextInt(11) + 10;
System.out.println(result);//15
result = rd.nextInt(26);
// 生成a~z
//随机数+97可转换成字母
char c = (char) (result +97);
System.out.println(c);//c
}
}
import java.util.Random;
public class RandomText {
public static void main(String[] args) {
//创建随机数对象
Random random = new Random();
//随机产生一个int类型取值范围内的数字。
int num = random.nextInt();
System.out.println(num);
//产生[0~100]之间的随机数。不能产生101
//nextInt翻译为:下一个int类型的数据是101,表明只能取到100
int num2 = random.nextInt(101);
System.out.println(num2);
}
}
结果如下:
import java.util.Random;
public class Test{
public static void main(String[] args) {
Random r = new Random();//定义Random对象
for (int i=0;i<10;i++){//输出 10 个随机数
System.out.println(r.nextInt(100)+"\t");
}
}
}
练习题 : 编写程序,生成5个不同的随机数。重复的话重新生成
最终生成的五个随机数放到数组当中,要求数组中这5个随机数不重复
import java.util.Arrays;
import java.util.Random;
public class RandomText {
public static void main(String[] args) {
//创建一个Random对象
Random random = new Random();
//准备一个长度为5的一维数组
int[] arr = new int[5];
for (int i = 0; i < arr.length; i++) {
arr[i] = -1;
}
int index = 0;
//while循环,生成随机数
while (index < arr.length) {
//生成随机数
int num = random.nextInt(101);
//判断arr数组中有没有num
//如果没有这个num,就放进去
if (!contains(arr, num)) {
arr[index++] = num;
}
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
/**
* 单独编写一个方法,这个方法可以判断数组中是否包含某个元素
*
* @param arr 数组
* @param key 元素
* @return true表示包含,false表示不包含
*/
public static boolean contains(int[] arr, int key) {
for (int i = 0; i < arr.length; i++) {
if (key == arr[i]) {
return true;
}
}
return false;
}
}
结果如下: