多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] # 基本类型包装类 基本数据类型对象包装类:java将基本数据类型值封装成了对象。封装成对象有什么好处?可以提供更多的操作基本数值的功能。 ## 概述 ![](https://box.kancloud.cn/80be73fd8c5b97af750a2377f31c0b95_1434x410.jpg) 其中需要注意int对应的是Integer,char对应的Character,其他6个都是基本类型首字母大写即可。 基本数据类型对象包装类特点:用于在基本数据和字符串之间进行转换。 ## 将字符串转成基本类型 ![](https://box.kancloud.cn/577137d5c83a00f33905178993bf642b_1748x856.jpg) parseXXX(String s);其中XXX表示基本类型,参数为可以转成基本类型的字符串,如果字符串无法转成基本类型,将会发生数字转换的问题 NumberFormatException ~~~ System.out.println(Integer.parseInt("123") + 2); //打印结果为 125 ~~~ ## 基本类型转成字符串 * 将基本数值转成字符串有3种方式: - 基本类型直接与””相连接即可;34+"" - 调用String的valueOf方法;String.valueOf(34) ; ![](https://box.kancloud.cn/9e0ff81035eb2132968b1154974440d3_1290x928.jpg) - 调用包装类中的toString方法;Integer.toString(34) ![](https://box.kancloud.cn/7245abcba6674d2aed74faa0d8316aba_1448x1182.jpg) ## 基本类型和对象转换 使用int类型与Integer对象转换进行演示,其他基本类型转换方式相同。 * 基本数值---->包装对象 ![](https://box.kancloud.cn/02c75e34a7bef5a239cf620fd7726484_1744x268.jpg) ![](https://box.kancloud.cn/6f0c49eb1b075cba7d7b0b4937955c7d_1488x270.jpg) * 包装对象---->基本数值 ![](https://box.kancloud.cn/b9bc9d108323d3b98ffba4d1cfaf661d_1272x142.jpg) ## 自动装箱拆箱 在需要的情况下,基本类型与包装类型可以通用。有些时候我们必须使用引用数据类型时,可以传入基本数据类型。 比如: 基本类型可以使用运算符直接进行计算,但是引用类型不可以。而基本类型包装类作为引用类型的一种却可以计算,原因在于,Java”偷偷地”自动地进行了对象向基本数据类型的转换。 相对应的,引用数据类型变量的值必须是new出来的内存空间地址值,而我们可以将一个基本类型的值赋值给一个基本类型包装类的引用。原因同样在于Java又”偷偷地”自动地进行了基本数据类型向对象的转换。 * 自动拆箱:对象转成基本数值 * 自动装箱:基本数值转成对象 ~~~ Integer i = 4;//自动装箱。相当于Integer i = Integer.valueOf(4); i = i + 5;//等号右边:将i对象转成基本数值(自动拆箱) i.intValue() + 5; 加法运算完成后,再次装箱,把基本数值转成对象。 ~~~ * 自动装箱(byte常量池)细节的演示 **当数值在byte范围之内时,进行自动装箱,不会新创建对象空间而是使用医来已有的空间。** ~~~ Integer a = new Integer(3); Integer b = new Integer(3); System.out.println(a==b);//false System.out.println(a.equals(b));//true System.out.println("---------------------"); Integer x = 127; Integer y = 127; //在jdk1.5自动装箱时,如果数值在byte范围之内,不会新创建对象空间而是使用原来已有的空间。 System.out.println(x==y); //true System.out.println(x.equals(y)); //true ~~~ # system类 ## 概念 在API中System类介绍的比较简单,我们给出定义,System中代表程序所在系统,提供了对应的一些系统属性信息,和系统操作。 System类不能手动创建对象,因为构造方法被private修饰,阻止外界创建对象。System类中的都是static方法,类名访问即可。在JDK中,有许多这样的类。 ## 常用方法 ![](https://box.kancloud.cn/e106b09286dd43a08c3e4b340fab0f48_1114x476.jpg) * currentTimeMillis() 获取当前系统时间与1970年01月01日00:00点之间的毫秒差值 * exit(int status) 用来结束正在运行的Java程序。参数传入一个数字即可。通常传入0记为正常状态,其他为异常状态 * gc() 用来运行JVM中的垃圾回收器,完成内存中垃圾的清除。从程序的运行结果可以发现,执行System.gc()前,系统会自动调用finalize()方法清除对象占有的资源,通过super.finalize()方式可以实现从下到上的finalize()方法的调用,即先释放自己的资源,再去释放父类的资源。 但是,不要在程序中频繁的调用垃圾回收,因为每一次执行垃圾回收,jvm都会强制启动垃圾回收器运行,这会耗费更多的系统资源,会与正常的Java程序运行争抢资源,只有在执行大量的对象的释放,才调用垃圾回收最好 * getProperty(String key) 用来获取指定键(字符串名称)中所记录的系统属性信息 System.out.println(System.getProperties()); ![](https://box.kancloud.cn/7f70f559bde15b7ab70d8fe4b1b44cb2_1170x1492.jpg) * arraycopy方法,用来实现将源数组部分元素复制到目标数组的指定位置 ![](https://box.kancloud.cn/40f3648a2847bd2e440104725611ba41_1548x268.jpg) 例子: 将src数组中前3个元素,复制到dest数组的前3个位置上 复制元素前:src数组元素[1,2,3,4,5],dest数组元素[6,7,8,9,10] 复制元素后:src数组元素[1,2,3,4,5],dest数组元素[1,2,3,9,10] ~~~ public static void main(String[] args) { int[] src = new int[]{1,2,3,4,5}; int[] dest = new int[]{6,7,8,9,10}; System.arraycopy( src, 0, dest, 0, 3); 代码运行后:两个数组中的元素发生了变化 src数组元素[1,2,3,4,5] dest数组元素[1,2,3,9,10] } ~~~ # Math ## 概念 Math 类是包含用于执行基本数学运算的方法的数学工具类,如初等指数、对数、平方根和三角函数。 类似这样的工具类(代表能够完成一系列功能的类,在使用它们时,不用创建对象,该类中方法为静态方法),其所有方法均为静态方法,并且一般不会创建对象。如System类 ## 常用方法 ![](https://box.kancloud.cn/dc31c93bf05d0f550a63c0d9798d508a_2222x1056.jpg) # Arrays类 ## 概念 此类包含用来操作数组(比如排序和搜索)的各种方法。需要注意,如果指定数组引用为 null,则访问此类中的方法都会抛出空指针异常NullPointerException。 ## 常用方法 ![](https://box.kancloud.cn/3b0e22a7b57b93a1fa0b5e4ee07cc2ad_1946x442.jpg) 二分查找要求为排序的数组 # 大数据运算 ## BigInteger java中long型为最大整数类型,对于超过long型的数据如何去表示呢.在Java的世界中,超过long型的整数已经不能被称为整数了,它们被封装成BigInteger对象.在BigInteger类中,实现四则运算都是方法来实现,并不是采用运算符. BigInteger类的构造方法: ![](https://box.kancloud.cn/72c2ca6b09befce0f48e573bcf3a84e0_2198x884.jpg) 构造方法中,采用字符串的形式给出整数 四则运算代码: ~~~ public static void main(String[] args) { //大数据封装为BigInteger对象 BigInteger big1 = new BigInteger("12345678909876543210"); BigInteger big2 = new BigInteger("98765432101234567890"); //add实现加法运算 BigInteger bigAdd = big1.add(big2); //subtract实现减法运算 BigInteger bigSub = big1.subtract(big2); //multiply实现乘法运算 BigInteger bigMul = big1.multiply(big2); //divide实现除法运算 BigInteger bigDiv = big2.divide(big1); } ~~~ ## BigDecimal double和float类型在运算中很容易丢失精度,造成数据的不准确性,Java提供我们BigDecimal类可以实现浮点数据的高精度运算 构造方法如下: ![](https://box.kancloud.cn/261d36415155d44e3e2a6965bd7ad6e0_2275x1641.jpg) 建议浮点数据以字符串形式给出,因为参数结果是可以预知的 ~~~ public static void main(String[] args) { //大数据封装为BigDecimal对象 BigDecimal big1 = new BigDecimal("0.09"); BigDecimal big2 = new BigDecimal("0.01"); //add实现加法运算 BigDecimal bigAdd = big1.add(big2); BigDecimal big3 = new BigDecimal("1.0"); BigDecimal big4 = new BigDecimal("0.32"); //subtract实现减法运算 BigDecimal bigSub = big3.subtract(big4); BigDecimal big5 = new BigDecimal("1.105"); BigDecimal big6 = new BigDecimal("100"); //multiply实现乘法运算 BigDecimal bigMul = big5.multiply(big6); ~~~ 对于浮点数据的除法运算,和整数不同,可能出现无限不循环小数,因此需要对所需要的位数进行保留和选择舍入模式 ![](https://box.kancloud.cn/247695f59d0ad1bbee4acb87ca163987_2154x186.jpg) ![](https://box.kancloud.cn/76c7d2da878e7ffb9d42da7183ee7127_2384x1270.jpg)