Arrays类、System类、Math类、时间日期类

——我是LGM_Hakka,请多多指教。

Arrays类、System类、Math类、时间日期类

Arrays类

1、概述

Arrays类是一个针对数组操作的工具类。具有很多对数组操作的方法.

例如:排序和查找。

Arrays工具类中的方法都是静态的,通过Arrays.方法名即可调用。

若指定数组引用为 null,则此类中的方法都会抛出NullPointerException异常

2、Arrays工具类中常用的方法

(注:参数不一定都是int类型,其他类型也可。在这不再一一阐述)

public static List asList(T... a):把数组转换成List集合

public static String toString(int[] a):把整型数组转变成字符串

public static void sort(int[] a):对数组进行排序

public static int binarySearch(int[] a,int key):对数组进行二分查找

public static boolean equals(int[] a,int[] a2):两个指定的 int 型数组彼此是否相等

public static int[] copyOf(int[] original,int newLength):复制指定的数组,并设定新数组的长度

public static int[] copyOfRange(int[] original,int from, int to):将指定数组的指定范围复制到一个新数组。

3、实例

public class ArraysDemo {
	public static void main(String[] args) {
		// 定义数组
		int[] arr = { 23, 84, 51, 72, 69 };

		// public static String toString(int[] a):把整型数组转变成字符串。
		String str = Arrays.toString(arr);
		System.out.println(str);

		// public static void sort(int[] a):对数组进行排序
		Arrays.sort(arr);
		System.out.println(Arrays.toString(arr));

		// public static int binarySearch(int[] a,int key):对数组进行二分查找。
		int[] arr2 = { 12,56,27, 23, 34, 98, 45};
		//要使用二分查找,前提是数组是有序的
		Arrays.sort(arr2);
		// 查找23的索引
		System.out.println(Arrays.binarySearch(arr2, 23));
		// 查找27的索引
		System.out.println(Arrays.binarySearch(arr2, 27));
	}
}

System类

1、 概述

System是系统类。该类被final关键字修饰,不可被继承。

A.  提供了标准输入、标准输出和错误输出流;

B.  对外部定义的属性和环境变量的访问;

C.  加载文件和库的方法;

D.  提供了静态的变量

E.  还有快速复制数组的一部分的实用方法。

System系统类中的变量(不可以修改)和方法都是静态的。通过System.变量名(方法名)即可调用。

2、 System类中常用的方法

public static final InputStream in:“标准”输入流。此流已打开并准备提供输入数据。

public static final PrintStream out:“标准”输出流。此流已打开并准备接受输出数据。

public static final PrintStream err:“标准”错误输出流。此流已打开并准备接受输出数据。

public static long currentTimeMillis():返回以毫秒为单位的当前时间。

public static void exit(int status):终止当前正在运行的 Java 虚拟机。

public static void gc():运行垃圾回收器。

public static Properties getProperties():确定当前的系统属性。

public static void arraycopy(Object src,int srcPos, Object dest, int destPos, int length):从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。

3、实例

import java.util.Arrays;

public class SystemDemo {
	public static void main(String[] args) {
		// public static void exit(int status)
		// System.exit(100);当此句代码没有注释时,下面的代码将不会执行。因为Java虚拟机已退出

		// public static long currentTimeMillis():返回以毫秒为单位的当前时间。
		long time = System.currentTimeMillis();
		System.out.println(time);

		// 需求,请测试下面代码的运行时间
		// long start = System.currentTimeMillis();
		// for (int x = 0; x < 1000000; x++) {
		// System.out.println(x);
		// }
		// long end = System.currentTimeMillis();
		// System.out.println((end - start) + "毫秒");

		// public static void arraycopy(Object src,int srcPos,Object dest,int
		// destPos,int length)从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。
		int[] arr = { 1, 1, 1, 1, 1, 1 };
		int[] arr2 = { 2, 2, 2, 2, 2, 2 };
		System.arraycopy(arr, 3, arr2, 3, 2);

		System.out.println(Arrays.toString(arr));// [1, 1, 1, 1, 1, 1]
		System.out.println(Arrays.toString(arr2));// [2, 2, 2, 1, 1, 2]

		// 获取当前的系统属性
		System.out.println(System.getProperties());
	}
}

Math类

1、概述

Math类是Java提供的数学运算类。该类被final关键字修饰,不可被继承。

A.  提供两个常量:E、PI

B.  初等指数、对数、平方根和三角函数等运算方法

Math类中的变量(不可以修改)和方法都是静态的。通过Math.变量名(方法名)即可调用。

2、Math类中常用的方法

(注:参数不一定都是int类型,其他类型也可。在这不再一一阐述)

public static int abs(int a):返回该值的绝对值。

public static double ceil(double a):返回大于等于该参数的最小值。

public static double floor(double a):返回小于等于该参数的最大值。

public static int max(int a, int b):返回大的数

public static int min(int a, int b):返回小的数

public static double pow(int a, int b):返回a的b次方,double类型

public static double random():返回带正号的 double 值,该值大于等于 0.0 且小于 1.0

public static int round(float a):返回四舍五入的值。int类型

public static double sqrt(int a):返回正确舍入的int 值的正平方根,double类型

public static double cbrt(int  a):返回int 值的立方根,double类型

3、实例

public class MathDemo {
	public static void main(String[] args) {

		// 返回该值的绝对值。
		System.out.println(Math.abs(-4)); // 4

		// 返回大于等于该参数的最小值。
		System.out.println(Math.ceil(-12.34)); // -12.0

		// 返回小于等于该参数的最大值。
		System.out.println(Math.floor(12.34)); // 12.0

		// 返回四舍五入的整型值。
		System.out.println(Math.round(12.54)); // 13

		// 比较两个数的大小,返回大的
		System.out.println(Math.max(10, 9)); // 10

		// 比较两个数的大小,返回小的
		System.out.println(Math.min(10, 9)); // 9

		// 返回平方根,double类型
		System.out.println(Math.sqrt(4)); // 2.0

		// 返回立方格,double类型
		System.out.println(Math.cbrt(8));

		// 返回10的3次方,double类型
		System.out.println(Math.pow(10, 3)); // 1000.0

		// 产生10个1-6的随机数
		for (int x = 0; x < 10; x++) {
			int d = (int) (Math.random() * 6 + 1);
			System.out.print(d + " ");
		}
	}
}

时间日期类

1、常见的时间日期类:

Date类、DateFormat类、Calendar类

2、概述

        在 JDK 1.1 之前,类 Date 有两个其他的函数。它允许把日期解释为年、月、日、小时、分钟和秒值。它也允许格式化和解析日期字符串。不过,这些函数的 API 不易于实现国际化。从 JDK 1.1 开始,应该使用Calendar 类实现日期和时间字段之间转换,使用DateFormat 类来格式化和解析日期字符串。

         DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。日期/时间格式化子类(如 SimpleDateFormat)允许进行格式化(也就是日期 -> 文本)、解析(文本-> 日期)和标准化。

        Calendar 类是一个抽象类,它为特定瞬间与一组诸YEARMONTHDAY_OF_MONTHHOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段提供了一些方法。

3、时间日期类中常用的方法

Date类:

构造方法:

public Date():分配 Date 对象并初始化此对象,以表示分配它的时间(毫秒)

public Date(long date):分配 Date 对象并初始化此对象.

普通方法:

public String toString():把此 Date 对象,转换为此日期的字符串表示形式。

DateFormat类:

 public final String format(Date date):将一个 Date 格式化为日期/时间字符串。

public static final DateFormat getDateInstance(int style, Locale aLocale):获取日期格式器,该格式器具有给定语言环境的给定格式化风格。

已实现类:java.text.SimpleDateFormat

Calendar类:

public static final int YEAR:指示年的 get 和 set 的字段数字。这是一个特定于日历的值;

public static final int MONTH:指示月份的 get 和 set 的字段数字。第一个月是0.

public static final int DAY_OF_MONTH:get 和 set 的字段数字,指示一个月中的某天。

public static final int DAY_OF_YEAR:get 和 set 的字段数字,指示当前年中的天数。

public static final int DAY_OF_WEEK:get 和 set 的字段数字,指示一个星期中的某天。

public static final int HOUR_OF_DAY:get 和 set 的字段数字,指示一天中的小时。

public static final int MINUTE:get 和 set 的字段数字,指示一小时中的分钟。

public static final int SECOND:get 和 set 的字段数字,指示一分钟中的秒。

public static final int MILLISECOND:get 和 set 的字段数字,指示一秒中的毫秒。

已实现类:java.util.GregorianCalendar 

4、实例1

import java.text.DateFormat;
import java.util.Date;

/*
* 	日期的简单实用。java.util.Date
 * 	
 * 	实现 日期对象和毫秒值的之间转换。要求转换方法
 * 		long time = System.currentTimeMillis();
 * 	毫秒值转成日期对象,获取其中的年,月,日
 * 
 */
public class DateDemo01 {
	public static void main(String[] args) {
		// 时间是毫秒值,返回的是long类型,所以用long类型的变量接收
		long time = System.currentTimeMillis();
		// 即 1970 年 1 月 1 日 00:00:00 GMT)以来的指定毫秒数。
		// 分配 Date 对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,
		Date date = new Date(time);
		// 输出默认的时间,国际化标准
		System.out.println(date);

		// 设置显示的风格
		DateFormat df = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.MEDIUM);
		// 将一个 Date 格式化为日期/时间字符串。
		String dayTime = df.format(date);
		System.out.println(dayTime);
	}
}

5、实例2

package com.lgm.date;

import java.util.Calendar;

/*
 * 获取本地时间
*/
public class DateDemo02 {
	public static void main(String[] args) {
		// 获取时间对象
		Calendar c = Calendar.getInstance();
		System.out.println(c);
		
		// 获取年
		int year = c.get(Calendar.YEAR);
		// 获取月,因为月份是从0开始的,所以要+1
		int month = c.get(Calendar.MONTH) + 1;
		// 获取日
		int day = c.get(Calendar.DAY_OF_MONTH);
		// 获取星期,因为国外的第一天是星期日,且返回的的数据是一个数值,所以,需要调用方法来转换
		String week = getcnWeek(c.get(Calendar.DAY_OF_WEEK));
		// 获取时
		int hour = c.get(Calendar.HOUR);
		// 获取分
		int minute = c.get(Calendar.MINUTE);
		// 获取秒
		int second = c.get(Calendar.SECOND);
		// 打印当前本地时间
		System.out.println(year + "年" + month + "月" + day + "日" + week);
		System.out.println(hour + ":" + minute + ":" + second);
	}

	private static String getcnWeek(int i) {
		if (i < 0 || i > 7) {
			throw new RuntimeException(i + "没有对应的星期");
		}
		// 定义一个数组
		String[] cnWeek = { "", "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };

		return cnWeek[i];
	}
}

6、实例3

import java.text.DateFormat;
import java.text.ParseException;
import java.util.Date;

/*
 * 2013-4-25到2013年7月29日。共有多天?
 */

/*
 * 思路:
 * 1、有多少天,是一个相减的过程
 * 2、可是,字符串是不能相减的,所以可将字符串时间转为毫秒值
 * 3、怎么获取毫秒值呢?毫秒值-->日期对象,日期对象-->毫秒值
 * 4、获取日期对象,需要将字符串文本--解析--日期对象
 * 5、将相减得到的毫秒值转换为天数
 * 
 */
public class DateDemo03 {
	public static void main(String[] args) throws ParseException {
		// 将两个日期分别赋值给两个变量
		String day1 = "2013-4-25";
		String day2 = "2013年7月29日";

		// 设置风格
		int style_1 = DateFormat.MEDIUM;
		int style_2 = DateFormat.LONG;

		// 调用方法,来获取相差多少天
		int days = getDays(day1, day2, style_1, style_2);
		System.out.println("2013-4-25到2013年7月29日。共有 " + days + " 天.");
	}

	/**
	 * 此方法用于计算两个日期相差多少天
	 * 
	 * @param day1	表示一个日期
	 * @param day2	表示另一个日期
	 * @param style_1	表示一种风格:DateFormat.MEDIUM
	 * @param style_2	表示一种风格:DateFormat.LONG
	 * @return	返回相隔的天数
	 * @throws ParseException	抛出异常
	 */
	private static int getDays(String day1, String day2, int style_1, int style_2) throws ParseException {
		// 1.根据给定风格,创建格式器对象
		DateFormat format_1 = DateFormat.getDateInstance(style_1);
		DateFormat format_2 = DateFormat.getDateInstance(style_2);

		// 2.对文本进行解析
		Date date_1 = format_1.parse(day1);
		Date date_2 = format_2.parse(day2);

		// 3.获取日期对象的毫秒值
		long dl_1 = date_1.getTime();
		long dl_2 = date_2.getTime();

		//毫秒值--->天  1秒=1000毫秒
		int days = Math.abs((int) ((dl_1 - dl_2) / 1000 / 60 / 60 / 24));

		return days;
	}
}

你可能感兴趣的:(Java,SE)