【java中常用工具类的总结】System类,Runtime类,Date类,Calendar类,Math类

<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size:18px;">【基本定义】</span></span>
<span style="font-size:18px;">System:类中方法或者属性都是静态的,不能被实例化
out:标准输出,默认是控制台
in:标准输入,默认是键盘

【重点】描述系统的加载信息:
1.获取系统属性信息的方法 Properties getProperties();
2.如何在系统中定义一些特有的信息呢?
3.获取指定的信息
4.怎样在jvm使用时,加载一些自定义的信息

【分析】
一、Properties(属性):
	1.其实就是Hashtable的子类,也就是map集合的子类,所以不涉及到泛型
	2.可以通过map集合的方法取出该集合中的元素
	3.改集合中存储的全部是字符串
二、setProperty(String key, String value):
	1.设定在系统加载时,自定义的键值和内容
三、String getProperty(key);
	1.取得指定的键对应的value内容
四、用java -D(wangke)=(nanren) SystemDemo1 即可
	其中wangke是自定义的key,nanren是自定义的value  SystemDemo1是可执行的.class文件名称


*/
import java.util.*;
class SystemDemo1 
{
	public static void main(String[] args) 
	{
		
		//【【1】得到系统在运行时加载的具体文件内容】
		System.setProperty("---keyneirong----","---valueneirong---");
		Properties proper=System.getProperties();
		//这其实也是遍历,相当于迭代一样的
		for (Object obj:proper.keySet())
		{
			String value=(String)proper.get(obj);
			System.out.println(obj+":::"+value);
		}

		/*Set set=proper.keySet();
		Iterator i=set.iterator();
		while (i.hasNext())
		{
			String key=(String)i.next();
			String value=(String)proper.get(key);
			System.out.println(key+":::"+value);
		}*/
		
		//【【2】如何在系统中定义一些特有的信息呢?】
		//System.setProperty("keyneirong","valueneirong");

		//【【3】取得指定的键对应的value内容】
		String value=System.getProperty("os.name"); //例如这是获取系统的版本信息Windows XP
		System.out.println(value);

		//【4】怎样在jvm使用时,加载一些自定义的信息

		//运行时输入:java -D(wangke)=(nanren) SystemDemo1 即可OK
	}
}
</span></span>
<span style="font-size:18px;"><span style="font-size:18px;">/*
Runtime:
每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。
可以通过 getRuntime 方法获取当前运行时。 
应用程序不能创建自己的 Runtime 类实例

【重点】
1.该类并没有提供构造函数,所以不能创建实例(不能new)
2.可能该类中的方法全是静态的,直接调用即可!
3.但是发现有非静态的方法,那就说明该类中肯定提供了一个能获取本类的方法
4.发现得知:只能通过getRuntime方法来获取到该Runtime
5.掌握常用的一个静态方法static exec("");""里为需要执行的内容,该方法返回值是一个进程process
【特点】
该类使用了单例的设计模式来完成,确保对象的唯一性
能获取该类对象的方法是:
static Runtime getRuntime();
*/

class RuntimeDemo2 
{
	public static void main(String[] args) throws Exception
	{
		//演示获取本类对象的静态方法
		Runtime r=Runtime.getRuntime();
		
		//打开了一个系统中的扫雷游戏
		//【注意】该静态方法可能去执行不存在的文件,这时候就会抛出一个IO异常,所以需要声明
		//r.exec("winmine.exe");

		//返回的是一个进程,可以用进程的方法去操作它,这里是打开一个记事本SystemDemo1.java文件
		Process p=r.exec("notepad.exe SystemDemo1.java");

		//等待6s后干掉此进程
		Thread.sleep(6000);
		//杀死进程
		p.destroy();
	}
}
</span></span>

<span style="font-size:18px;"><span style="font-size:18px;">/*
Date类:
在java.util.*中,属于工具类
该类主要是封装了时间的一些内容在里面
1.该类可以实例化,即是获得当前系统的时间
2.按照自定义的时间格式输出:要用到SimpleDateFormat类(自定义时间的规范化)在java.text.*;
3.以毫秒数得到当前的时间long System.currentTimeMillis(),再用date的带参数构造方式创建

*/
import java.text.*;
import java.util.*;
class DateDemo3 
{
	public static void main(String[] args) 
	{
		//获得当前系统的时间
		Date d=new Date();
		
		//获取的结果:Mon Mar 23 18:34:42 CST 2015
		System.out.println(d);

		//设定自定义的时间格式
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd hh:mm:ss E");

		//用SimpleDateFormat的对象调用format方法,返回一个字符串
		String str=sdf.format(d);
		System.out.println(str);
		
		//用System类也能获取到当前的时间
		long l=System.currentTimeMillis();
		Date d1=new Date(l);
		System.out.println(d1);

	}
}
</span></span>

<span style="font-size:18px;"><span style="font-size:18px;">/*
Calendar:
日历类:
【重点】
1.
Calendar中月份和星期的获取,
应该注意角标,月份0代表的是一月……
而星期中的获取,1代表的是星期天

2.set方法:set(int field, int value)
set是给将给定的日历字段设置为给定值。

3.add方法:add(int field, int amount) (时间的偏移量)
add是根据日历的规则,为给定的日历字段添加或减去指定的时间量。
*/

import java.util.*;
class CalendarDemo1
{
	public static void main(String[] args) 
	{
		//【1】自定义获取年月日,星期的单例类
		MyCalendar m=MyCalendar.getInstance();
		sop(m.getYear());
		sop(m.getMonth());
		sop(m.getDay());
		sop(m.getWeek());

		//因为构造方法被私有化了,必须通过自己的静态方法才能得到自己的实例对象
		/*Calendar c=Calendar.getInstance();

		//获取年
		int year=c.get(Calendar.YEAR);

		//因为这里的日历类中的月份,0角标为其实是一月,
		//即是得到月份是当前系统月份的前一个月,所以需要加1才行
		int month=c.get(Calendar.MONTH);
		
		//获取天
		int day=c.get(Calendar.DAY_OF_MONTH);

		//获取星期
		int week=c.get(Calendar.DAY_OF_WEEK);

		//分别输出即可
		sop(year+"年");
		sop(month+"月");
		sop(day+"日");
		sop(week+"日"); //这里获取到是2,星期中排序是星期天……星期六,所以是星期一
		*/


		//【2】set方法
		Calendar cd=Calendar.getInstance();
		cd.set(Calendar.YEAR,2020);
		sop(cd.get(Calendar.YEAR));  //2020

		cd.set(2020,3,30); //【注意】这里设置的3指的是四月份才对
		sop(cd.get(Calendar.MONTH));

		//【3】add方法:时间的偏移量
		Calendar cd1=Calendar.getInstance();
		int year=cd1.get(Calendar.YEAR);
		sop(year); //2015

		cd1.add(Calendar.YEAR,4);
		int yearNew=cd1.get(Calendar.YEAR);
		sop(yearNew);  //2019

		cd1.add(Calendar.YEAR,-4);
		int yearNow=cd1.get(Calendar.YEAR);
		sop(yearNow);  //2015
		
	}

	public static void sop(Object obj)
	{
		System.out.println(obj);
	}
}

//【从上面可以得出:获取的月和星期都不是自己想要的结果:所以可以自己定义一个查表法】
//所以下面是自己写的一个比较完美的单例模式获取时间的自定义类
class MyCalendar
{
	private MyCalendar()
	{
	}
	
	private static MyCalendar mc=null;
	//单例模式加锁判断方法
	public static MyCalendar getInstance()
	{
		synchronized (MyCalendar.class)
		{	if (mc==null)
			{
				if (mc==null)
				{
					mc=new MyCalendar();
				}
			}
			return mc;
		}
	}
	
	private String[] month={"","一月","二月","三月","四月",
							"五月","六月","七月","八月",
							"九月","十月","十一月","十二月"};
	private String[] week={"","星期日","星期一","星期二",
					"星期三","星期四","星期五","星期六"};

	private Calendar c=Calendar.getInstance();

	public String getYear()
	{
		//获取年
		return c.get(Calendar.YEAR)+"年";
	}

	public String getMonth()
	{
		//获取月
		int index=c.get(Calendar.MONTH);
		//return month[index+1];这是获取查表法的方法
		return index+1+"月";
	}

	public String getDay()
	{
		//获取日
		return c.get(Calendar.DAY_OF_MONTH)+"日";
	}
	
	public String getWeek()
	{
		//获取星期
		int index = c.get(Calendar.DAY_OF_WEEK);
		return week[index];
	}
}
</span></span>
<span style="font-size:18px;"><span style="font-size:18px;">/*
练习
1.获取任意年份二月份的天数
2.获取昨天的现在这个时刻
【分析】
1.我们知道任意年份的二月天数都不一样,所以最好是set(year,2,1);
其实这代表的是某年的3月1日,所以要得到二月的天数,只需要把1 偏移-1位就可以得到了
其实就是set方法和add方法的应用!
2.
*/
import java.util.*;
class CalendarDemo2 
{
	public static void main(String[] args) 
	{	
		//【1】调用获取2月份天数的方法
		getFebDay(2000);
		//【2】调用昨天这个时刻的方法
		getYesterday();
	}
	
	//获取某年的二月份天数的方法
	public static void getFebDay(int year)
	{
		Calendar c=Calendar.getInstance();
		c.set(year,2,1);
		c.add(Calendar.DAY_OF_MONTH,-1);
		int day=c.get(Calendar.DAY_OF_MONTH);
		sop(year+"年的2月份共有"+day+"天");
	}

	public static void sop(Object obj)
	{
		System.out.println(obj);
	}
	
	//获取昨天这个时刻的方法
	public static void getYesterday()
	{
		Calendar c=Calendar.getInstance();
		c.add(Calendar.DAY_OF_MONTH,-1);
		int year=c.get(Calendar.YEAR);
		int month=c.get(Calendar.MONTH)+1;
		int day=c.get(Calendar.DAY_OF_MONTH);
		int hour=c.get(Calendar.HOUR_OF_DAY);
		int minute=c.get(Calendar.MINUTE);
		int second=c.get(Calendar.SECOND);
		sop("昨天的这个时刻是:"+year+"年"+month+"月"+day+"日"+hour+":"+minute+":"+second);
	}
}
</span></span>

<span style="font-size:18px;"><span style="font-size:18px;">/*
在java.long.*;
Math 类包含用于执行基本数学运算的方法
其中有很多方法,但是比较常用的是一下几种方法:
【重点】
1.static double E (常量) 含义:e(即自然对数的底数)的 double 值
2.static double PI (常量) 其实就是π
3.{double,float,int,long} abs(4中类型 d); 返回d的绝对值,很简单
[演示以下]【重点】
4.static double ceil(double a) :返回大于a值的最大整数
5.static double floor(double a) : 返回小于a值的最大整数
6.static long round(double a) :把a四舍五入,返回为long
7.static double pow(double a, double b) :a的b次方,例如:pow(2,3);结果是8 
8.static double random() :随机数,默认返回的是{0<= 随机数 <1}
	随机数的产生在java.util.*包中有一个直接可以用的类,那就是
	Random类,其中有很多方法,不再一一介绍,知道几个就行;
	nextInt(int i):返回0(包括)到i(不包括)值的随机整数;
	以此类推:还有nextDouble()和nextFloat()等等……
9.有一个小练习:给定一个小数,保留该小数的后两位!
*/
import java.util.*;
class MathDemo6 
{
	public static void main(String[] args) 
	{
		double d=2342.676;
		show(d);//演示

		showTwo(d);//练习
	}

	public static void show(double d)
	{	
		
		//返回大于double类型值的最大整数
		sop(Math.ceil(d));  //2343.0
		sop(Math.ceil(-d)); //-2342.0

		//返回小于double类型值的最大整数
		sop(Math.floor(d));  //2342.0
		sop(Math.floor(-d)); //-2343.0
		
		//把a四舍五入,返回为long
		sop(Math.round(d));  //2343
		sop(Math.round(-d)); //-2343
		sop(Math.round(23.29));//23
		sop(Math.round(23.59));//24

		//【注意】随机数:默认返回的是{0<= 随机数 <1}
		sop(Math.random());  //随机产生的,我这会儿是:0.33517799412879334
		
		//例如以下是返回十组0到1(其实就是包含:有头无尾)的随机数字
		for (int i=0; i<10;i++ )
		{
			sop(Math.random());
		}

		//那怎样返回1到10的随机数呢,需要有头有尾,且是int类型!
		for (int i=0; i<10;i++ )
		{
			sop((int)(Math.random()*10)+1); //加1主要是为了包含有尾
		}

		//java.uitl.*中的Random随机数类,可以直接操作的,有很多方法,不用强制转换
		

		//[重点]用Random类返回十组0到1(其实就是包含:有头无尾)的随机数字
		Random r=new Random();
		for (int i=0;i<10 ;i++ )
		{
			sop(r.nextInt(10));//要包含10就加一就OK了,这里是有头无尾式
		}

	}

	public static void sop(Object obj)
	{
		System.out.println(obj);
	}

	/*9.有一个小练习:给定一个小数,保留该小数的后两位!
	【基本思路】:先把这个数字*100,然后在四舍五入这个数字强制返回一个int类型,最后再
	把这个数字除以100.00(主要是为了保留后两位)返回为double(内部会自动提升)类型即可
	*/

	public static void showTwo(double d)
	{
		double d1=d*100;
		int d2=(int)Math.round(d1);
		double a=d2/100.00;
		sop(a); //2342.68
	}
}
</span></span>

【总结】

以上这些都是比较常用的类,其中有重点的方法和注意的情况,我都写在内容中,仅供大家参考学习……个人觉得最重要的是能通过运用这些工具类,能够熟悉其java中API帮助文档的使用!


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值