>>System
eg:获取系统信息方法staticProperties getProperties()
import java.util.*;
class SystemDemo
{
publicstatic void main(String[] args)
{
Propertiesprop = System.getProperties();
SetkeySet = prop.keySet();
Iteratorit = keySet.iterator();
while(it.hasNext())
{ //可以看出是成对存在的
Stringkey = (String)it.next();
Stringvalue = (String)prop.get(key);
System.out.println(key+"="+value);
}
}
}
输出:F:\java\workspace>java SystemDemo
java.runtime.name=Java(TM) SE RuntimeEnvironment
sun.boot.library.path=D:\ProgramFiles\Java\jdk1.6.0_12\jre\bin
java.vm.version=11.2-b01
java.vm.vendor=Sun Microsystems Inc.
java.vendor.url=http://java.sun.com/
path.separator=;
java.vm.name=Java HotSpot(TM) Client VM
file.encoding.pkg=sun.io
sun.java.launcher=SUN_STANDARD
user.country=CN
sun.os.patch.level=
java.vm.specification.name=Java VirtualMachine Specification
user.dir=F:\java\workspace
…………………………………………
也可以只获取其中的一项,有方法:
static String getProperty(String key) //获取指定键指示的系统属性。
eg:………………
String name = System.getPorperty(“os name”);
System.out.println(name);
………………
输出:Windows Vista
在jvm启动的时候加载自定义信息:
如果上述例子改成:
eg:………………
String name = System.getPorperty(“myKey”);
System.out.println(name);
………………
输出:null
在命令提示符中直接输入java,可以找到这样的命令:
-D<name>=<value>//seta system property
于是,输入:F:\java\workspace>java -DmyKey=myValue SystemDemo
结果:myValue
如果生成批处理文件,我们可以加载更多的信息
>>在java.lang中有Runtime类,没有构造函数,每个Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。可以通过 getRuntime 方法获取当前运行时。应用程序不能创建自己的 Runtime 类实例。
没有构造函数,不能实例化,但是有非静态方法,这就意味着,该类一定有静态方法来调用这些非静态方法:
staticRuntime getRuntime()
返回与当前 Java 应用程序相关的运行时对象。
其实Runtime是由单例设计模式设计出来的。保证一个程序运行时在内存中的唯一性。
eg:运行一个程序以及使用一个程序加载文件
import java.io.*;
class RunTimeDemo
{
publicstatic void main(String[] args)
{
Runtimerun = Runtime.getRuntime();
try
{
//如果找不到文件便会报异常
//run.exec("winmine.exe");//启动扫雷
//可以通过指定应用程序,去解析指定的文件。
run.exec("notepad.exe,SystemDemo.java");
}
catch(IOExceptione)//异常是java.io中的
{
System.out.println("notfound!");
}
}
}
类 Process中的方法:abstract void destroy()//杀掉子进程。
eg:………………
Process p =run.exec("notepad.exe SystemDemo.java");
Thread.sleep(2000);//停两秒,注意,这个要抛异常
p.destroy();
………………
注意,destroy方法只能关闭exec开启的进程,windows中的不能关
>> java.lang包中的Math类
public finalclass Mathextends ObjectMath 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。
方法:
static double ceil(double a)//返回大于等于a的最小整数
static double floor(double a)//返回小于等于a的最大整数
long round(double a) :四舍五入。
pow(a,b):a的b次幂。
random():伪随机数,返回0到1之间的数不包括1,
|--Random类中方法
double nextDouble() 返回下一个伪随机数,它是取自此随机数生成器序列的、在 0.0 和 1.0 之间均匀分布的 double 值。
float nextFloat() 返回下一个伪随机数,它是取自此随机数生成器序列的、在 0.0 和 1.0 之间均匀分布的 float 值。
int nextInt() 返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。
eg:import java.util.*;
class MathDemo
{
publicstatic void main(String[] args)
{
doubled1 = Math.ceil(12.45);
doubled2 = Math.floor(12.45);
System.out.println("d1="+d1);//d1=13.0
System.out.println("d2="+d2);//d2=12.0
longl = Math.round(12.54);
System.out.println("l="+l);
doubled = Math.pow(3,2);
System.out.println("d="+d);
//生成随机数之一
System.out.println("----------");
for(intx=0; x<10; x++)
{
inti = (int)(Math.random()*10+1);//伪随机数。1-10
System.out.println("i="+i);
}
//生成随机数之二
System.out.println("----------");
Randomr = new Random();
for(intx=0; x<10; x++)
{ //调用Random类中方法
inti = r.nextInt(10)+1;//伪随机数。1-10
System.out.println("i="+i);
}
}
}
>>Java中的日期,Date类中的方法,基本方法
eg:import java.util.*;
importjava.text.*;
class DateDemo
{
publicstatic void main(String[] args)throws Exception
{
method_3();
}
//日期对象的中的其他方法。
publicstatic void method_3()
{
longtime2 = 1309487500781l;
Dated1 = new Date(time2);
Dated2 = new Date();
Dated3 = new Date();
System.out.println(d1.after(d2));//测试此日期是否在指定日期之后。
System.out.println(d1.before(d2));//测试此日期是否在指定日期之前。
System.out.println(d1.compareTo(d2));//比较两个日期的顺序。
System.out.println(d1.equals(d2));
System.out.println("-----------");
System.out.println(d3.after(d2));
System.out.println(d3.before(d2));
System.out.println(d3.compareTo(d2));
System.out.println(d3.equals(d2));
}
/*
日期对象和毫秒值之间的转换。
*/
//将日期对象转成一个毫秒值。
publicstatic void method_2()
{
Dated = new Date();
longtime = d.getTime();
// 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此Date对象表示的毫秒数。
System.out.println(d);
}
//将毫秒值转成日期对象。
publicstatic void method_1()
{
//获取当前时间的毫秒值。
longtime = System.currentTimeMillis();
System.out.println(time);
//将毫秒值转成日期对象。//通过Date的构造函数。
Dated = new Date(time);
System.out.println(d);
//通过setTime方法。
Dated1 = new Date();
d1.setTime(time);
System.out.println(d1);
longtime2 = 1309487500781l;
Dated3 = new Date(time2);
System.out.println("d3="+d3);
}
}
>>以上例子的输出阅读性很差,但其实日期也有格式化方法
eg:import java.util.*;
importjava.text.*;//格式化方法于这个包中
………………
public staticvoid method_4()
{
Dated = new Date();
SimpleDateFormatsdf = new SimpleDateFormat("yyyy年MM月dd日hh:mm:ss");
Stringstr = sdf.format(d);
System.out.println(str);
}//SimpleDateFormat类为DateFormat的子类
//第二种格式化方法
publicstatic void show_2()
{
Dated = new Date();
DateFormatdf = DateFormat.getDateInstance();//获取日期
DateFormatdfTime = DateFormat.getTimeInstance();//获取时间
DateFormatdfDateTime = DateFormat.getDateTimeInstance();//获取日期和时间
Stringstr = df.format(d);
StringstrTime = dfTime.format(d);
System.out.println(str+""+strTime);//日期和时间分开
StringstrDateTime = dfDateTime.format(d);
System.out.println(strDateTime);//日期和时间一起
//使用给定的风格。
DateFormatdfSelf = DateFormat.getDateInstance(DateFormat.LONG);
//LONG风格的日期和时间
dfSelf= DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG);
StringstrSelf = dfSelf.format(d);
System.out.println(strSelf);//显示2011年7月25日 上午10时53分53秒
}
>>练习
需求:
"2011-4-12"
"2011-5-20"
这两个日期间隔多少天?
思路:
1,先将字符串转成日期对象。
2,然后将日期对象转成毫秒值。
3,相减。
4,将毫秒值转成天数。
import java.util.*;
import java.text.*;
class DateTest
{
publicstatic void main(String[] args) throws Exception
{
method();
}
publicstatic void method()throws Exception
{
Stringstr_time1 = "2011-4-112";
Stringstr_time2 = "2011年5月20日";
//将具体的日期格式封装成对象。
SimpleDateFormatsdf1 = new SimpleDateFormat("yyyy-MM-dd");
Dated1 = sdf1.parse(str_time1);
SimpleDateFormatsdf2 = new SimpleDateFormat("yyyy年MM月dd日");
Dated2 = sdf2.parse(str_time2);
System.out.println("d1="+d1);
System.out.println("d2="+d2);
longtime1 = d1.getTime();//转换成毫秒形式
longtime2 = d2.getTime();//转换成毫秒形式
longtime = Math.abs(time1-time2);//防止负数,加上绝对值
time= time/1000/60/60/24;
System.out.println(time);
}
}
>>Date类中的过时方法被类Calendar取代
eg:import java.util.*;
class CalendarDemo
{
publicstatic void main(String[] args)
{
//获取一个日历
Calendarc = Calendar.getInstance();
//根据相应的字段从日历中获取数据
System.out.println(c.get(Calendar.YEAR)
+"年"+getDateString(c.get(Calendar.MONTH)+1)
+"月"+getDateString(c.get(Calendar.DAY_OF_MONTH))
+"日"+getWeek(c.get(Calendar.DAY_OF_WEEK)));
}
//对月份和日期补零保证长度不变
public staticString getDateString(int num)
{
returnnum>9?num+"":"0"+num;
}
//计算机的星期从0开始计算,转换成一般的阅读方法
publicstatic String getWeek(int week)
{
String[]arr = {"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
returnarr[week-1];
}
}
自行设定日期的set方法
eg:………………
Calendar c = Calendar.getInstance();
c.set(2012,4,1);
System.out.println(c.get(Calendar.YEAR)
+"年"+getDateString(c.get(Calendar.MONTH)+1)
+"月"+getDateString(c.get(Calendar.DAY_OF_MONTH))
+"日"+getWeek(c.get(Calendar.DAY_OF_WEEK)));
………………
注意,输出结果2012年5月1日星期二,计算机从0开始算月份,即如果输入c.set(2012,12,1);,会显示2013年1月1日星期二,特别注意。
增减日期的add方法
eg:………………
c.set(2012,1,32);
c.add(Calendar.YEAR,-2);
………………
显示2010年3月3日星期三
获取任意年份二月的天数
eg:………………
publicstatic void getDays(int year)
{
Calendarc = Calendar.getInstance();
c.set(year,2,1);//该年的3月1日
c.add(Calendar.DAY_OF_MONTH,-1);//减一天为二月最后一天
System.out.println(getDateString(c.get(Calendar.DAY_OF_MONTH))+"天”);
}
………………