你的位置:首页 > Java教程

[Java教程]JAVA基础学习day18


一、System

1.1、概述

 

System 类包含一些有用的类字段和方法。它不能被实例化。

 

System 类提供的设施中,有标准输入、标准输出和错误输出流;对外部定义的属性和环境变量的访问;加载文件和库的方法;还有快速复制数组的一部分的实用方法。

 

字段摘要
static PrintStreamerr
“标准”错误输出流。
static InputStreamin
“标准”输入流。
static PrintStreamout
“标准”输出流。

 

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 Environmentsun.boot.library.path: C:\Java\jre1.8.0_60\binjava.vm.version: 25.60-b23java.vm.vendor: Oracle Corporationjava.vendor.url: http://java.oracle.com/path.separator: ;java.vm.name: Java HotSpot(TM) 64-Bit Server VMfile.encoding.pkg: sun.iouser.country: CNuser.script: sun.java.launcher: SUN_STANDARDsun.os.patch.level: java.vm.specification.name: Java Virtual Machine Specificationuser.dir: F:\work\ListDemojava.runtime.version: 1.8.0_60-b27java.awt.graphicsenv: sun.awt.Win32GraphicsEnvironmentjava.endorsed.dirs: C:\Java\jre1.8.0_60\lib\endorsedos.arch: amd64java.io.tmpdir: C:\Users\ADMINI~1\AppData\Local\Temp\line.separator: java.vm.specification.vendor: Oracle Corporationuser.variant: os.name: Windows 7sun.jnu.encoding: GBKjava.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 Specificationjava.class.version: 52.0sun.management.compiler: HotSpot 64-Bit Tiered Compilersos.version: 6.1user.home: C:\Users\Administratoruser.timezone: java.awt.printerjob: sun.awt.windows.WPrinterJobfile.encoding: UTF-8java.specification.version: 1.8java.class.path: F:\work\ListDemo\binuser.name: Administratorjava.vm.specification.version: 1.8sun.java.command: com.pb.system.demo1.SystemDemo1java.home: C:\Java\jre1.8.0_60sun.arch.data.model: 64user.language: zhjava.specification.vendor: Oracle Corporationawt.toolkit: sun.awt.windows.WToolkitjava.vm.info: mixed modejava.version: 1.8.0_60java.ext.dirs: C:\Java\jre1.8.0_60\lib\ext;C:\Windows\Sun\Java\lib\extsun.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\classesjava.vendor: Oracle Corporationfile.separator: \java.vendor.url.bug: http://bugreport.sun.com/bugreport/sun.io.unicode.encoding: UnicodeLittlesun.cpu.endian: littlesun.desktop: windowssun.cpu.isalist: amd64

 

 

 

二、Runtime

2.1、Runtime概述

 

每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。可以通过 getRuntime 方法获取当前运行时。

 

应用程序不能创建自己的 Runtime 类实例。

 java.lang.Runtime

static RuntimegetRuntime()
返回与当前 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 表示特定的瞬间,精确到毫秒

方法摘要
booleanafter(Date when)
测试此日期是否在指定日期之后。
booleanbefore(Date when)
测试此日期是否在指定日期之前。
Objectclone()
返回此对象的副本。
intcompareTo(Date anotherDate)
比较两个日期的顺序。
booleanequals(Object obj)
比较两个日期的相等性。
intgetDate()
已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.DAY_OF_MONTH) 取代。
intgetDay()
已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.DAY_OF_WEEK) 取代。
intgetHours()
已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.HOUR_OF_DAY) 取代。
intgetMinutes()
已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.MINUTE) 取代。
intgetMonth()
已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.MONTH) 取代。
intgetSeconds()
已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.SECOND) 取代。
longgetTime()
返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
intgetTimezoneOffset()
已过时。 从 JDK 1.1 开始,由 -(Calendar.get(Calendar.ZONE_OFFSET) + Calendar.get(Calendar.DST_OFFSET)) / (60 * 1000) 取代。
intgetYear()
已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.YEAR) - 1900 取代。
inthashCode()
返回此对象的哈希码值。
static longparse(String s)
已过时。 从 JDK 1.1 开始,由 DateFormat.parse(String s) 取代。
voidsetDate(int date)
已过时。 从 JDK 1.1 开始,由 Calendar.set(Calendar.DAY_OF_MONTH, int date) 取代。
voidsetHours(int hours)
已过时。 从 JDK 1.1 开始,由 Calendar.set(Calendar.HOUR_OF_DAY, int hours) 取代。
voidsetMinutes(int minutes)
已过时。 从 JDK 1.1 开始,由 Calendar.set(Calendar.MINUTE, int minutes) 取代。
voidsetMonth(int month)
已过时。 从 JDK 1.1 开始,由 Calendar.set(Calendar.MONTH, int month) 取代。
voidsetSeconds(int seconds)
已过时。 从 JDK 1.1 开始,由 Calendar.set(Calendar.SECOND, int seconds) 取代。
voidsetTime(long time)
设置此 Date 对象,以表示 1970 年 1 月 1 日 00:00:00 GMT 以后 time 毫秒的时间点。
voidsetYear(int year)
已过时。 从 JDK 1.1 开始,由 Calendar.set(Calendar.YEAR, year + 1900) 取代。
StringtoGMTString()
已过时。 从 JDK 1.1 开始,由 DateFormat.format(Date date) 取代,使用 GMT TimeZone
StringtoLocaleString()
已过时。 从 JDK 1.1 开始,由 DateFormat.format(Date date) 取代。
StringtoString()
把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。
static longUTC(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' 都被保留):

 

字母日期或时间元素表示示例
GEra 标志符TextAD
yYear1996; 96
M年中的月份MonthJuly; Jul; 07
w年中的周数Number27
W月份中的周数Number2
D年中的天数Number189
d月份中的天数Number10
F月份中的星期Number2
E星期中的天数TextTuesday; Tue
aAm/pm 标记TextPM
H一天中的小时数(0-23)Number0
k一天中的小时数(1-24)Number24
Kam/pm 中的小时数(0-11)Number0
ham/pm 中的小时数(1-12)Number12
m小时中的分钟数Number30
s分钟中的秒数Number55
S毫秒数Number978
z时区General time zonePacific 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 doubleE
比任何其他值都更接近 e(即自然对数的底数)的 double 值。
static doublePI
比任何其他值都更接近 pi(即圆的周长与直径之比)的 double 值。

方法摘要
static doubleabs(double a)
返回 double 值的绝对值。
static floatabs(float a)
返回 float 值的绝对值。
static intabs(int a)
返回 int 值的绝对值。
static longabs(long a)
返回 long 值的绝对值。
static doubleacos(double a)
返回一个值的反余弦;返回的角度范围在 0.0 到 pi 之间。
static doubleasin(double a)
返回一个值的反正弦;返回的角度范围在 -pi/2 到 pi/2 之间。
static doubleatan(double a)
返回一个值的反正切;返回的角度范围在 -pi/2 到 pi/2 之间。
static doubleatan2(double y, double x)
将矩形坐标 (x, y) 转换成极坐标 (r, theta),返回所得角 theta
static doublecbrt(double a)
返回 double 值的立方根。
static doubleceil(double a)
返回最小的(最接近负无穷大)double 值,该值大于等于参数,并等于某个整数。
static doublecopySign(double magnitude, double sign)
返回带有第二个浮点参数符号的第一个浮点参数。
static floatcopySign(float magnitude, float sign)
返回带有第二个浮点参数符号的第一个浮点参数。
static doublecos(double a)
返回角的三角余弦。
static doublecosh(double x)
返回 double 值的双曲线余弦。
static doubleexp(double a)
返回欧拉数 edouble 次幂的值。
static doubleexpm1(double x)
返回 ex -1。
static doublefloor(double a)
返回最大的(最接近正无穷大)double 值,该值小于等于参数,并等于某个整数。
static intgetExponent(double d)
返回 double 表示形式中使用的无偏指数。
static intgetExponent(float f)
返回 float 表示形式中使用的无偏指数。
static doublehypot(double x, double y)
返回 sqrt(x2 +y2),没有中间溢出或下溢。
static doubleIEEEremainder(double f1, double f2)
按照 IEEE 754 标准的规定,对两个参数进行余数运算。
static doublelog(double a)
返回 double 值的自然对数(底数是 e)。
static doublelog10(double a)
返回 double 值的底数为 10 的对数。
static doublelog1p(double x)
返回参数与 1 之和的自然对数。
static doublemax(double a, double b)
返回两个 double 值中较大的一个。
static floatmax(float a, float b)
返回两个 float 值中较大的一个。
static intmax(int a, int b)
返回两个 int 值中较大的一个。
static longmax(long a, long b)
返回两个 long 值中较大的一个。
static doublemin(double a, double b)
返回两个 double 值中较小的一个。
static floatmin(float a, float b)
返回两个 float 值中较小的一个。
static intmin(int a, int b)
返回两个 int 值中较小的一个。
static longmin(long a, long b)
返回两个 long 值中较小的一个。
static doublenextAfter(double start, double direction)
返回第一个参数和第二个参数之间与第一个参数相邻的浮点数。
static floatnextAfter(float start, double direction)
返回第一个参数和第二个参数之间与第一个参数相邻的浮点数。
static doublenextUp(double d)
返回 d 和正无穷大之间与 d 相邻的浮点值。
static floatnextUp(float f)
返回 f 和正无穷大之间与 f 相邻的浮点值。
static doublepow(double a, double b)
返回第一个参数的第二个参数次幂的值。
static doublerandom()
返回带正号的 double 值,该值大于等于 0.0 且小于 1.0
static doublerint(double a)
返回最接近参数并等于某一整数的 double 值。
static longround(double a)
返回最接近参数的 long
static intround(float a)
返回最接近参数的 int
static doublescalb(double d, int scaleFactor)
返回 d × 2scaleFactor,其舍入方式如同将一个正确舍入的浮点值乘以 double 值集合中的一个值。
static floatscalb(float f, int scaleFactor)
返回 f × 2scaleFactor,其舍入方式如同将一个正确舍入的浮点值乘以 float 值集合中的一个值。
static doublesignum(double d)
返回参数的符号函数;如果参数为 0,则返回 0;如果参数大于 0,则返回 1.0;如果参数小于 0,则返回 -1.0。
static floatsignum(float f)
返回参数的符号函数;如果参数为 0,则返回 0;如果参数大于 0,则返回 1.0;如果参数小于 0,则返回 -1.0。
static doublesin(double a)
返回角的三角正弦。
static doublesinh(double x)
返回 double 值的双曲线正弦。
static doublesqrt(double a)
返回正确舍入的 double 值的正平方根。
static doubletan(double a)
返回角的三角正切。
static doubletanh(double x)
返回 double 值的双曲线余弦。
static doubletoDegrees(double angrad)
将用弧度表示的角转换为近似相等的用角度表示的角。
static doubletoRadians(double angdeg)
将用角度表示的角转换为近似相等的用弧度表示的角。
static doubleulp(double d)
返回参数的 ulp 大小。
static floatulp(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 intnext(int bits)
生成下一个伪随机数。
booleannextBoolean()
返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的 boolean 值。
voidnextBytes(byte[] bytes)
生成随机字节并将其置于用户提供的 byte 数组中。
doublenextDouble()
返回下一个伪随机数,它是取自此随机数生成器序列的、在 0.01.0 之间均匀分布的 double 值。
floatnextFloat()
返回下一个伪随机数,它是取自此随机数生成器序列的、在 0.01.0 之间均匀分布的 float 值。
doublenextGaussian()
返回下一个伪随机数,它是取自此随机数生成器序列的、呈高斯(“正态”)分布的 double 值,其平均值是 0.0,标准差是 1.0
intnextInt()
返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。
intnextInt(int n)
返回一个伪随机数,它是取自此随机数生成器序列的、在 0(包括)和指定值(不包括)之间均匀分布的 int 值。
longnextLong()
返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的 long 值。
voidsetSeed(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);  }}