底层实现:调用System.arrayCopyjava
public static int[] copyOf(int[] original, int newLength) { int[] copy = new int[newLength]; System.arraycopy(original, 0, copy, 0, Math.min(original.length, newLength)); return copy; }
//补充说明 //实参为int数组类型copeOf的一段源代码 //其实在Arrays类的源码中,有8种基本数据类型数组所对应的copeOf方法,其核心是调用了System.arraycopy方法 //Arrays类中copyOf的返回值为实参所对应的基本数据类型数组,如上面源码返回的是int[]的数组 //Arrays类中copeOf与System.arraycopy的区别以下 1.Arrays类的copeOf方法本质是调用System.arraycopy方法实现的 2.Arrays类中的copeOf能够实现8种基本数据类型数组的复制,且返回的是一个新数组的地址; 3.System.arrayCopy方法无返回值,底层是用native关键字修饰的方法(原生态方法),即调用非java语言的方法 4.System要求复制时本身建立一个新数组,而后当成实参传进去
//运行实例 int[] nums={1,66,4,3,-2}; int[] nums01=Arrays.copyOf(nums,nums.length+1);//第二个参数为复制后的长度 System.out.println("新数组以下所示"); for (int i = 0; i < nums01.length; i++) { System.out.print(nums01[i]+"\t"); }
本质:是重写了Object的toString方法数组
public static String toString(int[] a) { if (a == null) return "null"; int iMax = a.length - 1; if (iMax == -1) return "[]"; StringBuilder b = new StringBuilder(); b.append('['); for (int i = 0; ; i++) { b.append(a[i]); if (i == iMax) return b.append(']').toString(); b.append(", "); } } //StringBuffer虽然安全可是效率不高,StringBuilder不安全可是效率高,因此综合多方
//运行实例 int[] nums={1,66,4,3,-2}; System.out.println("采用toString方法打印的数组:"+Arrays.toString(nums));
int nums[]={1,8,99,40,77}; Arrays.sort(nums);//原数组会经过快速排序原理完成升序操做 for (int num : nums) { System.out.print(num+"\t"); } //sort方法返回值为void
//源码以下:(有多个重载fill方法,选了一个) public static void fill(long[] a, long val) { for (int i = 0, len = a.length; i < len; i++) a[i] = val; }
int[] nums={1,66,4,3,-2}; Arrays.fill(nums,100); for (int i = 0; i < nums.length; i++) { System.out.print(nums[i]+"\t"); } //fill方法返回值为void
2.1 退出程序(exit)安全
做用:终止当前正在执行的java虚拟机(非0为异常终止)app
本质是调用Runtime类中的exit方法工具
//System.exit源码以下: public static void exit(int status) { Runtime.getRuntime().exit(status); } //Runtime.getRuntime() 返回值为与当前java应用程序相关的Runtime对象 //Runtime对象实例在每一个java应用程序中都会有一个,其做用是使应用程序可以与其运行的环境相链接 //注意:应用程序不能建立本身的Runtime类实例 //Runtime类中的源码以下: public static Runtime getRuntime() { return currentRuntime; } //这个currentRuntime已经实例化过了(47行) exit方法源码 public void exit(int status) { SecurityManager security = System.getSecurityManager(); if (security != null) { security.checkExit(status); } Shutdown.exit(status); }
2.2 获取当前时间(距离1900年1月1号的毫秒值,1s=1000毫秒)ui
System.out.println(System.currentTimeMillis()); //经过两次获取时间,而后相减,能够获得程序某一部分的运行时间
2.3 数组的赋值(手动扩容)code
System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)orm
src表明源数组的地址,dest表明目标数组的地址;对象
srcPos源数组获取替换元素(让另一个元素被替换)的起始部分,destPos目标数组替换的起始位置(被替换元素替换)排序
length为替换的总长度
int[] a={1,8,99,66}; int[] b=new int[4]; //替换元素为1,8,99 //被替换起始位置为b[1] System.arraycopy(a,0,b,1,a.length-1); for (int i = 0; i < b.length; i++) { System.out.print(b[i]+"\t"); } //第一个未赋值,系统会自动赋一个默认值
3.Date类 (与SimpleDateFormat类搭配使用)
默认建立对象,为当前时间
使用方法以下所示:
步骤一 实例化一个Date对象 步骤二 实例化一个SimpleDateFormat对象,把须要的格式给输进去 步骤三 调用format方法(打印出当前时间)----返回的是String类型的日期信息
(用String变量来装着它)
Date date = new Date(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM//dd HH:mm:ss"); String str=simpleDateFormat.format(date); System.out.println(str);
4.Calendar
//locale为语言环境,TImezone为时区
输出日历相关信息的操做流程以下所示:
第一步.声明一个日历对象,指向一个日历,该日历是经过getInstance静态方法获取默认时区和语言环境的日历, 第二步,根据需求,经过get方法获取你想要获取的信息(年、月、日、周)---->给定日历字段的值 注意:这些日历字段都是全局常量(static final)
Calendar calendar=Calendar.getInstance(); System.out.println(calendar.get(Calendar.DAY_OF_MONTH));//这个月的第几天 System.out.println(calendar.get(Calendar.DAY_OF_WEEK));//这周星期几 System.out.println(calendar.get(Calendar.DAY_OF_YEAR));//一年的第几天