Java中api之常用工具类Arrays,Calendar,System,Date,Math

对象数组:存储对象的数组

Student[] s=new Student[5];
Arrays:针对数组操作的工具类(提供了一些数组排序和二分搜索法等方便使用)
public static String toString(int[] arr)可以将int类型的数组转化为字符串类型
public static void sort(int[] arr)  将int类型的数组进行升序排序
public static int binarySearch(int[] arr,int key) 使用二分法查找元素
举例:
import java.util.Arrays;

public class ArraysDemo {
public static void main(String[] args) {
	int[] arr= {55,66,99,77,75,12};
//	toString方法
	String s=Arrays.toString(arr);
     System.out.println(s);
//    sort方法
    Arrays.sort(arr);
    String s2=Arrays.toString(arr);
    System.out.println(s2);
//二分查找法
    int index=Arrays.binarySearch(arr, 55);
   System.out.println(index);
}

}

Arrays类的两个源码分析:
 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(", ");
        }
    }
注释:以后在实际开发中,只要有引用类型,在对引用类型进行操作时,对引用类型的对象进行非空判断空指针,防止出现空指针异常。
 private static int binarySearch0(int[] a, int fromIndex, int toIndex,
                                     int key) {
        int low = fromIndex;        //最小索引
        int high = toIndex - 1;       //最大索引

        while (low <= high) {        // 如果最小索引小于最大索引
            int mid = (low + high) >>> 1;   //       计算出中间索引,如果中间索引没有值,向右移移位,>>>向右移位符;
            int midVal = a[mid];         //提取中间索引对应的值,

            if (midVal < key)          //如果中间值小于要查找的值
                low = mid + 1;           //中间索引加1,然后在此基础上成为最小索引
            else if (midVal > key)      //否则如果中间值大于要查找的值,
                high = mid - 1;       //反之,同理
            else               
                return mid; // key found         //否则返回最小索引就是要查找值的索引
        }
        return -(low + 1);  // key not found.      //否则返回-数组长度-1
    }
注释:如果在面试的时候,没有特别要求用二分法,可以直接调用此方法。

Calendar类:
 public static Calendar getInstance()使用默认时区和语言环境获得一个日历。返回的 Calendar 基于当前时间,使用了默认时区和默认语言环境。
 public int get(int field)返回日历字段的值
 public static final int YEAR(日历字段)指示年的 get 和 set 的字段数字。这是一个特定于日历的值;请参阅子类文档。
举例:
 * @author 田伟
 *
 */
public class Demo {
public static void main(String[] args) {
	Calendar now=Calendar.getInstance();
//	System.out.println(now);//返回全路径名
	int year=now.get(Calendar.YEAR);
	int month=now.get(Calendar.MONTH);
	int day=now.get(Calendar.DATE);
	System.out.println(year+"年"+(month+1)+"月"+day+"日");	
}
}
注释:月份默认是从0开始,所以在输出时要给月份+1。
两个重要的方法(add重点)
public abstract void add(int field,int amount)根据日历的规则,为给定的日历字段添加或减去指定的时间量。 
public final void set(int year,int month, int date)设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值。
 举例:
 * @author 田伟
 *
 */
public class Demo2 {
public static void main(String[] args) {
	Calendar now=Calendar.getInstance();
	int year=now.get(Calendar.YEAR);
	int month=now.get(Calendar.MONTH);
	int day=now.get(Calendar.DATE);
    System.out.println(year+"年"+(month+1)+"月"+day+"日");
//    now.add(Calendar.YEAR, -3);
//    year=now.get(Calendar.YEAR);
//    System.out.println(year+"年"+(month+1)+"月"+day+"日");
//    两年后的一天前
//    now.add(Calendar.YEAR, 2);
//    now.add(Calendar.DATE, -1);
//    year=now.get(Calendar.YEAR);
//    day=now.get(Calendar.DATE);
//    System.out.println(year+"年"+(month+1)+"月"+day+"日");
    System.out.println("-----------------");
    now.set(2020, 5, 6);
    year=now.get(Calendar.YEAR);
    month=now.get(Calendar.MONTH);
    day=now.get(Calendar.DATE);
    System.out.println(year+"年"+month+"月"+day+"日");
}
}

注释:1.不论是修改日期还是建立日期,都必须重新获取日期。

          2.在建立日期时月份是几就会输出几,但是自己必须知道真实值是month-1;

System类:类中包含一些字段和方法,他不能被实例化。

常用的方法
 public static void gc()运行垃圾回收器。运行垃圾回收器其实执行的是finalize方法:开始回收不用的对象
注释:必须重写finalize方法 开始回收不用的对象,必须执行其里面的内容。
 public static void exit(int status)终止当前正在运行的 Java 虚拟机。 终止虚拟机的时候,参数一般为0。
 public static long currentTimeMillis()返回以毫秒为单位的当前时间。
 public static void arraycopy(Object src, int srcPos,Object dest,int destPos,
                             int length)从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。
  src:原始数组
  dest:目标数组
  srcpos:原始数组的开始位置
  destpos:目标数组的结束为止
  length:复制元素的长度
举例:
 * @author 田伟
 *
 */
public class Demo2 {
public static void main(String[] args) {
		System.out.println("sssss");
//		System.exit(0);
		System.out.println("aaaaaa");
		long time=System.currentTimeMillis();//这个方法单独使用没有意义
		System.out.println(time);
		for(int i=0;i<100;i++) {
			System.out.println("爱你");
		}
		long end=System.currentTimeMillis();
		System.out.println("共消耗"+(end-time)+"毫秒");
	}	
}
 * @author 田伟
 *
 */
public class Demo3 {
public static void main(String[] args) {
	int[] arr= {1,2,3,4,5,6,7,8};
	int[] arr1= {55,66,33,22,11};
	Arrays.toString(arr);
	Arrays.toString(arr1);
	System.out.println("--------------");
	System.arraycopy(arr, 2, arr1, 2, 3);
	System.out.println(Arrays.toString(arr));
	System.out.println(Arrays.toString(arr1));
	}
}
Date类:表示特定的瞬间,精确到毫秒。
两个常用构造方法:
public Date()分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒)。
public Date(long date)分配 Date 对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即 1970 年 1 月 1 日 00:00:00 GMT)以来的指定毫秒数。
 * @author 田伟
 *
 */
public class Demo {
public static void main(String[] args) {
	Date d=new Date();
	System.out.println(d);//返回当前的毫秒值。
	Date dd=new Date(1000);
	System.out.println(dd);//指定一个毫秒值,初始化值
}
}
public long getTime()返回自 1970 年 1 月 1 日 00:00:00 GMT  以来此 Date 对象表示的毫秒数。 
 */
public class Demo2 {
	public static void main(String[] args) {	
Date d=new Date();
long time =d.getTime();
System.out.println(time);
System.out.println(System.currentTimeMillis());
}
}
这里的重点是:将Date的日期格式和文本格式的转换
  将Date--->String(格式化日期)
  
  将String--->Date(解析)   
  
   中间的转化,我们使用的是中间类 DateFormat,它是一个抽象类,不能实例化
   所以考虑它的子类  SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类。它允
   许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。
   SimpleDateFormat(String pattern) 用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。
   日期和时间模式
   public final String format(Date date) 将一个 Date 格式化为日期/时间字符串。
   public Date parse(String source)  throws ParseException从给定字符串的开始解析文本,以生成一个日期。该方法不使用给定字符串的整个文本。     
   年       yyyy
   月       MM
   日       dd
   时       hh
   分       mm
   秒       ss
   
public class Demo3 {
	public static void main(String[] args) throws ParseException {
//		Date--->String ;
		Date d=new Date();
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
		String s=sdf.format(d);
		System.out.println(s);
//		String --->Date
		String s1="2018-5-6";
		SimpleDateFormat sd=new SimpleDateFormat("yyyy-MM-dd");
		Date d1=sd.parse(s1);
		System.out.println(d1);
	}
}
注释:在解析文本模式时,日期的格式必须一致,否则会出现编译时异常

Math:类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。 
常用方法:
   public static int abs(int a)返回 int 值的绝对值。如果参数为非负数,则返回该参数。
   public static double ceil(double a)返回最小的(最接近负无穷大)double 值,该值大于等于参数,并等于某个整数。
   public static double floor(double a)返回最大的(最接近正无穷大)double 值,该值小于等于参数,并等于某个整数。
   public static int max(int a,int b)返回两个 int 值中较大的一个。也就是说,结果为更接近 Integer.MAX_VALUE 值的参数。
   public static int min(int a,int b)返回两个 int 值中较小的一个。也就是说,结果为更接近 Integer.MIN_VALUE 值的参数。
   public static double pow(double a,double b)返回第一个参数的第二个参数次幂的值。
   public static double random()返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。
   public static long round(double a)返回最接近参数的 long。结果将舍入为整数
   public static double sqrt(double a)返回正确舍入的 double 值的正平方根。

举例:

 */
public class Demo {
public static void main(String[] args) {
	System.out.println(Math.abs(-10));
	System.out.println(Math.ceil(5.36));
	System.out.println(Math.floor(5.36));
	System.out.println(Math.max(5, 6));
	System.out.println(Math.pow(2, 3));
	System.out.println(Math.random());
//	方法中嵌套方法
	System.out.println(Math.max(Math.round(5.1), 8));
	System.out.println(Math.sqrt(9));
}
}
注释:round()和random()方法很重要,在实际开发中会经常用

Random同时也可以是一个类:

常用的方法:public int nextInt(int n),在[0,n)范围内返回一个int类型的数


猜你喜欢

转载自blog.csdn.net/wt5264/article/details/80160389