黑马程序员_Java 其它对象(System Runtime Date Calendar Math)

 

System

    System类代表系统,系统级的很多属性和控制方法都放置在该类的内部。该类位于java.lang包。由于该类的构造方法是private的,所以无法创建该类的对象,也就是无法实例化该类。其内部的成员变量和成员方法都是static的,所以也可以很方便的进行调用。

 

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

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

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

 

    描述系统一些信息。

 

    获取系统属性信息:properties.

import java.util.*;
class SystemDemo 
{
	public static void main(String[] args) 
	{

		Properties prop = System.getProperties();
		//因为Properties是Hashtable的子类,也就是Map集合的一个子类对象。
		//那么可以通过map的方法取出该集合中的元素。
		//该集合中存储的都是字符串,没有泛型定义。


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

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

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


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

 

Runtime对象:

    运行时刻是指一个程序在运行(或者在被执行)的状态。也就是说,当你打开一个程序使它在电脑上运行的时候,那个程序就是处于运行时刻。在一些编程语言中,把某些可以重用的程序或者实例打包或者重建成为“运行库"。这些实例可以在它们运行的时候被连接或者被任何程序调用。

    该类中并没有提供构造函数。

    说明不可以new对象。那么会直接想到该类中的方法都是静态的。

    发现该类中还有非静态方法。

    说明该类肯定会提供一个方法,获取本类对象,而且该方法是静态的并且返回值类型是本类类型。

 

    由这个特点可以看出该类使用了单列设计模式完成。

 

    该方法是static Runtime getRuntime()

import java.util.*;
class RuntimeDemo 
{
	public static void main(String[] args) throws Exception
	{
		Runtime r = Runtime.getRuntime();
		Process p = r.exec("notepad.exe SystemDemo.java");
		Thread.sleep(4000);
		p.destroy();
	}
}

 

Date 

    Date 类实际上只是一个包裹类, 它包含的是一个长整型数据, 表示的是从GMT(格林尼治标准时间)1970年, 1 月 1日00:00:00这一刻之前或者是之后经历的毫秒数.在JDK1.0中,Date类是唯一的一个代表时间的类,但是由于Date类不便于实现国际化,所以从JDK1.1版本开始,推荐使用Calendar类进行时间和日期处理。

import java.util.*;
import java.text.*;
class DateDemo 
{
	public static void main(String[] args) 
	{
		Date d = new Date();
		System.out.println(d);//打印的时间很难看懂,希望有些格式。
		
		//将模式封装到SimpleDateFormat对象中。
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日E hh:mm:ss");
		//调用format方法让模式格式化指定Date对象。
		String time = sdf.format(d);
		System.out.println("time"+time);
	}
}

 

Calendar

    从JDK1.1版本开始,在处理日期和时间时,系统推荐使用Calendar类进行实现。在设计上,Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一些,下面就介绍一下Calendar类的使用。

Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getInstance方法创建即可。

1、使用Calendar类代表当前时间

                   Calendar c = Calendar.getInstance();

由于Calendar类是抽象类,且Calendar类的构造方法是protected的,所以无法使用Calendar类的构造方法来创建对象,API中提供了getInstance方法用来创建对象。

使用该方法获得的Calendar对象就代表当前的系统时间,由于Calendar类toString实现的没有Date类那么直观,所以直接输出Calendar类的对象意义不大。

2、使用Calendar类代表指定的时间

                   Calendar c1 = Calendar.getInstance();

                   c1.set(2009, 3 - 1, 9);

使用Calendar类代表特定的时间,需要首先创建一个Calendar的对象,然后再设定该对象中的年月日参数来完成。

set方法的声明为:

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

以上示例代码设置的时间为2009年3月9日,其参数的结构和Date类不一样。Calendar类中年份的数值直接书写,月份的值为实际的月份值减1,日期的值就是实际的日期值。

如果只设定某个字段,例如日期的值,则可以使用如下set方法:

         public void set(int field,int value)

在该方法中,参数field代表要设置的字段的类型,常见类型如下:

         Calendar.YEAR——年份

         Calendar.MONTH——月份

         Calendar.DATE——日期

         Calendar.DAY_OF_MONTH——日期,和上面的字段完全相同

         Calendar.HOUR——12小时制的小时数

         Calendar.HOUR_OF_DAY——24小时制的小时数

         Calendar.MINUTE——分钟

         Calendar.SECOND——秒

         Calendar.DAY_OF_WEEK——星期几

后续的参数value代表,设置成的值。例如:

         c1.set(Calendar.DATE,10);

该代码的作用是将c1对象代表的时间中日期设置为10号,其它所有的数值会被重新计算,例如星期几以及对应的相对时间数值等。

3、获得Calendar类中的信息

                   Calendar c2 = Calendar.getInstance();

                   //年份

                   int year = c2.get(Calendar.YEAR);

                   //月份

                   int month = c2.get(Calendar.MONTH) + 1;

                   //日期

                   int date = c2.get(Calendar.DATE);

                   //小时

                   int hour = c2.get(Calendar.HOUR_OF_DAY);

                   //分钟

                   int minute = c2.get(Calendar.MINUTE);

                   //秒

                   int second = c2.get(Calendar.SECOND);

                   //星期几

                   int day = c2.get(Calendar.DAY_OF_WEEK);

                   System.out.println("年份:" + year);

                   System.out.println("月份:" + month);

                   System.out.println("日期:" + date);

                   System.out.println("小时:" + hour);

                   System.out.println("分钟:" + minute);

                   System.out.println("秒:" + second);

                   System.out.println("星期:" + day);

使用Calendar类中的get方法可以获得Calendar对象中对应的信息,get方法的声明如下:

         public int get(int field)

其中参数field代表需要获得的字段的值,字段说明和上面的set方法保持一致。需要说明的是,获得的月份为实际的月份值减1,获得的星期的值和Date类不一样。在Calendar类中,周日是1,周一是2,周二是3,依次类推。

4、其它方法说明

其实Calendar类中还提供了很多其它有用的方法,下面简单的介绍几个常见方法的使用。

a、add方法

                   public abstract void add(int field,int amount)

该方法的作用是在Calendar对象中的某个字段上增加或减少一定的数值,增加是amount的值为正,减少时amount的值为负。

         例如在计算一下当前时间100天以后的日期,代码如下:

                   Calendar c3 = Calendar.getInstance();

                   c3.add(Calendar.DATE, 100);

                   int year1 = c3.get(Calendar.YEAR);

                   //月份

                   int month1 = c3.get(Calendar.MONTH) + 1;

                   //日期

                   int date1 = c3.get(Calendar.DATE);

                   System.out.println(year1 + "年" + month1 + "月" + date1 + "日");

这里add方法是指在c3对象的Calendar.DATE,也就是日期字段上增加100,类内部会重新计算该日期对象中其它各字段的值,从而获得100天以后的日期,例如程序的输出结果可能为:

                   2009年6月17日

b、after方法

                   public boolean after(Object when)

该方法的作用是判断当前日期对象是否在when对象的后面,如果在when对象的后面则返回true,否则返回false。例如:

                   Calendar c4 = Calendar.getInstance();

                   c4.set(2009, 10 - 1, 10);

                   Calendar c5 = Calendar.getInstance();

                   c5.set(2010, 10 - 1, 10);

                   boolean b = c5.after(c4);

                   System.out.println(b);

在该示例代码中对象c4代表的时间是2009年10月10号,对象c5代表的时间是2010年10月10号,则对象c5代表的日期在c4代表的日期之后,所以after方法的返回值是true。

另外一个类似的方法是before,该方法是判断当前日期对象是否位于另外一个日期对象之前。

                   c、getTime方法

                                     public final Date getTime()

该方法的作用是将Calendar类型的对象转换为对应的Date类对象,两者代表相同的时间点。

类似的方法是setTime,该方法的作用是将Date对象转换为对应的Calendar对象,该方法的声明如下:

         public final void setTime(Date date)

转换的示例代码如下:

                  Date d = new Date();

                   Calendar c6 = Calendar.getInstance();

                   //Calendar类型的对象转换为Date对象

                   Date d1 = c6.getTime();

                   //Date类型的对象转换为Calendar对象

                   Calendar c7 = Calendar.getInstance();

                   c7.setTime(d);

         5、Calendar对象和相对时间之间的互转

                            Calendar c8 = Calendar.getInstance();

                            long t = 1252785271098L;

                            //将Calendar对象转换为相对时间

                            long t1 = c8.getTimeInMillis();

                            //将相对时间转换为Calendar对象

                            Calendar c9 = Calendar.getInstance();

                            c9.setTimeInMillis(t1);

在转换时,使用Calendar类中的getTimeInMillis方法可以将Calendar对象转换为相对时间。在将相对时间转换为Calendar对象时,首先创建一个Calendar对象,然后再使用Calendar类的setTimeInMillis方法设置时间即可。


 

import java.util.*;
import java.text.*;
class  CalendarDemo
{
	public static void main(String[] args) 
	{
		Calendar c = Calendar.getInstance();
		sop(c.get(Calendar.YEAR)+"年"+(c.get(Calendar.MONTH)+1)+"月"+c.get(Calendar.DAY_OF_MONTH)+"日");
		/*
		Date d = new Date();

		SimpleDateFormat sdf = new SimpleDateFormat("yyyy");

		String year = sdf.format(d);

		System.out.println(year);
		*/
	}

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

import java.util.*;
import java.text.*;
class  CalendarDemo2 
{
	public static void main(String[] args) 
	{
		Calendar c = Calendar.getInstance();
		//c.set(2012,2,23);

		c.add(Calendar.YEAR,4);
		printCalendar(c);
	}

	public static void printCalendar(Calendar c) 
	{
		sop(c.get(Calendar.YEAR)+"年"+(c.get(Calendar.MONTH)+1)+"月"+c.get(Calendar.DAY_OF_MONTH)+"日");
	}

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

练习:

/*
练习:
1.获取任意年的二月有多少天。
	思路:根据指定年设置一个时间:c.set(year,2,1)//某一年的3月1日。
		  c.add(Calendar.DAY_OF_MONTH,-1);//3月1日,往前推一天,就是2月最后一天。

2.获取昨天的现在这个时刻。
	c.add(Calendar.DAY_OF_MONTH,-1);
*/


import java.util.*;
import java.text.*;
class  CalendarTest
{
	public static void main(String[] args) 
	{
		Calendar c = Calendar.getInstance();
		c.set(2012,1,1);
		int x = method(c);
		sop(x);

		Calendar c1 = Calendar.getInstance();
		method2(c1);
		sop(c1.get(Calendar.YEAR)+"年"+(c1.get(Calendar.MONTH)+1)+"月"+c1.get(Calendar.DAY_OF_MONTH)+"日");
	}

	public static int method(Calendar c)
	{
		c.set(c.get(Calendar.YEAR),2,1);
	    c.add(Calendar.DAY_OF_MONTH,-1);
		int a = c.get(Calendar.DAY_OF_MONTH);
		return a;
	}

	public static Calendar method2(Calendar c)
	{
		c.add(Calendar.DAY_OF_MONTH,-1);
		return c;
	}

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

}

 

Math

    数学类包含了许多数学函数,如sin、cos、exp、abs等。Math类是一个工具类,它在解决与数学有关的一些问题是有着非常重要的作用。

    这个类有两个静态属性:E和PI。E代表数学中的e 2.7182818,而PI代表派pi 3.1415926。

    引用时,用法如:Math.E 和 Math.Pi
    这个类的方法有:

    public static int abs( int a )

    public static long abs( long a )

    public static float abs( float a )

    public static double abs( double a )

    abs方法用来求绝对值。

    public static native double acos( double a )

    acos求反余弦函数。

    public static native double asin( double a )

    asin求反正弦函数。

    public static native double atan( double a )

    atan求反正切函数。

    public static native double ceil( double a )

    ceil返回 最小的 大于a的整数。

    public static native double cos( double a )

    cos求余弦函数。

    public static native double exp( double a )

    exp求e的a次幂。

    public static native double floor( double a )

    floor返回 最大的 小于a的整数。

    public static native double log( double a )

    log返回lna。

    public static native double pow( double a, double b )

    pow求a的b次幂。

    public static native double sin( double a )

    sin求正弦函数。

    public static native double sqrt( double a )

    sqrt求a的开平方。

    public static native double tan( double a )

    tan求正切函数。

    public static synchronized double random()

    返回0到1之间的随机数。

    使用这些方法时,用法为Math.***** (*****为方法名)。用法如:

    int a=Math.abs(124);
    int b=Math.floor(-5.2);
    double s=Math.sqrt(7);

import java.util.*;
class MathDemo 
{
	public static void main(String[] args) 
	{
		show();
		Random r = new Random();
		for(int x=0;x<10;x++)
		{
			//double d = (int)(Math.random()*10+1);
			int d = r.nextInt(10)+1;
			sop(d);
		}
	}

	public static void show()
	{
		double d = Math.ceil(12.34);//ceil返回大于指定数据的最小整数。
		double d1 = Math.floor(12.34);//floor返回小于指定数据的最大整数。

		long l = Math.round(12.34);//四舍五入。

		double d2 =Math.pow(2,3);//2是底数,3是指数。
		
		sop("d="+d);
		sop("d1="+d1);
		sop("l="+l);
		sop("d2="+d2);
	}

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


 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值