Java基础19--System--Runtime--Math--Date--Calendar
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,所以+1int 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,所以+1int day = c.get(Calendar.DAY_OF_MONTH);int week = c.get(Calendar.DAY_OF_WEEK);System.out.println(year+"年"+month+"月"+day+"日"+getWeek(week));}
}
Java基础19--System--Runtime--Math--Date--Calendar相关推荐
- Java基础 时间相关类小结[Timestamp,Date,Calendar]
Java基础 时间相关类[Timestamp,Date,Calendar] 前言 一.Timestamp(时间戳) 二.Date(日期) 三.Calendar(日历) 四.Timestamp.Date ...
- Java常用类System、Math和File类
Java 文章目录 Java 一.System:系统类 二.Math 数学类 三.File:文件类 一.System:系统类 System中包含一些有用的类字段和方法,不能够进行实例化 public ...
- JAVA基础 之 System
简要说明: 1.System类代表的是当前JAVA程序的运行平台 2.System类提供了很多静态方法来做系统级的操作(具体见程序) 3.更详细的API请参见 http://docs.oracle.c ...
- 【CXY】JAVA基础 之 System
概述: 1.System类代表的是当前JAVA程序的运行平台 2.System类提供了很多静态方法来做系统级的操作(具体见程序) package com.cxy.f;import java.util. ...
- java基础第十一篇之Date、Math、自动装箱和拆箱
Date类 表示一个瞬间,就是一个时刻 * * 构造方法: * public Date();//创建一个表示当前系统时间的Date对象 * public Date(long time);//毫秒值,距 ...
- Java基础---常用类之Math类 and Syetem类
常用类-Math类 Math类:关于数学的类 这个类中封装了一些关于数学的方法 可以完成一些常用的数学操作 特点:1.final修饰的类 所以Math类没有子类的 不可以继承2.Math类中的构造方法 ...
- Java基础19:IO流—缓冲流、转换流、序列化、打印流、压缩流和解压流
IO流中的一些其他流:缓冲流.转换流.序列化.打印流.压缩流和解压流 1. 缓冲流 IO流除了一些基本的流,还有在此基础上发展出来的一些更强大的流.比如能够高效读写的缓冲流,能够转换编码的转换流,能够 ...
- 学Java基础19 字符流 编码表 转换流 字符高效流 对象流 序列化 以及所有的IO流总结
一.字符流概述 1.字符流 就是用于来读写字符操作的流 2.字符流使用的原因: 使用字节流来读取文件中中文会出现乱码 因为中文不是一个字节组成的 所以读取中文的时候 需要使用字符流 字符实际上也是使用 ...
- Java基础之System.out.println(打印个七彩颜色字符串吧!)
上代码 class Hello{public static void main(String[] args){System.out.println("Hello,Akina!"); ...
- java基础基础总结----- Date
前言:其实在学习这个的时候,自我感觉学到什么直接查询API就可以了,没有必要再去研究某个方法怎么使用, 重点学习一下经常用到的方法.感觉自己的写的博客,就跟自己的笔记一样,用的是时候,就能快速的查找 ...
最新文章
- 文件流能转换格式吗_amr转换mp3格式文件
- 没有好看的 Terminal 怎么能够快乐地写代码
- JavaEE 获取路径全攻略
- 【Java】 Base64原理及简单应用
- 使用 core dump 查找程序遇到严重问题退出的原因
- python数据清洗实例_python 数据的清理行为实例详解
- endnotex9如何导入caj中文文献_EndNote系列教程(二)——数据库的建立及文献的筛选...
- 以后再也不去字节面试了…
- js滚动条滚动到指定元素
- Linux 会成为主流桌面操作系统吗?
- 数据科学 IPython 笔记本 8.3 Matplotlib 可视化
- Airflow 中文文档:使用Mesos扩展(社区贡献)
- 疏通马桶的工具有哪些 疏通马桶的技巧
- 58、什么是断言?应用场景?
- 基于隐式调用风格的kwic实现
- Quartus II :1位全加器设计
- matlab 电磁场工具箱,基于MATLAB软件的电磁场的可视化研究.doc
- adb学习:八:多个设备时候指定操作某个设备
- 2022,烟火如常,布衣剩饭,啥也没干,年终总结,蹈海难酬
- shineblink电位器模拟旋钮