有一些类虽然不像集合、多线程、网络编程中的类那样属于Java中的核心类,但是它们在开发过程中给我们带来很多便利,这里就对它们做下简要的介绍和演示。
一、System类
System类中的构造方法是私有的,System类中的属性和方法都是静态的。
常用方法: long currentTimeMills():返回以毫秒值为单位的当前时间。
System
类包含一些有用的类字段和方法。下面的演示就获取了本地系统的信息,并把它们打印出来。
1 package www.wsw.otherApi;
2 import java.util.Properties;
3 import java.util.Set;
4
5 public class SystemTest {
6 /**
7 * 跨平台的分隔符,在什么平台上运行,就调用那个平台的换行符
8 * 另外。可以把系统的常用信息定义成静态字段,方便使用。
9 */
10 public static String line_speparator=System.getProperty("line.separator");
11
12 public static void main(String[] args) {
13 //常用方法: long currentTimeMills()
14 long l1=System.currentTimeMillis();//返回以毫秒值为单位的当前时间
15 System.out.println(l1);//1490005710792
16 demo_1();
17 }
18
19 public static void demo_1() {
20 /**
21 * 获取系统信息的键和值,并存储到Properties集合中
22 * Properties是HashTable的子类,它的键和值都是String类型的
23 * 最好使用Properties自己的方法来完成元素的存储和取出操作
24 */
25 Properties properties=System.getProperties();
26 // Set<String> stringPropertyNames() 返回此属性列表中的键集
27 Set<String> nameSet=properties.stringPropertyNames();
28 for(String name:nameSet){
29 String value=properties.getProperty(name);
30 System.out.println(name+"::"+value);
31 }
32 }
33
34 }
二、 Runtime类
每个 Java 应用程序都有一个 Runtime
类实例,使应用程序能够与其运行的环境相连接。可以通过 getRuntime
方法获取当前运行时。
应用程序不能创建自己的 Runtime 类实例。
有exec方法和destroy方法,参见演示。
1 package www.wsw.otherApi;
2 import java.io.IOException;
3
4 public class RuntimeDemo {
5
6 public static void main(String[] args) throws IOException, InterruptedException {
7 /**
8 * Runtime没有构造方法摘要,说明该类不能够创建对象,
9 * 又该类有非静态方法,则Runtime类有能返回该类实例的静态方法,
10 * 发现这样的方法只有一个,则Runtime类使用了单例设计模式
11 */
12 Runtime r=Runtime.getRuntime();
13 //execute 执行 exe
14 Process p=r.exec("notepad.exe D:\abc\MapDemo.java");//打开记事本,并用它解析D盘目录下的一个文件
15 //Process是一个抽象类
16 Thread.sleep(2000);
17 p.destroy();//杀掉子进程
18
19 }
20
21 }
三、Math类
* Math类中都是做数学运算的静态方法
* 常用方法:
* ceil():返回大于等于参数的最小整数
* floor():返回小于等于参数的最大整数
* round():返回参数四舍五入得到的整数
* pow(a,b):返回a的b次方
*
* random():返回[0,1)范围内的伪随机数
1 package www.wsw.otherApi;
2
3 public class MathDemo {
4
5 public static void main(String[] args) {
6
7 double d1=Math.ceil(-7.67);//-7.0
8 double d2=Math.floor(-7.67);//-8.0
9 double d3=Math.round(-7.67);//-8.0
10 sop("d1="+d1);
11 sop("d2="+d2);
12 sop("d3="+d3);
13
14 sop(Math.pow(10,2)+"");//100.0
15
16 //获取10个1-6之间的随机数
17 for (int i = 0; i < 10; i++) {
18 //double d= (int)(Math.random()*6)+1;
19 double d=Math.ceil(Math.random()*6);
20 /**
21 * 也可以写为:
22 * Random r=new Random();//Random位于Java.util包中,把随机数封装成了对象
23 * 提供更多的方法
24 * int d=r.nextInt(6)+1;
25 */
26
27 sop(d+"");
28 }
29
30 }
31 //方便输出
32 public static void sop(String str) {
33 System.out.println(str);
34 }
35
36 }
四、Date类和DateFormat类
Date类属于java.util包,类 Date
表示特定的瞬间,精确到毫秒。
它允许把日期解释为年、月、日、小时、分钟和秒值。它也允许格式化和解析日期字符串。不过,这些函数的 API 不易于实现国际化。
从 JDK 1.1 开始,应该使用 Calendar
类实现日期和时间字段之间转换,使用 DateFormat
类来格式化和解析日期字符串。Date
中的相应方法已废弃。
DateFormat 属于java.text包,是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。
把毫秒值转化为Date对象
* 1.Date的构造方法
* 2.通过setTime方法
* 作用:可以使用Date类中的方法对Date对象的字段(年月日等)进行操作
*
* 把Date对象转化为毫秒值
* 1.getTime方法
* 作用:可以对毫秒值进行运算,算出时间差等
*
* 其他方法:
* boolean before(Date when):判断此日期是否在指定日期之前
* boolean after():判断此日期是否在指定日期之后
* boolean equals():判断此日期和指定日期是否相等
* int compareTo():返回正负零
下面的演示中还涉及到两个转化,把日期字符串转为为Date对象和把Date对象转化为按某种格式的日期字符串,
分别使用了DateFormat类中的parse方法和format方法。
1 package www.wsw.otherApi;
2
3 import java.text.DateFormat;
4 import java.text.ParseException;
5 import java.text.SimpleDateFormat;
6 import java.util.Date;
7
8 public class DateDemo {
9
10 public static void main(String[] args) throws ParseException {
11
12 methodDemo_3();
13 }
14 /**
15 * 将日期字符串-->日期对象
16 * @throws ParseException 日期转换异常
17 */
18 public static void methodDemo_3() throws ParseException {
19 String str="2017--03--29";
20 DateFormat dateFormat=new SimpleDateFormat("yyyy--MM--dd");
21 /**
22 * String str="2017年3月1日";
23 * DateFormat dateFormat=DateFormat.getDateInstance(DateFormat.LONG);
24 */
25 Date date=dateFormat.parse(str);
26 System.out.println(date);//Wed Mar 29 00:00:00 CST 2017
27
28 }
29 /**
30 * 将日期对象进行格式化
31 * 将日期对象-->日期格式的字符串
32 * 使用的是DateFormat中的format方法
33 */
34 public static void methodDemo_2() {
35 Date date=new Date();
36 //获取日期格式器对象,并为默认的风格 可以指定Long full风格等
37 DateFormat dateFormat1=DateFormat.getDateInstance(DateFormat.FULL);
38 //获取日期/时间格式器对象
39 DateFormat dateFormat2=DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG);
40
41 //如果,想要使用自定义的格式呢?
42 DateFormat dateFormat3=new SimpleDateFormat("MM月~dd日--yyyy年");
43 String str1=dateFormat1.format(date);
44 String str2=dateFormat2.format(date);
45 String str3=dateFormat3.format(date);
46 System.out.println(str1);//2017年3月22日 星期三
47 System.out.println(str2);//2017年3月22日 下午02时14分06秒
48 System.out.println(str3);//03月~22日--2017年
49 }
50
51 public static void methodDemo_1() {
52 long l=System.currentTimeMillis();
53 Date d=new Date();//把当前时间封装为Date对象
54 Date d2=new Date(1490023019659l);//把毫秒值转化为Date对象
55 System.out.println(d);//Mon Mar 20 23:18:58 CST 2017
56 System.out.println(d2);//Mon Mar 20 23:16:59 CST 2017
57 }
58
59 }
Date类练习:
练习:计算“2017年6月1日”和“2017年3月22日”之间相差多少天?
* 思路:
* 1.把日期字符串转化为Date对象
* 2.把Date对象转化为相应的毫秒值,然后相减
* 3.把毫秒值转化为天
1 package www.wsw.otherApi;
2
3 import java.text.DateFormat;
4 import java.text.ParseException;
5 import java.util.Date;
6
7 public class DateTest {
8
9 public static void main(String[] args) throws ParseException {
10 int day=subDate("2017年5月1日","2017年3月22日");
11 System.out.println(day);
12 }
13
14 public static int subDate(String str1, String str2) throws ParseException {
15 DateFormat dateFormat=DateFormat.getDateInstance(DateFormat.LONG);
16 Date date1=dateFormat.parse(str1);
17 Date date2=dateFormat.parse(str2);
18
19 long time1=date1.getTime();
20 long time2=date2.getTime();
21 long time =time1-time2;
22 int day=getDay(time);
23 return day;
24 }
25 /**
26 * 把毫秒值转化为天数
27 * @param time 毫秒值
28 * @return 天数
29 */
30 public static int getDay(long time) {
31 int day=(int) (time/1000/60/60/24);
32 return day;
33 }
34
35 }
五、Calendar类
Calendar
类是一个抽象类,它为特定瞬间与一组诸如 YEAR
、MONTH
、DAY_OF_MONTH
、HOUR
等 日历字段
之间的转换提供了一些方法,
并为操作日历字段(例如获得下星期的日期)提供了一些方法。
1 package www.wsw.otherApi;
2 import java.util.Calendar;
3
4 public class CalendarDemo {
5
6 public static void main(String[] args) {
7 Calendar c=Calendar.getInstance();
8
9 //使用Calendar类中的方法获取某年的2月有多少天
10 showDays(2016);//2016年2月29日星期一
11 }
12
13 public static void showDays(int year) {
14 Calendar c=Calendar.getInstance();
15 c.set(year, 2, 1);//把日期设置为某年的三月一号
16 c.add(Calendar.DAY_OF_MONTH, -1);//把日期向前偏移一天
17 showDate(c);
18 }
19
20 //获取日历字段,得到符合中国人习惯的日期显示
21 public static void showDate(Calendar c) {
22 int year=c.get(Calendar.YEAR);
23 int month=c.get(Calendar.MONTH)+1;//0代表1月
24 int day=c.get(Calendar.DAY_OF_MONTH);
25 int week=c.get(Calendar.DAY_OF_WEEK);//1代表星期天,7代表星期六
26
27 System.out.println(year+"年"+month+"月"+day+"日"+getWeek(week));//2017年3月22日星期三
28 }
29
30 public static String getWeek(int week) {
31 String[] weeks={"","星期天","星期一","星期二","星期三","星期四","星期五","星期六"};
32 return weeks[week];
33 }
34
35 }