——我是LGM_Hakka,请多多指教。
Arrays类是一个针对数组操作的工具类。具有很多对数组操作的方法.
例如:排序和查找。
Arrays工具类中的方法都是静态的,通过Arrays.方法名即可调用。
若指定数组引用为 null,则此类中的方法都会抛出NullPointerException异常。
(注:参数不一定都是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是系统类。该类被final关键字修饰,不可被继承。
A. 提供了标准输入、标准输出和错误输出流;
B. 对外部定义的属性和环境变量的访问;
C. 加载文件和库的方法;
D. 提供了静态的变量
E. 还有快速复制数组的一部分的实用方法。
System系统类中的变量(不可以修改)和方法都是静态的。通过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):从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。
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类是Java提供的数学运算类。该类被final关键字修饰,不可被继承。
A. 提供两个常量:E、PI
B. 初等指数、对数、平方根和三角函数等运算方法
Math类中的变量(不可以修改)和方法都是静态的。通过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类型
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 + " ");
}
}
}
Date类、DateFormat类、Calendar类
在 JDK 1.1 之前,类
Date
有两个其他的函数。它允许把日期解释为年、月、日、小时、分钟和秒值。它也允许格式化和解析日期字符串。不过,这些函数的 API 不易于实现国际化。从 JDK 1.1 开始,应该使用Calendar
类实现日期和时间字段之间转换,使用DateFormat
类来格式化和解析日期字符串。DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。日期/时间格式化子类(如 SimpleDateFormat)允许进行格式化(也就是日期 -> 文本)、解析(文本-> 日期)和标准化。
Calendar 类是一个抽象类,它为特定瞬间与一组诸YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段提供了一些方法。
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
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);
}
}
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];
}
}
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;
}
}