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);
}
}