JAVA基础学习day18--常用工具类

时间:2022-01-18 04:33:59

一、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 类是一个抽象类,它为特定瞬间与一组诸如 YEARMONTHDAY_OF_MONTHHOUR日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。

该类还为实现包范围外的具体日历系统提供了其他字段和方法。这些字段和方法被定义为 protected

与其他语言环境敏感类一样,Calendar 提供了一个类方法 getInstance,以获得此类型的一个通用的对象。CalendargetInstance 方法返回一个 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)

返回欧拉数 edouble 次幂的值。
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));//
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.01.0
之间均匀分布的 double 值。
float nextFloat()

返回下一个伪随机数,它是取自此随机数生成器序列的、在 0.01.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);
}
}