您的位置:首页 > 编程语言 > Java开发

Java基础19--System--Runtime--Math--Date--Calendar

2014-01-10 21:33 429 查看

19-1,API-System类

1,因为System没有构造函数,所以不能被实例化,它里面的方法通常是静态的。
2,System中的字段:
(1)static PrintStream err:标准错误输出流
(2)static InputStream in:标准输入流
(3)static PrintStream out:标准输出流,System.out.println();
3,主要方法:
(1)public static longcurrentTimeMillis()
返回以毫秒为单位的当前时间,其值取决于操作系统,有的操作系统以几十毫秒为单位测量时间。
返回的是当前时间与协调世界时间1970年1月1日午夜之间的时差(以毫秒为单位测量)。
(2)nanoTime()返回系统计时器的当前值,以毫微秒为单位。
以上两个方法可以用来测量一段代码(如循环)的执行时间,如:
long startTime = System.nanoTime();
...code...
long endTime = System.nanoTime();
System.out.println("运行时间为:" +(endTime - startTime) / 1000 + "秒");
(3)exit():退出系统(JVM)。
(4)gc():调用垃圾回收器。
4,重要方法:
public static PropertiesgetProperties()
获取系统的属性信息,并存储到了Properties集合中。
Properties集合中存的都是String类型的键和值。最好使用他自己的存储和取出方法来完成元素的操作。
例如,通过下列代码可以获取系统的属性信息:
public class GetInfo {
public static void main(String[] args) {
Properties prop = System.getProperties();
Set<String> nameSet = prop.stringPropertyNames();
for(String name : nameSet) {
String value = prop.getProperty(name);
System.out.println(name + "::" + value);
}
}
}

5,换行符问题
不同的系统的支持的换行符不同,如windows是/r/n,而Unix是/n,Java是跨平台的,那么如何使换行操作在不同的系统上都能正确显示呢?
答:JVM启动时先加载系统信息,可以从中获取当前系统使用的换行符,字段为line.separator,在我们的程序中,有换行操作的地方只要用该字段来获取当前系统的换行符即可,因为获取此值后不再变化,所以用final设置为常量即可。
public class SystemDemo{
private static final String LINE_SEPARATER = System.getProperty("line.separator");
public static void main(String[] args) {
System.out.println("hello - " + LINE_SEPARATER + "world");
}
}

6,也可以在程序中向系统信息中添加一些信息。那么其他程序可以直接获取并使用,是全局的,它是写到了操作系统的配置文件中。
例如:System.setProperty("myclasspath","c:\myclass");

19-2,Runtime类

1,java.lang.Runtime类
每个Java应用程序都有一个Runtime类实例,使应用程序能够与其运行的环境相连接,可以通过getRuntime方法获取当前运行时。应用程序不能创建自己的Runtime类实例。
该类没有构造函数,且它的方法大多数也不是静态的。那么这个类肯定有一个静态方法,并返回本类对象。很明显,这个类使用了单例设计模式。
2,方法:
Process exec(String command)
Process是创建了一个进程,exec方法可以打开一个程序,例如记事本,command指令是一个字符串,用于指定程序的路径,运行时,会现在当前类路径下找指定的程序,如果没有找到会到classpath下找,再找不到则报错。
例如:
System.setProperty("myclasspath","c:\myclass");
Process exec(String command)
Runtime r = Runtime.getRuntime();
r.exec("notepad.exe");//打开记事本
r.exec("QQ.exe");//无法打开,路径中没有QQ.exe

也可以指定程序去解析一个文件。
r.exec("notepad.exe c:\\RuntimeDemo.java");//会用记事本打开RuntimeDemo.java文件
Process中的destroy方法用于杀死一个子进程,
Process p = r.exec("notepad.exe");
p.destroy();//关闭notepad进程


19-3,Math类

1,java.lang.Math,包含基本数学运算方法,其方法都是静态的。
2,常用方法
(1)abs(...):返回绝对值
(2)cell(...):返回大于参数的最小整数
Math.cell(12.56);//13.0,
(3)floor(...);返回小于参数的最大整数
Math.floor(12.56);//12.0,
(4)round(...);返回四舍五入的值
Math.round(12.56)
(5)pow(double a,double b):返回a的b次幂
Math.pow(2,3);//8
(6)random():返回整的double值,0<=值<1,返回的是伪随机数。
Random示例:
Random r = new Random();
for(int i=0;i<10;i++) {
double d = Math.cell(Math.random(1*10));//1-10的随机数
double d = (int)(Math.random() * 6 + 1);//1-6的随机数,骰子
double d = (int)(r.nextDouble()* 6 + 1);//
}

Random r = new Random();
int d = r.nextInt(6) + 1;//Random类获取伪随机数,模拟骰子

19-4,Date类

1,日期对象和毫秒值之间的转换。
毫秒值-->日期对象:
(1)通过Date对象的构造方法。newDate(毫秒数)
(2)还可以通过setTime设置。
因为可以通过Date对象的方法对该日期中的各个字段进行操作。
日期对象-->毫秒值
getTime方法
因为可以通过具体的数值进行运算。
例如:
Date date = new Date();//将当前日期和时间封装成Date对象
System.out.println(date);
Date date2 = new Date(System.currentTimeMillis());//将指定毫秒值封装成date对象。
System.out.println(date);


19-5,日期对象转成字符串

1,使用Calendar类实现日期和时间字段之间的转换,使用DateFormat类来格式化和解析日期字符串。
2,public abstract class DateFormat,不能直接实例化。
DateFormat的格式化风格包括FULL,LONG,MEDIUM,SHORT等,格式化风格就是将时间转化成什么格式。
3,静态工厂,一个类没有构造函数,但可以用这个类中的一个静态方法获取其对象在进行操作,就是静态工厂,比如单例设计模式就是。
myString =DateFormat.getDateInstane().format(myDate);
4,示例:
public static void methodDemo() {
Date date = new Date();
//获取日期格式对象,具备默认的风格
DateFormat dateFormat = DateFormat.getDateInstance();
String str_date = dateFormat.format(date);
System.out.println(str_date);
}

5,dateFormat =DateFormat.getDateTimeInstance();
获取日期和时间的实例。
6,getDateInstance(style);获取指定风格的日期实例FULL,LONG,SHORT,MEDIUM。
7,getDateTimeInstance(style)
dateFormat =DateFormat.getDateInstane(DateFormat.LONG);
dateFormat =DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG);
8,自定义风格,用SimpleDateFormat类,注意查阅规定的代替符。
dateFormat = newSimpleDateFormat("yyyy--MM-dd");
String str_date =dateFormat.format(date);
System.out.println(str_date);
9,将日期对象转化成日期格式的字符串,使用的是DateFormat中的format()方法。

19-6,字符串变成日期对象

将日期格式的字符串转成日期对象,使用的是DateFormat类中的parse()方法。
public static void method()throws ParseException {
String str_date = "2014-1-10"; //默认风格
DateFormat dateFormat = DateFormat.getDateInstance();//按默认风格解析
Date date = dateFormat.parse(str_date);
System.out.println(date);
}

若要解析LONG风格,即"2014年1月10日",必须在获取对象时指定风格才能解析。
即:DateFormat dateFormat =DateFormat.getDateInstance(DateFormat.LONG);
若要按照自定义风格解析,要创建SimpleDateFormat实例,并正确定义格式。
如:dateFormat = SimpleDateFormat("yyyy---MM---dd");

19-7,Date练习

需求:计算2014年1月1日-2014年1月10日之间有多少天。
步骤:
(1)将日期格式字符串转成Date对象。
(2)将Date对象转成毫秒值。
(3)相减,再变成天数。
public class DateTest {
public static void main(String[] args) {
String str_date1 = "2014-1-1";
String str_date2 = "2014-1-10";
test(str_date1,str_date2);
}
public static void test(String str_date1,String str_date2)throws ParseException {
//1.当日期字符串转成日期对象
//定义日期格式对象
DateFormat dateFormat = DateFormat.getDateInstance();
dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = dateFormat.parse(str_date1);
Date date2 = dateFormat.parse(str_date2);
long time1 = date1.getTime();
long time2 = date2.getTime();
long time = Math.abs(time1-time2);
int day = getDay(time);
System.out.println(day);
}
private static int getDay(long time) {
int day = (int)(time/1000/60/60/24);
return day;
}
}

19-8,Calendar类-基本演示

可以将Calendar简单理解为日历。可以做很多Date能做的事情。
这个类也是通过getInstance方法获取Calendar对象的,单例设计模式。
下面演示一下他的基本用法:
public class Demo {
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
showDate(c);
}
public static void showDate(Calendar c) {
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH)+1;//从0开始,到11,所以+1
int day = c.get(Calendar.DAY_OF_MONTH);
int week = c.get(Calendar.DAY_OF_WEEK);
System.out.println(year+"年"+month+"月"+day+"日"+getWeek(week));
}
public static String getWeek(int i) {
String[] weeks = {"","星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
return weeks[i];
}
}


19-9,Calendar类-练习

1,set方法,设置日期。
c.set(2013,10,11);//设置当前Calendar对象c为2013年11月11日,因为月是从0开始的,所以设置10其实是第11月。
2,add方法:可以引起时间的偏移
c.add(Calendar.YEAR,2);在当前c对象时间的基础上加两年,-2是减两年。例如当前Calendar对象是2014年1月10日,加2年后是2016年1月10日。
3,c.set(2013,11,20)
c.add(Calendar.MONTH,2);//2014年2月20日
4,练习
输入一个年份,判断他的二月有几天。
这是个闰年的问题,之前需要通过一定的算法计算,这里用Calendar类解决。
加入输入的是2014年。
public class Test {
public static void main(String[] args) {
int year = 2014;
showDays(year);
}
public static void showDays(int years) {
Calendar c = Calendar.getInstance();
c.set(year,2,1);//将c设置成为某年的3月1日。
c.add(Calendar.DAY_OF_MONTH,-1);
showDate(c);
}
public static void showDate(Calendar c) {
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH)+1;//从0开始,到11,所以+1
int day = c.get(Calendar.DAY_OF_MONTH);
int week = c.get(Calendar.DAY_OF_WEEK);
System.out.println(year+"年"+month+"月"+day+"日"+getWeek(week));
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐