Java基础<十四>---> 其他对象(System、Runtime、时间类、Math)

第一  System类

一、概述:

1、System类是描述系统一些信息的类,不可以实例化,也无构造函数。

2、System类中的方法和属性都是静态的。

      in  :标准输入流,默认是键盘。

      out:标准输出流,默认是控制台。

二、方法:

1、获取系统的属性信息:

      Properties getProperties();

说明:1)此方法返回的双列集合,即键值对;因为Properties是Hahstable的子类,也就是Map集合的一个子类对象,那么通过Map方法取出该集合中的元素。

           2)该集合存储的都是字符串,没有泛型定义

2、获取指定属性信息:

      String System.getProperty(String key);

3、在系统内定义特有信息:

      void System.setProperty(String key,String value);

4、如何在jvm启动时,加载一些属性信息:

      通过命令:java -D<name>=<value> 可以设置特有的系统属性信息

示例:

import java.util.Properties;

/*
 * system类中的方法都是静态的,out是标准的输出流,输出到控制台,in是标准的输入流,获取键盘的输入
 * 
 * 获取系统信息,Properties getProperties();
 */
public class SystemDemo {
	public static void main(String[] args) {
		Properties pro = System.getProperties();
		
		//设置属性
		System.setProperty("wo", "my set property");
		
		//获取指定属性
		String value = System.getProperty("os.name");
		System.out.println("获取指定属性:" + value);
		
		//动态加载属性信息,用到java的-D命令进行动态设定属性信息
		
		
		//获取全部信息,properties是hashtable的子类也就是map的子类,所以用map的取值方式进行取值
		for(Object obj : pro.keySet()){
			String str = (String) pro.get(obj);
			System.out.println(obj + "::" + str);
		}
	}
}

第二  Runtime类

一、概述:

1、每个java应用程序都有一个Runtime类实例,使应用程序能与其中运行的环境相连接,应用程序不能创建自己的Runtime类的实例,是由系统底层自己创建的。

2、该类并未提供构造函数:说明不可以new对象,那么会直接想到该类中的方法都是静态的。查阅API文档发现,该类中还有非静态方法,说明该类中肯定会提供方法获取该类对象,并且该方法是静态的,且返回值类型是该类类型。

3、由这个特点可以看出该类使用了单例设计模式。

二、方法:

1、获取本类对象:

       static Runtime getRuntime();

2、在单独的进程中执行指定字符串命令:

      Process exec(String command);

3、在Process中有一个杀掉子进程的方法,可将exec方法开启的进程杀掉

      void destroy();

示例:

/*
 * Runtime并没有提供构造函数,说明不可以创建对象,会直接想到该类中都是静态方法
 * 但是发现其中有非静态的方法
 * 说明该类肯定提供了方法获取本类对象,而且该方法是静态的,而且返回本类对象
 * 
 * 从特点看出本来使用了单利设计模式
 */
public class RuntimeDemo {
	public static void main(String[] args) {
		// 获取本类对象
		Runtime runtime = Runtime.getRuntime();
		try {
			// 调用对象执行命令,返回一个进程
			Process p = runtime.exec("notepad.exe");
			try {
				Thread.sleep(5000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			// 杀掉子进程。
			p.destroy();

			// 通过程序打开文件
			runtime.exec("notepad.exe RuntimeDemo.java");

		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}


第三  时间类

一、Date类

1、概述:类 Date 表示特定的瞬间,精确到毫秒。

2、转换:因为Date类获取到当前时间并以美国方式显示,所以并不是我们所需要的,也就是这样我们需要用到SimpleDateFormat类为其进行转成我们想要的类型。SimpleDateFormat接收一个模式,用于格式化。

示例:

/*
 * 类 Date 表示特定的瞬间,精确到毫秒。
 */
public class DateDemo {
	public static void main(String[] args) {
		Date d = new Date();
		System.out.println(d);//打印的时间不是理想中的格式,所以需要对其进行转化
		
		//将模型封装在simpledateformat对象中,SimpleDateFormat接收一个模式,用于格式化
		SimpleDateFormat smf = new SimpleDateFormat("yyyy年MM月dd日 E hh:mm:ss");
		//调用format方法让模式格式化指定的date对象
		String time = smf.format(d);
		System.out.println(time);
		
		long l = System.currentTimeMillis();
		Date d1 = new Date(l);
		System.out.println(d1);
	}
}

1、概述:

Calendar是一个抽象类,它为特定瞬间与一组诸如YEAR、MONTH、DAY_OF_MONTH等日历字段之间的转换提供了一些方法。Calendar可以对年月日等时间进行获取。并提供了相应的子段值。可参阅API文档。

2、方法:

1)获取年份:Calendar.YEAR
2)获取月份:Calendar.MONTH
3)获取日期:Calendar.DAY_OF_MONTH
4)获取星期:Calendar.DAY_OF_WEEK
5)获取小时:Calendar.HOUR_OF_DAY
6)获取分钟:Calendar.MINUTE
7)获取秒数:Calendar.SECOND

8)为给定的日历字段添加或减去指定的时间值:   --->   void add(int field,int amount);

9)获取指定的日历字段对应的时间值:                  --->   int get(int field);

10)将给定日历字段对应的时间值设置为给定值:  --->   void set(int field,int value);  设置日历字段 YEAR、MONTH和DAY_OF_MONTH的值: --->   void set(int year,int month,int date);

示例:

/*
 * 日期表示
 */
public class CalendarDemo {
	public static void main(String[] args) {
		Calendar calendar = Calendar.getInstance();
		// System.out.println(calendar);//打印calendar对象中的全部信息
		//设置时间
//		calendar.set(2050,2,3);
		System.out.println("设置后的时间:" + calendar.get(Calendar.YEAR));
		
		//add 根据日历的规则,为给定的日历字段添加或减去指定的时间量。
//		calendar.add(Calendar.MONTH, -10);
		System.out.println("改变后的时间:" + calendar.getTime());
		
		printCalendar(calendar);
	}

	public static void printCalendar(Calendar c) {
		// 设置月
		String[] month = { "一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月",
				"九月", "十月", "十一月", "十二月" };
		// 设置月份
		int indexm = c.get(Calendar.MONTH);
		System.out.println(month[indexm]);

		// 设置星期
		String[] weeks = { "", "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", };
		// 获取星期
		int indexw = c.get(Calendar.DAY_OF_WEEK);
		System.out.println(weeks[indexw]);

		// 获取年
		System.out.println(c.get(Calendar.YEAR) + "年");
		// 月
		System.out.println(c.get(Calendar.MONTH) + 1 + "月");
		// 日子
		System.out.println(c.get(Calendar.DAY_OF_WEEK) + "日");

	}
}

练习:

/*
 * 获取任意年的二月有多少天。
 * 
 * 思路:根据指定年设置一个时间就是 
 * c.set(year,2,1)//某一年的3月1日。
 * c.add(Calenar.DAY_OF_MONTH,-1);//3月1日,往前推一天,就是2月最后一天。
 */
public class CalendarTest {
	public static void main(String[] args) {
		getFebNum(2016);
	}
	
	public static void getFebNum(int year){
		Calendar c = Calendar.getInstance();
		System.out.println("时间:" + c.getTime());
		c.set(year,2,1);//某一年的3月1日。
		c.add(Calendar.DAY_OF_MONTH, -1);//3月1日,往前推一天,就是2月最后一天。
		System.out.println(c.get(Calendar.DAY_OF_MONTH));
	}
}

第四  Math类

一、概述:

Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。

二、方法:

1、double ceil(double d)      --->   返回大于指定数据的最小整数
2、double floor(double d)    --->   返回小于指定数据的最大整数

3、double pow(double a,double b)         --->   返回a的b次方
4、double/float round(double/float m)    --->   返回m四舍五入的值

5、double random()    --->   返回0到1的随机数,包含0不包含1

示例:

public class MathDemo {
	public static void main(String[] args) {
		method();
		randomNum();
		saveTwo(12.3456, 2, true);
	}

	/*
	 * 练习。给定一个小数。 保留该两位小数。
	 */
	public static void saveTwo(double d, int scale, boolean isRound) {

		double base = Math.pow(10, scale);

		double num = isRound ? Math.round(d * base) / base : ((int) (d * base))
				/ base;

		System.out.println("num=" + num);

		/*
		 * double d1 = d*100; sop("d1="+d1); d1 = d1+0.5; double d2 = (int)d1;
		 * sop("d2="+d2); double d3 = d2/100; sop("d3="+d3);
		 */
	}

	/*
	 * math方法演示
	 */
	public static void method() {
		double d = Math.ceil(-16.23);// 返回大于指定数据的最小整数
		System.out.println("Math.ceil:" + d);
		double d1 = Math.floor(-12.99);// 返回小于给定数据的最大整数
		System.out.println("Math.floor:" + d1);
		long l = Math.round(-12.46);// 四舍五入
		System.out.println("Math.round:" + l);
		double d2 = Math.pow(2, 3);// 返回第一个参数的第二个参数次幂的值。
		System.out.println("Math.pow:" + d2);
	}

	/*
	 * 取随机数
	 */
	public static void randomNum() {
		Random r = new Random();// 可以用math中的random方法,也可以使用Random类
		for (int x = 0; x < 10; x++) {
			// double d = Math.random();
			int d = r.nextInt(10) + 1;
			System.out.println(d);
		}
	}
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值