Java集合框架-5.【System类】【Runtime】【Date】【Calendar】【Math & Random】

时间:2020-12-15 19:21:16

1、System类

①、什么是System类?

     System类是一些与系统相关属性和方法的集合。

②、特点:

     System类中的方法和属性都是静态的,可以直接使用类名调用。

     System类不可以被实例化,因为被final修饰。


③、System类中的常用属性和方法:

属性:

System.out ----> 标准输出

System.in -----> 标准输入。默认是键盘。

 

方法:

static void exit(int status):系统退出。当参数的值为非0的时候表示退出。

示例:System.exit(1);  //JVM系统退出。

static Properties getProperties():获取当前系统的属性信息。

static String getProperty(String key):根据指定的键key,获取对应的值value。

static String setProperty(String key, String value):设置自定义的属性信息。

代码示例:

import java.util.*;
class SystemDemo
{
public static void main(String[] args)
{
Properties pro = System.getProperties(); //该集合中存储的都是字符串,没有泛型定义。

//如何在系统中自定义一些特有信息呢?
System.setProperty("mykey","myvalue");

//获取指定属性信息。
String value = System.getProperty("os.name");
System.out.println("value:"+value);

//可不可以在JVM启动时,动态加载一些属性信息呢?
String v = System.getProperty("haha");
System.out.println(v); //null

//获取所有属性信息。
for(Object obj : pro.keySet())
{
String value = (String)pro.get(obj);
System.out.println(obj+"::"+value);
}
}
}

注意:因为PropertiesHashtable的子类,也就是Map集合的一个子类对象。可以通过Map的方法取出该集合中的元素。

例如:keySet或者entrySet方法。再结合迭代器或者增强for循环进行输出系统属性信息。

 

2、Runtime

①、特点:Runtime类没有提供构造函数,但是提供了一个静态方法获取本类对象。并且该方法的返回值类型是Runtime类型。

该方法是:static Runtime getRuntime()

从Runtime类的特点可以看出该类使用了单例设计模式。

 

Runtime类特exec()方法介绍:

Process exec(String command):该方法在单独的进程中执行指定的字符串命令。

代码示例:

class RuntimeDemo
{
public static void main(String[] args) throws Exception
{
Runtime r = Runtime.getRuntime(); //使用getRuntime方法获取Runtime类的对象。
Process p = r.exec("notepad.exe SystemDemo.java"); //通过exec方法执行一个本地操作系统自带的记事本程序,并用记事本程序打开SystemDemo.java这个文件。

//Thread.sleep(4000);
//p.destroy(); //destroy的作用是杀掉子进程。就是当运行一个程序的时候就杀掉该程序的进程。
}
}


3、Date

①、Date类:是一个操作日期的工具类。可以使用Date类的构造方法获取当前的完整日期时间。

import java.util.*;
class DateDemo
{
public static void main(String[] args)
{
Date d = new Date();
System.out.println(d); //Thu May 1514:52:01 CST 2014
}
}


②、DateFormat类、SimplerDateFormat类:用于格式化时间日期。

     由于直接通过Date类的构造函数获取到的时间不符合大多数人的习惯要求,那么就可以通过另一个类DateFormat来对日期进行格式化。

     由于DateFormat这个类是一个抽象类,如果想要按照自定义模版的方式来格式化日期时间,则可以使用DateFormat的子类SimpleDateFormat以及DateFormat类提供的format方法来实现。


日期时间模版

Java集合框架-5.【System类】【Runtime】【Date】【Calendar】【Math & Random】


format方法声明:String format(Date date)

示例代码:

import java.util.*;
import java.text.*;
class DateDemo
{
public static void main(String[] args)
{
Date d = new Date();
System.out.println(d); //Thu May 1515:56:22 CST 2014

//将模式封装到SimpleDateFormat对象中。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 E HH:mm:ss");

//调用format方法让模式格式化指定Date对象。
String time = sdf.format(d);
System.out.println("time="+time); //time=2014年05月15日星期四 15:56:22
}
}

③、Calendar类:用于获取到精确的时间。(可以精确到毫秒)

     Calendar类中提供了很多的字段用于获取精确的时间属性,也都可以通过Calendar类名直接调用。

     但是由于Calendar类是一个抽象类,不能被创建对象,但该类提供了一个静态方法getInstance()用于实例化Calendar类对象。从而可以通过Calendar类中提供的方法来操作相应的字段。


get方法的使用操作:用于获取指定的时间。

int get(int field)

示例代码:

import java.util.*;
import java.text.*;
class CalendarDemo
{
public static void main(String[] args)
{
Calendar c = Calendar.getInstance();

//可以通过建立月份和星期的表,利用查表法来简化对Calendar类字段的操作,便于阅读和理解。
String[] mons = {"一月","二月","三月","四月",
"五月","六月","七月","八月",
"九月","十月","十一月","十二月"};
String[] weeks = {"","星期一","星期二","星期三",
"星期四","星期五","星期六","星期日"};

int index = c.get(Calendar.MONTH);
int index1 = c.get(Calendar.DAY_OF_WEEK)-1;

sop(c.get(Calendar.YEAR)+"年");
//sop((c.get(Calendar.MONTH)+1)+"月");
sop(mons[index]);
sop(c.get(Calendar.DAY_OF_MONTH)+"日");
//sop("星期"+c.get(Calendar.DAY_OF_WEEK));
sop(weeks[index1]);
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}

输出结果:
2014年
五月
15日
星期四

 

set方法的使用操作:用于设置具体的时间。

void set(int year, int month, int date)

void set(int year, int month, int date, int hourOfDay, int minute)

void set(int year, int month, int date, int hourOfDay, int minute,int second)

示例代码:

import java.util.*;
class CalendarTest
{
public static void main(String[] args)
{
Calendar c = Calendar.getInstance();

//c.set(2012,2,22);
//c.set(2012,2,22,13,27);
c.set(2012,2,22,13,45,29);

sop(c.get(Calendar.YEAR)+"年");
sop((c.get(Calendar.MONTH)+1)+"月");
sop(c.get(Calendar.DAY_OF_MONTH)+"日");
sop(c.get(Calendar.HOUR_OF_DAY)+"点");
sop(c.get(Calendar.MINUTE)+"分");
sop(c.get(Calendar.SECOND)+"秒");
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}

输出结果:
2012年
3月
22日
13点
45分
29秒

 

add方法的使用操作:用于动态的操作(添加或者删除)给定的时间。

abstract void add(int field, int amount)

示例代码:

import java.util.*;
class CalendarTest2
{
public static void main(String[] args)
{
Calendar c = Calendar.getInstance();

printCalendar(c); //输出当前时间

System.out.println(); //用于分隔。

c.add(Calendar.YEAR,4); //当前是2014年,再加4年就是2018年
c.add(Calendar.MONTH,-2); //当前是5月份,减去2个月就是3月份
c.add(Calendar.DAY_OF_MONTH,1);
c.add(Calendar.DAY_OF_WEEK,-2);

printCalendar(c); //输出被add方法改动之后的时间
}
public static void printCalendar(Calendar c)
{
String[] mons = {"一月","二月","三月","四月",
"五月","六月","七月","八月",
"九月","十月","十一月","十二月"};

String[] weeks = {"","星期一","星期二","星期三",
"星期四","星期五","星期六","星期日"};

int index = c.get(Calendar.MONTH);
int index1 = c.get(Calendar.DAY_OF_WEEK);

sop(c.get(Calendar.YEAR)+"年");
sop(mons[index]);
sop(c.get(Calendar.DAY_OF_MONTH)+"日");
sop(weeks[index1]);
}
public static void sop(Object obj)
{
System.out.print(obj);
}
}

输出结果:
2014年五月15日星期五
2018年三月14日星期四


4、Math &Random

①、Math类:是一个数学操作类,提供了一系列的数学操作方法。

       Math类里面的方法都是静态方法,可以直接使用类名调用。


②、常用Math类的数学方法:

public static void show()
{
double d = Math.ceil(12.34); //ceil返回大于指定数据的最小整数。
double d1 = Math.floor(12.34); //floor返回小于指定数据的最大整数。
double d2 = Math.pow(2,3); //求2的3次幂
long l = Math.round(12.54); //四舍五入

sop("d="+d); //大于12.34的最小整数是13.0
sop("d1="+d1); //小于12.34的最大整数是12.0
sop("d2="+d2); //2的3次幂的结果是8.0
sop("l="+l); //四舍五入之后的值是13
}

③、random方法:随机生成一个大于等于0.0并且小于1.0double类型的值。

方法声明:static double random();

方法演示:

class MathDemo
{
public static void main(String[] args)
{
for(int x=0; x<10; x++)
{
int d =(int)(Math.random()*10+1); //将生成的double小数强转成int型整数,整数范围改为了0~10之间。
System.out.println(d); //随机生成输出10个在0到10之间的整数。
}
}
}


④、Random类

作用:用于生成随机数的类。和Math类中的random方法类似。

特点:可以指定一个随机数的范围,然后任意产生在此范围中的数字。

 

Random类的常用方法:

int nextInt():随机生成int型的值。

float nextFloat():随机生成float型的值。

long nextLong():随机生成long型的值。

double nextDouble():随机生成double型的值。

代码示例:

import java.util.*;
class MathDemo
{
public static void main(String[] args)
{
Random r = new Random();
for(int x=0;x<10; x++)
{
int d = r.nextInt(10)+1;
sop(d); //随机生成10个0~10之间的int型数值。
}
}
}