黑马程序员—其他类

----------------------   JavaEE+Android、Java培训、期待与您交流! ----------------------


System类

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

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> 可以设置特有的系统属性信息

	<span style="font-size:10px;">	......
		String s = getProperty("os.name");
		System.out.println("os.name|:" + s);
		System.setProperty("name----:","xixi");
		System.out.println("-------------------------");
		String v = System.getProperty("myName");
		System.out.println("v = " + v);
		Properties pop = System.getProperties();
		for(Object obj : pop.keySet())
		{
			String value = (String)pop.get(obj);
			out.println(obj + ":" + value);
		}
		......</span>


Runtime类

每个java应用程序都有一个Runtime类实例,使用应用程序能与其中运行的环境相连接,应用程序不能创建自己的Runtime类的实例,是由系统底层自己创建的。该类并未提供构造函数:说明不可以new对象,那么会直接想到该类中的方法都是静态的。查阅API文档发现,该类中还有非静态方法,说明该类中肯定会提供方法获取该类对象,并且该方法是静态的,且返回值类型是该类类型。可以看出该类使用了单例设计模式。

方法:

1、获取本类对象:

       static Runtime getRuntime();

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

      Process exec(String command);

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

      void destroy();


		......
		Runtime r = Runtime.getRuntime();
		Process p = r.exec("winmine.exe");
		//System.out.println(r);
		Thread.sleep(6000);
		p.destroy();
		......


时间类

java中默认的格式如:Sun Jan 16 10:20:48 CST 2011

这样的格式不一定满足每个人的需求,那么就需要自定义格式,需要格式化模式。具体步骤:

1)创建Date对象
2)将模式封装到SimpleDateFormat对象中
3)调用format方法让模式格式化指定Date对象

		......
		Date d = new Date();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 E hh:mm:ss");
		String time = sdf.format(d);
		System.out.println("Time =" + time);
		......

Calendar类

Calendar是一个抽象类,它为特定瞬间与一组诸如YEAR、MONTH、DAY_OF_MONTH等日历字段之间的转换提供了一些方法。

Calendar可以对年月日等时间进行获取。并提供了相应的子段值。

方法:

1、基本获取时间:

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

2、设置时间:

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

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

3)将给定日历字段对应的时间值设置为给定值:void set(int field,int value);

设置日历字段 YEAR、MONTH和DAY_OF_MONTH的值: void set(int year,int month,int date);


练习

1、获取任意年的二月有多少天:
2、获取前一天的现在这个时刻
3、计算有效上课天数,每周六日不上课,计算任意年从九月到十月的有效上课天数

<span style="font-family:Arial;font-size:10px;">import java.util.*;

class CalendarTest 
{
	public static void sop(Object obj)
	{
		System.out.println(obj);
	}
	public static void main(String[] args) 
	{
		//测试1
		int n = getFEB(2012);
		sop("2012年2月的天数:" + n);
		//测试2
		String s = getTheTime();
		sop("昨天的现在这个时刻是:" + s);
		sop("-----------------");
		//测试3
		int m = getValDay(2013,1,3);
		sop("有效上课天数:" + m);

	}
	//测试1:创建获取二月的方法
	public static int getFEB(int year)
	{
		Calendar c = Calendar.getInstance();
		//设置任意年的时间为3月1号
		c.set(year,2,1);
		//获取设置后的3月1日,并减去1天,即为二月最后一天
		c.add(Calendar.DAY_OF_MONTH,-1);
		//获取最终设置的日期,即为获取到的二月的天数
		int n = c.get(Calendar.DAY_OF_MONTH);
		return n;
	}

	//测试2:获取前一天的现在这个时刻
	public static String getTheTime()
	{
		//获取时间信息
		Calendar c = Calendar.getInstance();
		//将日期设置为昨天
		c.add(Calendar.DAY_OF_MONTH,-1);
		//获取昨天的现在这个时刻
		int n = c.get(Calendar.DAY_OF_MONTH);
		return n + "日 " + c.get(Calendar.HOUR_OF_DAY) + ":" + c.get(Calendar.MINUTE) + ":" + c.get(Calendar.SECOND);
	}

	//测试3:计算有效上课天数
	public static int getValDay(int year,int startMON,int endMON)
	{
		//获取时间信息
		Calendar c = Calendar.getInstance();
		//调用获取天数函数
		int day = getDay(c,year,startMON,endMON);
		sop("总天数:" + day);//测试获取的天数
		//初始化星期
		int week = 0;
		//定义计数器
		int count = 0;
		//遍历每天一天,判断是否为周六日,f否的话计数器自增
		for(int i=0;i<day;i++)
		{
			//必须要先将天数加1再判断,否则到week为6的时候会一直continue,
			//而且此处也可以避免下面的week是以星期日为第一天的问题
			c.add(Calendar.DAY_OF_MONTH,1);
			//获取当前天数的星期
			week = c.get(Calendar.DAY_OF_WEEK);
			sop("星期:" + week);
			if (week==6 || week==7)
				continue;
			count++;
			sop("有效天数:" + count);
		}
		return count;
	}
	//获取给定月份的天数
	public static int getDay(Calendar c,int year,int startMON,int endMON)
	{
		//定义天数和变量
		int sum = 0;
		//遍历每个月的天数
		for(int i=0;i<=endMON-startMON;i++)
		{
			//设定第二个月的第一天,循环一次后设定下个月为处世月,因为0为一月份所以startMON要加1
			c.set(year,startMON+i,1);
			//获取前一个月的天数
			c.add(Calendar.DAY_OF_MONTH,-1);
			//将每个月的天数累加
			sum += c.get(Calendar.DAY_OF_MONTH);
			//循环后,要相应加上i个月
			c.add(Calendar.MONTH,i+1);
		}
		return sum;
	}
}
</span>


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()  返回正号的double值,是一个 0<=X<1.0 的随机数X


Random类

这是一个java.util中的一个单独的类,获取随机数。与Math中的random是一样的,不过这个类有自身的方法,可以将相应的随机数强转为指定基本数据类型。

<span style="font-size:10px;">import java.util.*;
class  MathDemo
{
	public static void sop(Object obj)
	{
		System.out.println(obj);
	}
	public static void main(String[] args) 
	{
		double d = 0;
		int n = 0;
		//Math类测试
		sop("-----------Math类测试-------------");
		d = Math.ceil(15.66);
		sop("ceil(15.66):" + d);
		d = Math.floor(15.66);
		sop("floor(15.66):" + d);
		d = Math.pow(2,3);
		sop("pow(2,3):2e3 = " + d);
		d = Math.round(15.66);
		sop("round(15.66):" + d);
		d = Math.round(15.43);
		sop("round(15.43):" + d);

		for(int i=0;i<5;i++)
		{
			d = Math.random();
			n = (int)(Math.random()*10+1);
			sop("rondam():" + d + ",(int):" + n);
		}
		sop("-----------Random类测试-------------");
		Random r = new Random();

		for(int i=0;i<5;i++)
		{
			n = r.nextInt(10);

			sop("Rondam():" + n);
		}
	}
}
</span>

练习

将某一小数保留为指定位数的小数

class MathDemo
{
	public static void main(String[] args) 
	{
		double d = round(15.6745,1);
		System.out.println("d = " + d);
	}
	//保留指定位数为n的小数
	public static double round(double d,int n)
	{
		//将给定数扩大n倍后四舍五入,再缩小相应的倍数
		return Math.round(d*(Math.pow(10,n)))/(Math.pow(10,n));	
	}
}





----------------------   JavaEE+Android、Java培训、期待与您交流! ----------------------

详细请查看: http://edu.csdn.net

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值