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)); } }
相关文章推荐
- 黑马程序员——Java语言基础:其他对象(System、Runtime、Date、Calendar、Math)
- Java基础 System,Runtime,Date,Calendar,Math-Random,Io流
- 黑马程序员——Java基础——其他对象(System、Runtime、Date、Calendar、Math)
- java基础03 System,Runtime,Date,Calendar,Math
- 黑马程序员 Java基础之System,Runtime,Date,Calendar,Math.Random对象
- java基础-API-System、Runtime、Date、Calendar、Math
- Java基础之常用类--System、Runtime、Date、Calendar、Math、Random
- 黑马程序员——JAVA基础之System,Runtime,Date,Calendar,Math
- 黑马程序员--Java基础--集合、泛型、其他对象(System、Runtime、Math、Date)
- 黑马程序员--------java Collections、Arrays、高级for、可变参数、静态导入、System、Runtime、Math、Date、Calendar
- java--其他对象(System,Runtime,Date,Calendar,Math)
- 黑马程序员_基础_System、Runtime、Date、Calendar和Math-Random等常用对象的学习笔记
- Java基础(其他对象System、时间类(Date、Calendar)、Math)
- java--jdk api中其他对象(System,Runtime,Calendar,Math,Random,Date)
- java--jdk api中其他对象(System,Runtime,Calendar,Math,Random,Date)
- 黑马程序员_JAVA- System、Runtime、Math、Date、Calendar
- 黑马程序员--Java笔记11--静态类(Collections、Arrays、System、Runtime、Date、Calendar、Math)
- JAVA之旅(二十三)——System,RunTime,Date,Calendar,Math的数学运算
- Java基础 - 正则,Math,Random,System,Date,SimpleDateFormat,Calendar,BigInteger,BigDecimal
- 黑马程序员_集合4(高级for,可变参数,静态导入,Date,Calendar,Math,System,RunTime)