一、其他API
1.System类
system类中的方法和成员变量都是静态的, 不需要创建System对象就可以直接使用。
1 /* 2 * 演示System的使用 3 */ 4 public class SystemDemo { 5 public static void main(String[] args) { 6 7 /* 8 * System类中的静态成员变量: out 和 err的区别 9 * out和err都可以把需要输出的信息展示在控制台上。 10 * 但是由于JVM的底层针对out和err是两种不同的实现机制 11 * 在输出的时候,数据的显示先后次序并不能确定 12 * 13 * 建议:开发中要么全部是out,要么全部使用err 14 */ 15 System.out.println("你好"); 16 System.err.println("hello"); 17 //强制退出JVM 18 System.exit(0); 19 //获取系统的当前时间,得到的是当前时间距离1970-1-1 0:0:0秒的时间差 20 //获取到的是一个毫秒值。1秒=1000毫秒 21 System.out.println(System.currentTimeMillis()); 22 } 23 }
结论:只要获取和系统相关的信息时就应该考虑使用System类。
2. Math类
Math:它封装了和数学运算相关的方法。
Math类中的方法都是静态的,可以通过类名直接调用。
1 /* 2 * 演示Math类 3 */ 4 public class MathDemo { 5 public static void main(String[] args) { 6 7 System.out.println(Math.E); 8 System.out.println(Math.PI); 9 10 //返回大于指定数据的最小整数 11 System.out.println(Math.ceil(4.56)); 12 //返回小于指定数据的最大整数 13 System.out.println(Math.floor(4.56)); 14 //四舍五入 15 System.out.println(Math.round(4.56)); 16 //0~1之间的一个随机数 17 System.out.println(Math.random()); 18 } 19 }
3. Random类
Random类它是专门负责产生随机数的类。
1 /* 2 * 演示随机数类 3 */ 4 public class RandomDemo { 5 public static void main(String[] args) { 6 7 // 创建产生随机数的那个对象 8 Random r = new Random(); 9 10 System.out.println(r.nextFloat()); 11 System.out.println(r.nextDouble()); 12 System.out.println(r.nextInt()); 13 System.out.println(r.nextBoolean()); 14 System.out.println(r.nextLong()); 15 System.out.println(r.nextInt(100)); 16 17 for( int i = 0 ; i < 6 ; i++){ 18 System.out.println(r.nextInt(6) + 1); 19 } 20 } 21 }
4. 日期类
a. Date类
生活中有时间日期数据,在Java中也有对应的类描述这些数据。
类 Date 表示特定的瞬间,精确到毫秒。
在 JDK 1.1 之前,类 Date 有两个其他的函数。它允许把日期解释为年、月、日、小时、分钟和秒值。它也允许格式化和解析日期字符串。不过,这些函数的 API 不易于实现国际化。从 JDK 1.1 开始,应该使用 Calendar 类实现日期和时间字段之间转换,使用 DateFormat 类来格式化和解析日期字符串。Date 中的相应方法已废弃。
Date类是表示时间日期数据的对象,但是这个类中的方法不利于其他国家程序员进行时间的显示等操作,其中大部分的方法已经过时,由Calendar和DateFormat类代替。
1 /* 2 * 演示Date类 3 * 构造方法: 4 * Date() 5 * Date类中的空参数的构造方法:它的目的仅仅是将当前的时间封装成Date对象 6 * Date(long date) 7 * Date类中的接收long类型的整数构造方法,它的目的是将指定的一个毫秒值封装成Date对象 8 * 普通的方法: 9 * getTime() 获取Date对象所表示的当前时间对应的毫秒值 10 * setTime(long time) 将当前Date对象对应的毫秒值修改为指定的毫秒值 11 * 12 * Date类中需要掌握: 13 * Date对象和毫秒值之间的转换。 14 * Date对象转毫秒值的作用,是为了计算2个时间之间的时间差 15 * 计算出来的时间差是一个毫秒值,需要手动的转成具体的天数,或者月,或者年等数据 16 * 17 */ 18 public class DateDemo { 19 public static void main(String[] args) { 20 21 //使用Date类中的空参数的构造方法创建Date对象 22 Date date = new Date(); 23 Date date2 = new Date(999900001231L); 24 //date.setTime(1230L); 25 //打印 26 System.out.println(date); 27 System.out.println(date2); 28 } 29 }
b.日期时间格式化类
b.1 DataFormat类介绍
DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。日期/时间格式化子类(如 SimpleDateFormat)允许进行格式化(也就是日期 -> 文本)、解析(文本-> 日期)和标准化。将日期表示为 Date 对象,或者表示为从 GMT(格林尼治标准时间)1970 年 1 月 1 日 00:00:00 这一刻开始的毫秒数。
DateFormat 提供了很多类方法,以获得基于默认或给定语言环境和多种格式化风格的默认日期/时间 Formatter。格式化风格包括 FULL、LONG、MEDIUM 和 SHORT。方法描述中提供了使用这些风格的更多细节和示例。
DateFormat类:它可以完成Date对象和字符串之间的转成。但是由于这个类是抽象类,不能直接去创建对象,并且这个类对日期和字符串之间的转换方式只有4种,并不能满足用户想要的格式:
1 /* 2 * 简单演示DateFormat类 3 */ 4 public class DataFormatDemo { 5 public static void main(String[] args) { 6 7 //获取到DateFormat 对象 8 DateFormat format = DateFormat.getInstance(); 9 10 //将日期对象转成字符串 11 Date d = new Date(); 12 String s = format.format(d); 13 System.out.println(s); 14 15 } 16 }
b.2 SimpleDateFormat类介绍
SimpleDateFormat:它和DateFormat功能一致。都是完成Date对象和字符串之间的转换。
SimpleDateFormat是DateFormat的子类,并且在创建SimpleDateFormat对象的时候,如何完成日期和字符串之间的转换格式书写,由开发人员自己指定。
创建SimpleDateFormat对象时如何指定转换的格式:
创建SimpleDateFormat对象指定的格式:
年使用yyyy
月MM
天dd
时HH
分mm
秒ss
中间的分隔符由程序员自己指定。
解析日期:将字符串形式的日期数据转成Date对象 使用的SimpleDateFormat类中的parse方法
格式化日期:将Date对象转成字符串形式的日期数据,使用SimpleDateFormat类中的format方法
1 /* 2 * 演示SimpleDateFormat类 3 */ 4 public class SimpleDataFormatDemo { 5 public static void main(String[] args) throws ParseException { 6 method3(); 7 } 8 /* 9 * 如下的2个字符串形式的时间数据,计算它们的时间差 10 * "2016年01月02日 10:27:14" 11 * "2019-11/22 10:27:14" 12 * 计算它们之间相隔多少天? 13 */ 14 public static void method3() throws ParseException { 15 16 String s = "2016年01月02日 10:27:14"; 17 String s2 = "2016-01/03 10:27:14"; 18 19 //需要定义2个不同的格式器对象 20 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); 21 SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM/dd HH:mm:ss"); 22 23 //解析 24 Date d = sdf.parse(s); 25 Date d2 = sdf2.parse(s2); 26 27 //需要获取不同的Date对象对应的毫秒值 28 long t = d.getTime(); 29 long t2 = d2.getTime(); 30 31 //计算时间差 32 long day = Math.abs((t - t2) / 1000 / 60 / 60 / 24); 33 System.out.println(day); 34 } 35 //将字符串数据转成Date对象 36 public static void method2() throws ParseException { 37 38 String s = "2016年01月02日 10:27:14"; 39 40 //创建格式器对象 41 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); 42 43 //将字符串转成Date对象 44 Date d = sdf.parse(s); 45 46 System.out.println(d); 47 } 48 //将日期对象转成字符串数据 49 public static void method() { 50 // 创建格式器对象 51 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); 52 53 // 将日期对象转成字符串 54 Date d = new Date(); 55 String s = sdf.format(d); 56 System.out.println(s); 57 } 58 }
3. 日历类
Calender类:它是日历类。其实这个类相当于一个容器。这个容器中保存者当前时间相关的所有信息。
比如:今天是一年中的第几天,今天是一周中的第几天,今天是这个月的第几周,今天是几月,几日,时分秒等信息都保存在这个容器中。
Calender类 年月日时分秒,12个月 ,星期 等对应的英文数据都封装成静态的成员变量。
Calender类是抽象类,它中提供了静态的getInstance方法获取到Calender对象()。
1 //简单演示Calendar 2 public static void method() { 3 4 //获取Calendar对象 5 Calendar c = Calendar.getInstance(); 6 7 System.out.println(c); 8 9 System.out.println(c.get( Calendar.YEAR )); 10 /* 11 * 计算机中的月份是从 零开始的。 12 * 0 表示 1月 13 * 1 表示2月 14 * 11表示12月 15 * 12表示下一年的1月 16 */ 17 System.out.println(c.get( Calendar.MONTH )); 18 System.out.println(c.get( Calendar.DAY_OF_MONTH )); 19 20 } 21 22 23 /* 24 * 计算任意一年的2月有多少天? 25 * 由于时间数据是连续的,因此我们可以将当前的时间设置为 26 * 当年的3月1日,然后让天数-1,当前的时间就自动的变为了2月的最后一天。 27 * 我们只需要将当前这个月中的天数获取出来,就是二月共计有多少天 28 */ 29 public static void method2() { 30 31 //获取到Calendar对象 32 Calendar c = Calendar.getInstance(); 33 34 // 设置当前的时间为 3月 1日 35 for (int year = 1000; year < 2555; year++) { 36 c.set(year, 2, 1); 37 // 让天数 -1 38 c.add(Calendar.DAY_OF_MONTH, -1); 39 // 获取到当前处理后的月中的天数 40 System.out.println(year + "年的2月有 " + c.get(Calendar.DAY_OF_MONTH) + "天"); 41 } 42 }
二 、 JDK5的特性
1. 静态导入
1 /* 2 * 静态导入演示 3 * 在程序中如果需要使用某些类中的静态成员,可以在程序开始的时候, 4 * 先将这些静态成员导入到程序中 5 * 然后在程序中就可以直接使用静态成员,而不需要指定类名 6 */ 7 import static java.lang.Math.PI; 8 import static java.lang.System.out; 9 10 public class StaticImportDemo { 11 public static void main(String[] args) { 12 out.println(PI); 13 } 14 }
2. 可变参数
1 /* 2 * 演示可变参数 3 */ 4 public class ParameterArgumentsDemo { 5 public static void main(String[] args) { 6 7 int sum = getSum(1, 2, 4); 8 System.out.println(sum); 9 /* 10 * 如果需要操作多个类型相同的数据的,将这些数据需要传递给某个方法 11 * 在JDK5之前:可以先将这些数据存储到数组中,然后将数组传递给方法 12 * 13 * 到JDK5之后,可以使用可变参数的技术来接收不确定个数的数据 14 * 15 */ 16 int[] arr = {11,22,33,44,55,66,77,88}; 17 18 int sum2 = getSum(12,33,44,55 ); 19 System.out.println(sum2); 20 } 21 22 /* 23 * 演示定义可变参数的方法 24 * 可变参数: 25 * 1、它实际中接收到的数据之后,依然保持在数组中,在方法中还是要通过数组的方式进行操作 26 * 2、如果方法上除了可变参数之外,还有其他的参数,这时可变参数必须写在整个方法参数列表的最后 27 */ 28 public static int getSum(int x , int ... arr ) { 29 30 int sum = 0; 31 for (int i = 0; i < arr.length; i++) { 32 sum += arr[i]; 33 } 34 return sum; 35 } 36 /*计算传递的数组中的和值 37 public static int getSum(int[] arr) { 38 39 int sum = 0; 40 for (int i = 0; i < arr.length; i++) { 41 sum += arr[i]; 42 } 43 return sum; 44 } 45 */ 46 // 需求:定义功能 计算2个数的和值 47 public static int getSum(int i, int j , int k) { 48 return i + j + k; 49 } 50 51 // 需求:定义功能 计算2个数的和值 52 public static int getSum(int i, int j) { 53 return i + j; 54 } 55 }
3.foreach循环
1 /* 2 * 在JDK5中提供了一个可以简化for循环的技术: 3 * foreach技术:高级for循环 4 * 普通for循环的书写格式: 5 * for( 表达式1 ; 表达式2 ; 表达式3 ){ 6 * 循环体 7 * } 8 * foreach书写格式: 9 * for( 数组空间中的元素类型 变量名 : 数组名 ){ 10 * 循环体 11 * } 12 * 使用foreach遍历数组的时候,定义的变量名中保存的数据是从数组中取出的元素 13 * 弊端:foreach只能遍历,不能对数组空间中的值进行其他的操作 14 */ 15 public class ForEachDemo { 16 public static void main(String[] args) { 17 18 int[] arr = {11,22,33,44,55,66}; 19 20 //使用普通for循环遍历 21 for(int i = 0 ; i < arr.length ; i ++){ 22 System.out.print(arr[i] + " "); 23 } 24 System.out.println(" ==================="); 25 //使用foreach遍历数组 26 for( int x : arr ){ 27 System.out.print(x + " "); 28 } 29 } 30 }