包装类
包装类:
包装类是针对基本数据类型(四项八类),之前我们在使用泛型数组列表的时候,需要指定数组对象的类型,但是int、float等基本类型无法使用,需要针对基本类型出现对应的包装类。
Arraylist<Long>
对应的包装类如下:
需要注意的是整型int 对应Intege和字符类型Character。其余都是基本类型首字母大写。
一:包装类除了之前我们说的泛型数组,还有一个就是字符串和基本数据类型之间的转换。
1 package test04; 2 3 public class Bas_T { 4 public static void main(String...args){ 5 String str=String.valueOf(123); 6 String str1=String.valueOf(1.222); 7 System.out.print(Integer.parseInt(str)); 8 System.out.print(Double.parseDouble(str)); 9 } 10 }
在转换的过程中,各个包装类中都有方法(静态方法):parseXXX() 进行转换。
其中valueOf为字符串的静态方法,将对应的数据类型转换成字符串。
将基本数据类型转换成字符串有三种方法:
1:使用字符串的静态方法valueof
2:使用+""
3:使用包装类中的静态方法或者对象方法,toString()来进行转换。
1 package test04; 2 3 public class Bas_T { 4 public static void main(String...args){ 5 String str=String.valueOf(123); 6 String str1=""+123; 7 String str2=Integer.toString(123); 8 String str3=new Integer(123).toString(); 9 System.out.print(str2+'\n'+str3); 10 11 } 12 }
结果:
二:包装类和基本数据类型之间转换。
比如int数据类型:
1 package test04; 2 3 public class Bas_T { 4 public static void main(String...args){ 5 Integer in=Integer.valueOf(1233); 6 int in_2=in.intValue(); 7 System.out.print(in.toString()); 8 System.out.print(in_2); 9 10 } 11 }
三:自动装箱和拆箱
在java中基本数据类型,我们可以用对象的变量引用进行运算,但是非基本数据类型即引用类型无法这么操作。这是因为java中帮我们实现自动的装箱和拆箱;
以Int类型为例比如:
1 package test04; 2 3 public class Bas_T { 4 public static void main(String...args){ 5 Integer i=2; 6 System.out.print(i+2); 7 8 } 9 }
我们在创建对象的时候,创建:Integer对象的时候,Integer I=2 是自动装箱的过程,实际上java帮我们操作了,new Integer(2)或者 Integer.valueOf(2)
在我们进行运算的时候,i+2 的时候叫做自动拆箱。java帮我们操作了,i.intValue().
注意:
在bytes范围内,同一个对象不会重复创建,和python一样,部分整数也做了这个机制,所以在使用==和equals()的时候 都是返回true。
四:
System类,因为其构造器是被private所修饰,所以无法创建方法,他的方法都是static。
1 package test05; 2 3 public class Sys_Tes { 4 public static void main(String ...args){ 5 System.out.print(System.currentTimeMillis());//GMT时间。 6 System.exit(0);//表示退出jvm虚拟机。0表示正常退出。 7 System.out.print(System.getProperties()); 8 } 9 }
输出:
l 练习一:验证for循环打印数字1-9999所需要使用的时间(毫秒)
注意:使用System.currentTimeMillis()获取的时间类型为long类型
1 package test05; 2 3 public class Sys_Tes { 4 public static void main(String ...args){ 5 long start=System.currentTimeMillis(); 6 for (int i=0;i<119999;i++){ 7 Integer a=i; 8 } 9 long end=System.currentTimeMillis(); 10 long cost_time=end-start; 11 System.out.printf("cost time millons %d",cost_time); 12 } 13 }
练习二:将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]
package test05; import java.lang.reflect.Array; public class Sys_Tes { public static void main(String ...args){ int[] src={1,2,3,4,5}; int[] dest={6,7,8,9,};//static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) System.arraycopy(src,0,dest,0,3); for(int i:dest){ System.out.print(i); } } }
![](https://images2017.cnblogs.com/blog/959846/201711/959846-20171108165016091-1807455089.png)
static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
源数组 从源数组索引位置 目标数组 从目标数据那个位置覆盖 拷贝源数组的长度。
System.arraycopy()使用如上。
l 练习三:循环生成100-999之间的的三位数并进行打印该数,当该数能被10整除时,结束运行的程序
1 package test05; 2 3 import org.omg.Messaging.SYNC_WITH_TRANSPORT; 4 5 import java.lang.reflect.Array; 6 7 public class Sys_Tes { 8 public static void main(String ...args){ 9 for(int i=101;i<999;i++){ 10 if(String.valueOf(i).endsWith("0")){ 11 System.exit(0); 12 }else { 13 System.out.print(i+"\n"); 14 } 15 } 16 }
1 package test05; 2 3 import org.omg.Messaging.SYNC_WITH_TRANSPORT; 4 5 import java.lang.reflect.Array; 6 import java.util.Random; 7 8 public class Sys_Tes { 9 public static void main(String ...args){ 10 Random ran=new Random(); 11 while (true){ 12 int in=ran.nextInt(899)+100; 13 if(in%10==0){ 14 System.exit(0); 15 }else { 16 System.out.printf(in+"\n"); 17 } 18 } 19 } 20 }
使用Random来实现随机数。
四:Math类。
Math类属于工具类,和System类一样,他的方法也大多数是静态方法。包含常用的运算方法。public final class Math extends Object
1 package test06; 2 3 public class Math_Demo { 4 public static void main(String ...args){ 5 System.out.print(Math.abs(-3));//取绝对值。 6 System.out.print(Math.ceil(-3.8111));// 不进行四舍五入。取值大于等于参数-3.0 7 System.out.print(Math.ceil(3.8111));// 不进行四舍五入。取值大于等于参数4.0 8 System.out.print(Math.floor(-3.8111));// 不进行四舍五入。取值小于等于参数-4.0 9 System.out.print(Math.floor(3.8111));// 不进行四舍五入。取值小于等于参数3.0 10 System.out.print(Math.max(3.8111,4.1));// 取最大值, 11 System.out.print(Math.min(3.8111,4.1));// 取最小值, 12 System.out.print(Math.pow(2,4));// 取2的4次方法, 13 System.out.print(Math.random());// 取0到1之间doule值, 14 System.out.print(Math.round(3.22));// 四舍五入; 15 16 } 17 }
五:Arrays方法:sort排序、toString()表示获取数组的字符串表形式。
1 package Arr_Demo; 2 3 import java.lang.reflect.Array; 4 import java.util.Arrays; 5 6 public class Arr_Test { 7 public static void main(String ...args){ 8 int[] in={1,3,2,5,6,4}; 9 int[] in1={1,2,3,4,5,6}; 10 int a=Arrays.binarySearch(in1,6);//只能是有序的数组才可以,未查到为-1 11 System.out.print(a); 12 Arrays.sort(in);//从小到大排练. 13 System.out.print(Arrays.toString(in));//数组转换成对应的字符串表现形式. 14 } 15 }
l 练习一:定义一个方法,接收一个数组,数组中存储10个学生考试分数,该方法要求返回考试分数最低的后三名考试分数。
1 package Arr_Demo; 2 3 import java.lang.reflect.Array; 4 import java.util.Arrays; 5 6 public class Arr_Test { 7 public static void main(String ...args){ 8 int[] in={51,63,72,25,46,24}; 9 int count=0; 10 Arrays.sort(in);//从小到大排练. 11 for (int i:in){ 12 count+=1; 13 if(count<4){ 14 System.out.print(i+"\n"); 15 } 16 17 } 18 } 19 }
其他方法:
1 package Arr_Demo; 2 3 import java.lang.reflect.Array; 4 import java.util.Arrays; 5 6 public class Arr_Test { 7 public static void main(String ...args){ 8 int[] in={51,63,72,25,46,24}; 9 Arrays.sort(in);//从小到大排练. 10 int[] res=new int[3];//int[] res={1,2,3}; 11 System.arraycopy(in,0,res,0,3); 12 System.out.print(Arrays.toString(res)); 13 } 14 }
注意:
在使用System.arraycopy的时候,目的数组不能为空 ,为空的话,没有索引,无法指定索引。可以填充数组元素或者在定义数组的时候,初始化定义长度int[] in=new int[3]。