JAVA基础学习day18--常用工具类
一、System
1.1、概述
System
类包含一些有用的类字段和方法。它不能被实例化。
在 System
类提供的设施中,有标准输入、标准输出和错误输出流;对外部定义的属性和环境变量的访问;加载文件和库的方法;还有快速复制数组的一部分的实用方法。
字段摘要 | |
---|---|
static PrintStream |
err “标准”错误输出流。 |
static InputStream |
in
“标准”输入流。 |
static PrintStream |
out
“标准”输出流。 |
1.2、getPropertis()获取system加载时都加载了哪些对象
Properties是HashTable的子类,也就是Map集合的子类对象
可以通过Map的方法取出该集合中的元素。
该集合中存储的都是字符串,没有泛型定义
package com.pb.system.demo1; import java.util.Iterator; import java.util.Properties; import java.util.Set; public class SystemDemo1 { public static void main(String[] args) { //获取System启动是初始化的对象,返回是一个Properties,这个是HashTable的子类对象也是个Map集合 Properties prop=System.getProperties(); Set set=prop.keySet(); //获取所胡键 Iterator it=set.iterator(); while(it.hasNext()){ String key=(String)it.next(); String value=(String)prop.get(key); System.out.println(key+": "+value); } } }
结果:
java.runtime.name: Java(TM) SE Runtime Environment sun.boot.library.path: C:\Java\jre1.8.0_60\bin java.vm.version: 25.60-b23 java.vm.vendor: Oracle Corporation java.vendor.url: http://java.oracle.com/ path.separator: ; java.vm.name: Java HotSpot(TM) 64-Bit Server VM file.encoding.pkg: sun.io user.country: CN user.script: sun.java.launcher: SUN_STANDARD sun.os.patch.level: java.vm.specification.name: Java Virtual Machine Specification user.dir: F:\work\ListDemo java.runtime.version: 1.8.0_60-b27 java.awt.graphicsenv: sun.awt.Win32GraphicsEnvironment java.endorsed.dirs: C:\Java\jre1.8.0_60\lib\endorsed os.arch: amd64 java.io.tmpdir: C:\Users\ADMINI~1\AppData\Local\Temp\ line.separator: java.vm.specification.vendor: Oracle Corporation user.variant: os.name: Windows 7 sun.jnu.encoding: GBK java.library.path: C:\Java\jre1.8.0_60\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:/Java/jre1.8.0_60/bin/server;C:/Java/jre1.8.0_60/bin;C:/Java/jre1.8.0_60/lib/amd64;C:\ProgramData\Oracle\Java\javapath;C:\Program Files\Broadcom\Broadcom 802.11 Network Adapter\Driver;;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Lenovo\Bluetooth Software\;C:\Program Files\Lenovo\Bluetooth Software\syswow64;C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static;C:\Java\jdk1.8.0_60\bin;C:\Java\jdk1.8.0_60\jre\bin;F:\eclipse-jee-mars-R-win32-x86_64\eclipse;;. java.specification.name: Java Platform API Specification java.class.version: 52.0 sun.management.compiler: HotSpot 64-Bit Tiered Compilers os.version: 6.1 user.home: C:\Users\Administrator user.timezone: java.awt.printerjob: sun.awt.windows.WPrinterJob file.encoding: UTF-8 java.specification.version: 1.8 java.class.path: F:\work\ListDemo\bin user.name: Administrator java.vm.specification.version: 1.8 sun.java.command: com.pb.system.demo1.SystemDemo1 java.home: C:\Java\jre1.8.0_60 sun.arch.data.model: 64 user.language: zh java.specification.vendor: Oracle Corporation awt.toolkit: sun.awt.windows.WToolkit java.vm.info: mixed mode java.version: 1.8.0_60 java.ext.dirs: C:\Java\jre1.8.0_60\lib\ext;C:\Windows\Sun\Java\lib\ext sun.boot.class.path: C:\Java\jre1.8.0_60\lib\resources.jar;C:\Java\jre1.8.0_60\lib\rt.jar;C:\Java\jre1.8.0_60\lib\sunrsasign.jar;C:\Java\jre1.8.0_60\lib\jsse.jar;C:\Java\jre1.8.0_60\lib\jce.jar;C:\Java\jre1.8.0_60\lib\charsets.jar;C:\Java\jre1.8.0_60\lib\jfr.jar;C:\Java\jre1.8.0_60\classes java.vendor: Oracle Corporation file.separator: \ java.vendor.url.bug: http://bugreport.sun.com/bugreport/ sun.io.unicode.encoding: UnicodeLittle sun.cpu.endian: little sun.desktop: windows sun.cpu.isalist: amd64
二、Runtime
2.1、Runtime概述
每个 Java 应用程序都有一个 Runtime
类实例,使应用程序能够与其运行的环境相连接。可以通过 getRuntime
方法获取当前运行时。
应用程序不能创建自己的 Runtime 类实例。
java.lang.Runtime
static Runtime |
getRuntime() 返回与当前 Java 应用程序相关的运行时对象。 |
单例模式
2.2、示例
package com.pb.system.demo1; import java.io.IOException; public class RuntimeDemo { public static void main(String[] args) { Runtime rt=Runtime.getRuntime(); Process p = null; //进程 try { //打开启事本 p=rt.exec("notepad e:\\a.txt");//或者路径加命令 返回一个进程 Thread.sleep(5000); //等待5秒 } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); }finally{ p.destroy(); //关闭进程 } } }
三、Date
3.1、Date
类 Date
表示特定的瞬间,精确到毫秒
方法摘要 | |
---|---|
boolean |
after(Date when) 测试此日期是否在指定日期之后。 |
boolean |
before(Date when)
测试此日期是否在指定日期之前。 |
Object |
clone()
返回此对象的副本。 |
int |
compareTo(Date anotherDate)
比较两个日期的顺序。 |
boolean |
equals(Object obj)
比较两个日期的相等性。 |
int |
getDate()
已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.DAY_OF_MONTH) 取代。 |
int |
getDay()
已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.DAY_OF_WEEK) 取代。 |
int |
getHours()
已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.HOUR_OF_DAY) 取代。 |
int |
getMinutes()
已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.MINUTE) 取代。 |
int |
getMonth()
已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.MONTH) 取代。 |
int |
getSeconds()
已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.SECOND) 取代。 |
long |
getTime()
返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。 |
int |
getTimezoneOffset()
已过时。 从 JDK 1.1 开始,由 -(Calendar.get(Calendar.ZONE_OFFSET) + Calendar.get(Calendar.DST_OFFSET))
/ (60 * 1000) 取代。 |
int |
getYear()
已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.YEAR) -
1900 取代。 |
int |
hashCode()
返回此对象的哈希码值。 |
static long |
parse(String s)
已过时。 从 JDK 1.1 开始,由 DateFormat.parse(String
s) 取代。 |
void |
setDate(int date)
已过时。 从 JDK 1.1 开始,由 Calendar.set(Calendar.DAY_OF_MONTH, int date) 取代。 |
void |
setHours(int hours)
已过时。 从 JDK 1.1 开始,由 Calendar.set(Calendar.HOUR_OF_DAY, int hours) 取代。 |
void |
setMinutes(int minutes)
已过时。 从 JDK 1.1 开始,由 Calendar.set(Calendar.MINUTE,
int minutes) 取代。 |
void |
setMonth(int month)
已过时。 从 JDK 1.1 开始,由 Calendar.set(Calendar.MONTH,
int month) 取代。 |
void |
setSeconds(int seconds)
已过时。 从 JDK 1.1 开始,由 Calendar.set(Calendar.SECOND,
int seconds) 取代。 |
void |
setTime(long time)
设置此 Date 对象,以表示 1970 年 1 月 1 日 00:00:00 GMT 以后
time 毫秒的时间点。 |
void |
setYear(int year)
已过时。 从 JDK 1.1 开始,由 Calendar.set(Calendar.YEAR,
year + 1900) 取代。 |
String |
toGMTString()
已过时。 从 JDK 1.1 开始,由 DateFormat.format(Date
date) 取代,使用 GMT TimeZone 。 |
String |
toLocaleString()
已过时。 从 JDK 1.1 开始,由 DateFormat.format(Date
date) 取代。 |
String |
toString()
把此 Date 对象转换为以下形式的 String : dow mon dd
hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri,
Sat)。 |
static long |
UTC(int year,
int month, int date, int hrs, int min, int sec)
已过时。 从 JDK 1.1 开始,由 Calendar.set(year + 1900,
month, date, hrs, min, sec) 或 GregorianCalendar(year + 1900, month,
date, hrs, min, sec) 取代,使用 UTC TimeZone ,后跟
Calendar.getTime().getTime() 。 |
3.2、SimpleDateFormat
日期和时间模式
日期和时间格式由日期和时间模式 字符串指定。在日期和时间模式字符串中,未加引号的字母 'A'
到 'Z'
和 'a'
到 'z'
被解释为模式字母,用来表示日期或时间字符串元素。文本可以使用单引号 ('
) 引起来,以免进行解释。"''"
表示单引号。所有其他字符均不解释;只是在格式化时将它们简单复制到输出字符串,或者在解析时与输入字符串进行匹配。
定义了以下模式字母(所有其他字符 'A'
到 'Z'
和 'a'
到 'z'
都被保留):
字母 日期或时间元素 表示 示例 G
Era 标志符 Text AD
y
年 Year 1996
;96
M
年中的月份 Month July
;Jul
;07
w
年中的周数 Number 27
W
月份中的周数 Number 2
D
年中的天数 Number 189
d
月份中的天数 Number 10
F
月份中的星期 Number 2
E
星期中的天数 Text Tuesday
;Tue
a
Am/pm 标记 Text PM
H
一天中的小时数(0-23) Number 0
k
一天中的小时数(1-24) Number 24
K
am/pm 中的小时数(0-11) Number 0
h
am/pm 中的小时数(1-12) Number 12
m
小时中的分钟数 Number 30
s
分钟中的秒数 Number 55
S
毫秒数 Number 978
z
时区 General time zone Pacific Standard Time
;PST
;GMT-08:00
Z
时区 RFC 822 time zone -0800
SimpleDateFormat
是一个以与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。
示例:
package com.pb.date.demo1; import java.text.SimpleDateFormat; import java.util.Date; public class DateDemo1 { public static void main(String[] args) { Date d=new Date(); System.out.println(d); //返回值为Sun Sep 27 15:35:10 CST 2015 //格式转换 SimpleDateFormat sdf1=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String str=sdf1.format(d); System.out.println(str); //2015-09-27 15:36:37 } }
四、Calendar
4.1、Calendar
Calendar
类是一个抽象类,它为特定瞬间与一组诸如 YEAR
、MONTH
、DAY_OF_MONTH
、HOUR
等 日历字段
之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。
该类还为实现包范围外的具体日历系统提供了其他字段和方法。这些字段和方法被定义为 protected
。
与其他语言环境敏感类一样,Calendar
提供了一个类方法 getInstance
,以获得此类型的一个通用的对象。Calendar
的 getInstance
方法返回一个 Calendar
对象,其日历字段已由当前日期和时间初始化:
Calendar rightNow = Calendar.getInstance();
4.2、示例
package com.pb.date.demo1; import java.util.Calendar; import java.util.GregorianCalendar; public class CalendarDemo { public static void main(String[] args) { Calendar c=Calendar.getInstance(); System.out.println(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 hour=c.get(Calendar.HOUR_OF_DAY);//天中的小时 int minuts=c.get(Calendar.MINUTE); int second=c.get(Calendar.SECOND); System.out.println(year+"年"+month+"月"+day+"日"+hour+"时"+minuts+"分"+second+"秒"); //获取2年之前的日期 //getYear(c,-2); //获取2年之后的日期 //getYear(c,2); //获取2个月之前的日期 //getMonth(c,-2); //获取2个月之后的日期 //getMonth(c,2); //当前日期-20天的日期 //getDay(c,-20); //当前日期+83天的日期 //getDay(c,83); //求当年是不是闰年 //isLearYear(c); /* * Calendar的子类提供了,判断是不是闰年的方法 */ GregorianCalendar gc=new GregorianCalendar(); //boolean flag=gc.isLeapYear(2015); boolean flag=gc.isLeapYear(gc.YEAR); if(flag){ System.out.println("闰年!"); }else{ System.out.println("不是闰年!"); } } //对年进行+和-操作 public static void getYear(Calendar c,int num){ c.add(Calendar.YEAR, num); int year=c.get(Calendar.YEAR); System.out.println(year); } //对月进行+和-操作 public static void getMonth(Calendar c,int num){ c.add(Calendar.MONTH, num); int month=c.get(Calendar.MONTH)+1; int year=c.get(Calendar.YEAR); System.out.println(year+"年"+month+"月"); } //对日进行+和-操作 public static void getDay(Calendar c,int num){ c.add(Calendar.DAY_OF_MONTH, num); int day=c.get(Calendar.DAY_OF_MONTH); int year=c.get(Calendar.YEAR); int month=c.get(Calendar.MONTH)+1; System.out.println(year+"年"+month+"月"+day); } public static void isLearYear(Calendar c){ int year=c.get(Calendar.YEAR); //闰年的条件可以被4整除但不能被100整除,或者可以被400整除 if(year%4==0&&year%100!=0 ||year%400==0){ System.out.println(year+"年闰年!"); }else{ System.out.println(year+"年不是闰年!"); } } }
五、Math
5.1、Math
Math
类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。
字段摘要 | |
---|---|
static double |
E 比任何其他值都更接近 e(即自然对数的底数)的 double 值。 |
static double |
PI
比任何其他值都更接近 pi(即圆的周长与直径之比)的 double
值。 |
方法摘要 | |
---|---|
static double |
abs(double a)
返回 double 值的绝对值。 |
static float |
abs(float a)
返回 float 值的绝对值。 |
static int |
abs(int a)
返回 int 值的绝对值。 |
static long |
abs(long a)
返回 long 值的绝对值。 |
static double |
acos(double a)
返回一个值的反余弦;返回的角度范围在 0.0 到 pi 之间。 |
static double |
asin(double a)
返回一个值的反正弦;返回的角度范围在 -pi/2 到 pi/2 之间。 |
static double |
atan(double a)
返回一个值的反正切;返回的角度范围在 -pi/2 到 pi/2 之间。 |
static double |
atan2(double y,
double x) 将矩形坐标 ( x , y ) 转换成极坐标
(r, theta),返回所得角 theta。 |
static double |
cbrt(double a)
返回 double 值的立方根。 |
static double |
ceil(double a)
返回最小的(最接近负无穷大) double 值,该值大于等于参数,并等于某个整数。 |
static double |
copySign(double magnitude,
double sign) 返回带有第二个浮点参数符号的第一个浮点参数。 |
static float |
copySign(float magnitude,
float sign) 返回带有第二个浮点参数符号的第一个浮点参数。 |
static double |
cos(double a)
返回角的三角余弦。 |
static double |
cosh(double x)
返回 double 值的双曲线余弦。 |
static double |
exp(double a)
返回欧拉数 e 的 double 次幂的值。 |
static double |
expm1(double x)
返回 ex -1。 |
static double |
floor(double a)
返回最大的(最接近正无穷大) double 值,该值小于等于参数,并等于某个整数。 |
static int |
getExponent(double d)
返回 double 表示形式中使用的无偏指数。 |
static int |
getExponent(float f)
返回 float 表示形式中使用的无偏指数。 |
static double |
hypot(double x,
double y) 返回 sqrt(x2 +y2),没有中间溢出或下溢。 |
static double |
IEEEremainder(double f1,
double f2) 按照 IEEE 754 标准的规定,对两个参数进行余数运算。 |
static double |
log(double a)
返回 double 值的自然对数(底数是 e)。 |
static double |
log10(double a)
返回 double 值的底数为 10 的对数。 |
static double |
log1p(double x)
返回参数与 1 之和的自然对数。 |
static double |
max(double a,
double b) 返回两个 double 值中较大的一个。 |
static float |
max(float a,
float b) 返回两个 float 值中较大的一个。 |
static int |
max(int a, int b)
返回两个 int 值中较大的一个。 |
static long |
max(long a,
long b) 返回两个 long 值中较大的一个。 |
static double |
min(double a,
double b) 返回两个 double 值中较小的一个。 |
static float |
min(float a,
float b) 返回两个 float 值中较小的一个。 |
static int |
min(int a, int b)
返回两个 int 值中较小的一个。 |
static long |
min(long a,
long b) 返回两个 long 值中较小的一个。 |
static double |
nextAfter(double start,
double direction) 返回第一个参数和第二个参数之间与第一个参数相邻的浮点数。 |
static float |
nextAfter(float start,
double direction) 返回第一个参数和第二个参数之间与第一个参数相邻的浮点数。 |
static double |
nextUp(double d)
返回 d 和正无穷大之间与 d 相邻的浮点值。 |
static float |
nextUp(float f)
返回 f 和正无穷大之间与 f 相邻的浮点值。 |
static double |
pow(double a,
double b) 返回第一个参数的第二个参数次幂的值。 |
static double |
random()
返回带正号的 double 值,该值大于等于 0.0 且小于
1.0 。 |
static double |
rint(double a)
返回最接近参数并等于某一整数的 double 值。 |
static long |
round(double a)
返回最接近参数的 long 。 |
static int |
round(float a)
返回最接近参数的 int 。 |
static double |
scalb(double d,
int scaleFactor) 返回 d ×
2scaleFactor ,其舍入方式如同将一个正确舍入的浮点值乘以 double
值集合中的一个值。 |
static float |
scalb(float f,
int scaleFactor) 返回 f ×
2scaleFactor ,其舍入方式如同将一个正确舍入的浮点值乘以 float
值集合中的一个值。 |
static double |
signum(double d)
返回参数的符号函数;如果参数为 0,则返回 0;如果参数大于 0,则返回 1.0;如果参数小于 0,则返回 -1.0。 |
static float |
signum(float f)
返回参数的符号函数;如果参数为 0,则返回 0;如果参数大于 0,则返回 1.0;如果参数小于 0,则返回 -1.0。 |
static double |
sin(double a)
返回角的三角正弦。 |
static double |
sinh(double x)
返回 double 值的双曲线正弦。 |
static double |
sqrt(double a)
返回正确舍入的 double 值的正平方根。 |
static double |
tan(double a)
返回角的三角正切。 |
static double |
tanh(double x)
返回 double 值的双曲线余弦。 |
static double |
toDegrees(double angrad)
将用弧度表示的角转换为近似相等的用角度表示的角。 |
static double |
toRadians(double angdeg)
将用角度表示的角转换为近似相等的用弧度表示的角。 |
static double |
ulp(double d)
返回参数的 ulp 大小。 |
static float |
ulp(float f)
返回参数的 ulp 大小。 |
5.2、示例
package com.pb.math.demo1; public class MathDemo1 { public static void main(String[] args) { double d = Math.ceil(16.3); // 返回大于指定数据的最小整数17 System.out.println("d=" + d); double d1 = Math.ceil(-16.3); // 返回大于指定数据的最小整数-16 System.out.println("d1=" + d1); double d2 = Math.floor(16.3);// 16,返回小于指定数据最大整数 System.out.println("d2=" + d2); double d3 = Math.floor(-16.3);// 16,返回小于指定数据最大整数-17 System.out.println("d3=" + d3); double d4 = Math.round(12.3);// 12; System.out.println("d4=" + d4); double d5 = Math.round(12.54);// 13; System.out.println("d5=" + d5); double d6 = Math.round(-12.54);// -12; System.out.println("d6=" + d6); double d7 = Math.round(-12.34);// -12; System.out.println("d7=" + d7); System.out.println(Math.round(11.5));//12 System.out.println(Math.round(-11.5));//-11 } }
5.3、Random类
Random
类实现的算法使用一个 protected
实用工具方法,每次调用它最多可提供 32 个伪随机生成的位。
构造方法摘要 | |
---|---|
Random() 创建一个新的随机数生成器。 |
|
Random(long seed)
使用单个 long 种子创建一个新的随机数生成器。 |
方法摘要 | |
---|---|
protected
int |
next(int bits)
生成下一个伪随机数。 |
boolean |
nextBoolean()
返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的 boolean 值。 |
void |
nextBytes(byte[] bytes)
生成随机字节并将其置于用户提供的 byte 数组中。 |
double |
nextDouble()
返回下一个伪随机数,它是取自此随机数生成器序列的、在 0.0 和 1.0
之间均匀分布的 double 值。 |
float |
nextFloat()
返回下一个伪随机数,它是取自此随机数生成器序列的、在 0.0 和 1.0
之间均匀分布的 float 值。 |
double |
nextGaussian()
返回下一个伪随机数,它是取自此随机数生成器序列的、呈高斯(“正态”)分布的 double 值,其平均值是
0.0 ,标准差是 1.0 。 |
int |
nextInt()
返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。 |
int |
nextInt(int n)
返回一个伪随机数,它是取自此随机数生成器序列的、在 0(包括)和指定值(不包括)之间均匀分布的 int
值。 |
long |
nextLong()
返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的 long 值。 |
void |
setSeed(long seed)
使用单个 long
种子设置此随机数生成器的种子。 |
示例:
package com.pb.math.demo1; import java.util.Random; /** * 返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。 * 返回值是一个伪随机选择的数,在该范围内(近似)均匀分布。 * 大于等于 0.0 且小于 1.0 的伪随机 double 值 * */ public class MathDemo2 { public static void main(String[] args) { Random r=new Random(); for(int x=0;x<10;x++){ int i=r.nextInt(10); //1-10包含1不包含10 float f=r.nextFloat()*10; //0-1之间*10 double d=r.nextDouble()*10;//0-1之间*10 sop(i); sop(f); sop(d); } } public static void sop(Object obj){ System.out.println(obj); } }