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相关推荐

  1. Java基础 时间相关类小结[Timestamp,Date,Calendar]

    Java基础 时间相关类[Timestamp,Date,Calendar] 前言 一.Timestamp(时间戳) 二.Date(日期) 三.Calendar(日历) 四.Timestamp.Date ...

  2. Java常用类System、Math和File类

    Java 文章目录 Java 一.System:系统类 二.Math 数学类 三.File:文件类 一.System:系统类 System中包含一些有用的类字段和方法,不能够进行实例化 public ...

  3. JAVA基础 之 System

    简要说明: 1.System类代表的是当前JAVA程序的运行平台 2.System类提供了很多静态方法来做系统级的操作(具体见程序) 3.更详细的API请参见 http://docs.oracle.c ...

  4. 【CXY】JAVA基础 之 System

    概述: 1.System类代表的是当前JAVA程序的运行平台 2.System类提供了很多静态方法来做系统级的操作(具体见程序) package com.cxy.f;import java.util. ...

  5. java基础第十一篇之Date、Math、自动装箱和拆箱

    Date类 表示一个瞬间,就是一个时刻 * * 构造方法: * public Date();//创建一个表示当前系统时间的Date对象 * public Date(long time);//毫秒值,距 ...

  6. Java基础---常用类之Math类 and Syetem类

    常用类-Math类 Math类:关于数学的类 这个类中封装了一些关于数学的方法 可以完成一些常用的数学操作 特点:1.final修饰的类 所以Math类没有子类的 不可以继承2.Math类中的构造方法 ...

  7. Java基础19:IO流—缓冲流、转换流、序列化、打印流、压缩流和解压流

    IO流中的一些其他流:缓冲流.转换流.序列化.打印流.压缩流和解压流 1. 缓冲流 IO流除了一些基本的流,还有在此基础上发展出来的一些更强大的流.比如能够高效读写的缓冲流,能够转换编码的转换流,能够 ...

  8. 学Java基础19 字符流 编码表 转换流 字符高效流 对象流 序列化 以及所有的IO流总结

    一.字符流概述 1.字符流 就是用于来读写字符操作的流 2.字符流使用的原因: 使用字节流来读取文件中中文会出现乱码 因为中文不是一个字节组成的 所以读取中文的时候 需要使用字符流 字符实际上也是使用 ...

  9. Java基础之System.out.println(打印个七彩颜色字符串吧!)

    上代码 class Hello{public static void main(String[] args){System.out.println("Hello,Akina!"); ...

  10. java基础基础总结----- Date

    前言:其实在学习这个的时候,自我感觉学到什么直接查询API就可以了,没有必要再去研究某个方法怎么使用, 重点学习一下经常用到的方法.感觉自己的写的博客,就跟自己的笔记一样,用的是时候,就能快速的查找 ...

最新文章

  1. 文件流能转换格式吗_amr转换mp3格式文件
  2. 没有好看的 Terminal 怎么能够快乐地写代码
  3. JavaEE 获取路径全攻略
  4. 【Java】 Base64原理及简单应用
  5. 使用 core dump 查找程序遇到严重问题退出的原因
  6. python数据清洗实例_python 数据的清理行为实例详解
  7. endnotex9如何导入caj中文文献_EndNote系列教程(二)——数据库的建立及文献的筛选...
  8. 以后再也不去字节面试了…
  9. js滚动条滚动到指定元素
  10. Linux 会成为主流桌面操作系统吗?
  11. 数据科学 IPython 笔记本 8.3 Matplotlib 可视化
  12. Airflow 中文文档:使用Mesos扩展(社区贡献)
  13. 疏通马桶的工具有哪些 疏通马桶的技巧
  14. 58、什么是断言?应用场景?
  15. 基于隐式调用风格的kwic实现
  16. Quartus II :1位全加器设计
  17. matlab 电磁场工具箱,基于MATLAB软件的电磁场的可视化研究.doc
  18. adb学习:八:多个设备时候指定操作某个设备
  19. 2022,烟火如常,布衣剩饭,啥也没干,年终总结,蹈海难酬
  20. shineblink电位器模拟旋钮

热门文章

  1. C语言中char*和char[]用法区别分析
  2. 如何做文献综述:克雷斯威尔为五步文献综述法
  3. iptable 详解_iptable详解-阿里云开发者社区
  4. 常用正则表达式表(简洁无废话)
  5. 自己动手屏蔽腾讯QQ2008广告
  6. 使用js截取数组中的元素---前端面试
  7. iOS - present和push
  8. [附源码]计算机毕业设计JAVA宠物之家管理系统
  9. 计组实验:logisim入门实验
  10. 游戏测试-测试用例编写规范