--------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IO开发S</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

11、其他对象

11.1System类

11.1.1System类声明

java.lang 
类 System

java.lang.Object

java.lang.System


public final class System

extends Object

System 类包含一些有用的类字段和方法。它不能被实例化。(没有构造函数)

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

从以下版本开始:

JDK1.0

11.1.2System类字段

 

字段摘要

static PrintStream

err 
“标准”错误输出流。

static InputStream

in 
“标准”输入流。

static PrintStream

out 
“标准”输出流。

11.1.3System类方法

方法摘要

static void

arraycopy(Object src, int srcPos,Object dest, int destPos, int length) 
从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。

static String

clearProperty(String key)
移除指定键指示的系统属性。

static Console

console() 
返回与当前 Java 虚拟机关联的唯一 Console 对象(如果有)。

static long

currentTimeMillis() 
返回以毫秒为单位的当前时间。

static void

exit(int status) 
终止当前正在运行的 Java 虚拟机。

static void

gc() 
运行垃圾回收器。

staticMap<String,String>

getenv() 
返回一个不能修改的当前系统环境的字符串映射视图。

static String

getenv(String name)
获取指定的环境变量值。

static Properties

getProperties()(演示)
确定当前的系统属性。

static String

getProperty(String key)
获取指定键指示的系统属性。

static String

getProperty(String key,String def) 
获取用指定键描述的系统属性。

staticSecurityManager

getSecurityManager() 
获取系统安全接口。

static int

identityHashCode(Object x)
返回给定对象的哈希码,该代码与默认的方法 hashCode() 返回的代码一样,无论给定对象的类是否重写 hashCode()。

static Channel

inheritedChannel() 
返回从创建此 Java 虚拟机的实体中继承的信道。

static void

load(String filename)
从作为动态库的本地文件系统中以指定的文件名加载代码文件。

static void

loadLibrary(String libname)
加载由 libname 参数指定的系统库。

static String

mapLibraryName(String libname)
将一个库名称映射到特定于平台的、表示本机库的字符串中。

static long

nanoTime() 
返回最准确的可用系统计时器的当前值,以毫微秒为单位。

static void

runFinalization() 
运行处于挂起终止状态的所有对象的终止方法。

static void

runFinalizersOnExit(boolean value)
已过时。 该方法具有固有的不安全性。它可能对正在使用的对象调用终结方法,而其他线程同时正在操作这些对象,从而导致不正确的行为或死锁。

static void

setErr(PrintStream err)
重新分配“标准”错误输出流。

static void

setIn(InputStream in)
重新分配“标准”输入流。

static void

setOut(PrintStream out)
重新分配“标准”输出流。

static void

setProperties(Properties props)
将系统属性设置为 Properties 参数。

static String

setProperty(String key,String value) 
设置指定键指示的系统属性。

static void

setSecurityManager(SecurityManager s)
设置系统安全性。

从类 java.lang.Object 继承的方法

clone, equals, finalize,getClass, hashCode, notify, notifyAll, toString, wait, wait,wait

11.1.4System类代码示例

/*
System:类中的方法和属性都是静态的。
out:标准输出,默认是控制台。
in:标准输入,默认是键盘。
描述系统一些信息。
获取系统属性信息:Properties getProperties();
*/
import java.util.*;
class SystemDemo
{
public static void main(String[] args)
{
Properties prop = System.getProperties();
//因为Properties是Hashtable的子类,也就是Map集合的一个子类对象。那么可以通过map的方法取出该集合中的元素。该集合中存储都是字符串。没有泛型定义。
//如何在系统中自定义一些特有信息呢?
System.setProperty("mykey","myvalue");
//获取指定属性信息。
String value = System.getProperty("os.name");
System.out.println("value="+value);
//可不可以在jvm启动时,动态加载一些属性信息呢?
//在java运行时使用  java -Dhaha=qq SystemDemo时可以动态的加载
String v = System.getProperty("haha");
System.out.println("v="+v);
/*
//获取所有属性信息。
for(Object obj : prop.keySet())
{
String value = (String)prop.get(obj);
System.out.println(obj+"::"+value);
}
*/
}
}

11.2Runtime类

11.2.1Runtime类声明:

java.lang 
类 Runtime

java.lang.Object

java.lang.Runtime


public class Runtime

extends Object

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

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

从以下版本开始:

JDK1.0

另请参见:

getRuntime()

11.2.2Runtime类方法

方法摘要

void

addShutdownHook(Thread hook)
注册新的虚拟机来关闭钩子。

int

availableProcessors() 
向 Java 虚拟机返回可用处理器的数目。

Process

exec(String command)
在单独的进程中执行指定的字符串命令。

Process

exec(String[] cmdarray)
在单独的进程中执行指定命令和变量。

Process

exec(String[] cmdarray,String[] envp) 
在指定环境的独立进程中执行指定命令和变量。

Process

exec(String[] cmdarray,String[] envp, File dir) 
在指定环境和工作目录的独立进程中执行指定的命令和变量。

Process

exec(String command,String[] envp) 
在指定环境的单独进程中执行指定的字符串命令。

Process

exec(String command,String[] envp, File dir) 
在有指定环境和工作目录的独立进程中执行指定的字符串命令。

void

exit(int status) 
通过启动虚拟机的关闭序列,终止当前正在运行的 Java 虚拟机。

long

freeMemory() 
返回 Java 虚拟机中的空闲内存量。

void

gc() 
运行垃圾回收器。

InputStream

getLocalizedInputStream(InputStream in)
已过时。 从 JDK 1.1 开始,将本地编码字节流转换为 Unicode 字符流的首选方法是使用 InputStreamReader 和 BufferedReader 类。

OutputStream

getLocalizedOutputStream(OutputStream out)
已过时。 从 JDK 1.1 开始,将 Unicode 字符流转换为本地编码字节流的首选方法是使用 OutputStreamWriter、BufferedWriter 和 PrintWriter 类。

staticRuntime

getRuntime() 
返回与当前 Java 应用程序相关的运行时对象。

void

halt(int status) 
强行终止目前正在运行的 Java 虚拟机。

void

load(String filename)
加载作为动态库的指定文件名。

void

loadLibrary(String libname)
加载具有指定库名的动态库。

long

maxMemory() 
返回 Java 虚拟机试图使用的最大内存量。

boolean

removeShutdownHook(Thread hook)
取消注册某个先前已注册的虚拟机关闭钩子。

void

runFinalization() 
运行挂起 finalization 的所有对象的终止方法。

static void

runFinalizersOnExit(boolean value)
已过时。 此方法本身具有不安全性。它可能对正在使用的对象调用终结方法,而其他线程正在操作这些对象,从而导致不正确的行为或死锁。

long

totalMemory() 
返回 Java 虚拟机中的内存总量。

void

traceInstructions(boolean on) 
启用/禁用指令跟踪。

void

traceMethodCalls(boolean on) 
启用/禁用方法调用跟踪。

从类 java.lang.Object 继承的方法

clone, equals, finalize,getClass, hashCode, notify, notifyAll, toString, wait, wait,wait

11.2.3Runtime类代码示例:

/*
Runtime对象
该类并没有提供构造函数。
说明不可以new对象。那么会直接想到该类中的方法都是静态的。
发现该类中还有非静态方法。
说明该类肯定会提供了方法获取本类对象。而且该方法是静态的,并返回值类型是本类类型。
由这个特点可以看出该类使用了单例设计模式完成。
该方法是static Runtime getRuntime();
*/
class  RuntimeDemo
{
public static void main(String[] args) throws Exception
{
Runtime r = Runtime.getRuntime();
//用记事本打开SystemDemo,java文件
Process p = r.exec("notepad.exe  SystemDemo.java");
//Thread.sleep(4000);
//p.destroy();//杀掉由exec创建的进程
}
}

11.3Date类

11.3.1Date类声明

java.util 
类 Date

java.lang.Object

java.util.Date

所有已实现的接口:

Serializable, Cloneable, Comparable<Date>

直接已知子类:

Date, Time, Timestamp


public class Date

extends Object

implements Serializable, Cloneable, Comparable<Date>

类 Date 表示特定的瞬间,精确到毫秒。

在JDK 1.1 之前,类 Date 有两个其他的函数。它允许把日期解释为年、月、日、小时、分钟和秒值。它也允许格式化和解析日期字符串。不过,这些函数的 API 不易于实现国际化。从 JDK 1.1 开始,应该使用 Calendar 类实现日期和时间字段之间转换,使用 DateFormat 类来格式化和解析日期字符串。Date 中的相应方法已废弃。

尽管 Date 类打算反映协调世界时 (UTC),但无法做到如此准确,这取决于 Java 虚拟机的主机环境。当前几乎所有操作系统都假定 1 天 = 24 × 60 × 60 = 86400 秒。但对于 UTC,大约每一两年出现一次额外的一秒,称为“闰秒”。闰秒始终作为当天的最后一秒增加,并且始终在 12 月 31 日或 6 月 30 日增加。例如,1995 年的最后一分钟是 61 秒,因为增加了闰秒。大多数计算机时钟不是特别的准确,因此不能反映闰秒的差别。

一些计算机标准是按照格林威治标准时 (GMT) 定义的,格林威治标准时和世界时 (UT) 是相等的。GMT 是标准的“民间”名称;UT 是相同标准的“科学”名称。UTC 和 UT 的区别是:UTC 是基于原子时钟的,UT 是基于天体观察的,两者在实际应用中难分轩轾。因为地球的旋转不是均匀的(它以复杂的方式减速和加速),所以 UT 始终不是均匀地流过。闰秒是根据需要引入 UTC 的,以便把 UTC 保持在 UT1 的 0.9 秒之内,UT1 是应用了某些更正的 UT 版本。还有其他的时间和日期系统;例如,基于卫星的全球定位系统 (GPS) 使用的时间刻度与 UTC 同步,但没有 针对闰秒进行调整。有关更多信息的一个有趣来源是美国海军天文台,特别是 Directorate of Time 的网址:

http://tycho.usno.navy.mil

还有它们对 "Systems of Time" 的定义,网址为:

http://tycho.usno.navy.mil/systime.html

在类 Date 所有可以接受或返回年、月、日期、小时、分钟和秒值的方法中,将使用下面的表示形式:

  • 年份 y 由整数 y - 1900 表示。
  • 月份由从 0 至 11 的整数表示;0 是一月、1 是二月等等;因此 11 是十二月。
  • 日期(一月中的某天)按通常方式由整数 1 至 31 表示。
  • 小时由从 0 至 23 的整数表示。因此,从午夜到 1 a.m. 的时间是 0 点,从中午到 1 p.m. 的时间是 12 点。
  • 分钟按通常方式由 0 至 59 的整数表示。
  • 秒由 0 至 61 的整数表示;值 60 和 61 只对闰秒发生,尽管那样,也只用在实际正确跟踪闰秒的 Java 实现中。于按当前引入闰秒的方式,两个闰秒在同一分钟内发生是极不可能的,但此规范遵循 ISO C 的日期和时间约定。

在所有情形中,针对这些目的赋予方法的参数不需要在指定的范围内;例如,可以把日期指定为 1 月 32 日,并把它解释为 2 月 1 日的相同含义。

从以下版本开始:

JDK1.0

另请参见:

DateFormat, Calendar, TimeZone, 序列化表格


11.3.2Date类构造方法

构造方法摘要

Date() 
分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒)。

Date(int year, int month, int date)
已过时。 从 JDK 1.1 开始,由 Calendar.set(year + 1900, month, date) 或 GregorianCalendar(year + 1900, month, date) 取代。

Date(int year, int month, int date, int hrs, int min)
已过时。 从 JDK 1.1 开始,由 Calendar.set(year + 1900, month, date, hrs, min) 或 GregorianCalendar(year + 1900, month, date, hrs, min) 取代。

Date(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) 取代。

Date(long date) 
分配 Date 对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即 1970 年 1 月 1 日 00:00:00 GMT)以来的指定毫秒数。

Date(String s)
已过时。 从 JDK 1.1 开始,由 DateFormat.parse(String s) 取代。

11.3.3Date类方法

方法摘要

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()。

从类 java.lang.Object 继承的方法

finalize, getClass, notify,notifyAll, wait, wait, wait

11.3.4Date类代码示例

import java.util.*;
import java.text.*;
class DateDemo
{
public static void main(String[] args)
{
Date d = new Date();
System.out.println(d);//打印的时间看不懂,希望有些格式。
//将模式封装到SimpleDateformat对象中。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日E hh:mm:ss");
//调用format方法让模式格式化指定Date对象。
String time = sdf.format(d);
System.out.println("time="+time);
long l = System.currentTimeMillis();
Date d1 = new Date(l);
System.out.println("d1:"+d1);
}
}

11.4Calendar类

11.4.1Calendar类声明

java.util 
类 Calendar

java.lang.Object

java.util.Calendar

所有已实现的接口:

Serializable, Cloneable, Comparable<Calendar>

直接已知子类:

GregorianCalendar


public abstract class Calendar

extends Object

implements Serializable, Cloneable, Comparable<Calendar>

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

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

与其他语言环境敏感类一样,Calendar 提供了一个类方法 getInstance,以获得此类型的一个通用的对象。Calendar 的 getInstance 方法返回一个 Calendar 对象,其日历字段已由当前日期和时间初始化:

CalendarrightNow = Calendar.getInstance();

Calendar 对象能够生成为特定语言和日历风格实现日期-时间格式化所需的所有日历字段值,例如,日语-格里高里历,日语-传统日历。Calendar 定义了某些日历字段返回值的范围,以及这些值的含义。例如,对于所有日历,日历系统第一个月的值是 MONTH == JANUARY。其他值是由具体子类(例如 ERA)定义的。有关此内容的细节,请参阅每个字段的文档和子类文档。

获得并设置日历字段值

可以通过调用 set 方法来设置日历字段值。在需要计算时间值(距历元所经过的毫秒)或日历字段值之前,不会解释 Calendar 中的所有字段值设置。调用 get、getTimeInMillis、getTime、add 和 roll 涉及此类计算。

宽松性

Calendar 有两种解释日历字段的模式,即 lenient 和non-lenient。当 Calendar 处于 lenient 模式时,它可接受比它所生成的日历字段范围更大范围内的值。当 Calendar 重新计算日历字段值,以便由 get() 返回这些值时,所有日历字段都被标准化。例如,lenient 模式下的 GregorianCalendar 将 MONTH == JANUARY、DAY_OF_MONTH == 32 解释为 February 1。

当 Calendar 处于 non-lenient 模式时,如果其日历字段中存在任何不一致性,它都会抛出一个异常。例如,GregorianCalendar 总是在 1 与月份的长度之间生成DAY_OF_MONTH 值。如果已经设置了任何超出范围的字段值,那么在计算时间或日历字段值时,处于 non-lenient 模式下的 GregorianCalendar 会抛出一个异常。

第一个星期

Calendar 使用两个参数定义了特定于语言环境的 7 天制星期:星期的第一天和第一个星期中的最小一天(从 1 到 7)。这些数字取自构造 Calendar 时的语言环境资源数据。还可以通过为其设置值的方法来显式地指定它们。

在设置或获得 WEEK_OF_MONTH 或 WEEK_OF_YEAR 字段时,Calendar 必须确定一个月或一年的第一个星期,以此作为参考点。一个月或一年的第一个星期被确定为开始于getFirstDayOfWeek() 的最早七天,它最少包含那一个月或一年的 getMinimalDaysInFirstWeek() 天数。第一个星期之前的各星期编号为 ...、-1、0;之后的星期编号为 2、3、...。注意,get() 返回的标准化编号方式可能有所不同。例如,特定 Calendar 子类可能将某一年第 1 个星期之前的那个星期指定为前一年的第 n 个星期。

日历字段解析

在计算日历字段中的日期和时间时,可能没有足够的信息用于计算(例如只有年和月,但没有日),或者可能有不一致的信息( 例如 "Tuesday, July 15, 1996"(格林威治时间)——实际上,1996 年 7 月 15 日是星期一 )。Calendar 将解析日历字段值,以便用以下方式确定日期和时间。

如果日历字段值中存在任何冲突,则 Calendar 将为最近设置的日历字段提供优先权。以下是日历字段的默认组合。将使用由最近设置的单个字段所确定的最近组合。

对于日期字段:

YEAR + MONTH +DAY_OF_MONTH

YEAR + MONTH +WEEK_OF_MONTH + DAY_OF_WEEK

YEAR + MONTH +DAY_OF_WEEK_IN_MONTH + DAY_OF_WEEK

YEAR + DAY_OF_YEAR

YEAR + DAY_OF_WEEK+ WEEK_OF_YEAR

对于时间字段:

HOUR_OF_DAY

AM_PM + HOUR

如果在选定的字段组合中,还有尚未设置值的任一日历字段,那么Calendar 将使用其默认值。每个字段的默认值可能依据具体的日历系统而有所不同。例如,在GregorianCalendar 中,字段的默认值与历元起始部分的字段值相同:即 YEAR = 1970、MONTH = JANUARY、DAY_OF_MONTH = 1,等等。

注: 对于某些特别时间的解释可能会有某些歧义,可以用下列方式解决:

  1. 23:59 是一天中的最后一分钟,而 00:00 是下一天的第一分钟。因此,1999 年 12 月 31 日的 23:59 < 2000 年 1 月 1 日的 00:00。
  2. 尽管从历史上看不够精确,但午夜也属于 "am",,中午属于 "pm",所以在同一天,12:00 am ( 午夜 ) < 12:01 am,12:00 pm ( 中午 ) < 12:01 pm。

日期或时间格式字符串不是日历定义的一部分,因为在运行时,用户必须能够修改或重写它们。可以使用DateFormat 格式化日期。

字段操作

可以使用三种方法更改日历字段:set()、add() 和 roll()。

set(f, value) 将日历字段 f 更改为 value。此外,它设置了一个内部成员变量,以指示日历字段 f 已经被更改。尽管日历字段f 是立即更改的,但是直到下次调用 get()、getTime()、getTimeInMillis()、add() 或 roll() 时才会重新计算日历的时间值(以毫秒为单位)。因此,多次调用 set() 不会触发多次不必要的计算。使用 set() 更改日历字段的结果是,其他日历字段也可能发生更改,这取决于日历字段、日历字段值和日历系统。此外,在重新计算日历字段之后,get(f) 没必要通过调用 set 方法返回 value 集合。具体细节是通过具体的日历类确定的。

示例:假定 GregorianCalendar 最初被设置为 1999 年 8 月 31 日。调用 set(Calendar.MONTH, Calendar.SEPTEMBER) 将该日期设置为 1999 年9 月 31 日。如果随后调用 getTime(),那么这是解析 1999 年 10 月 1 日的一个暂时内部表示。但是,在调用 getTime() 之前调用 set(Calendar.DAY_OF_MONTH,30) 会将该日期设置为 1999年 9 月 30 日,因为在调用 set() 之后没有发生重新计算。

add(f, delta) 将 delta 添加到 f 字段中。这等同于调用 set(f, get(f) + delta),但要带以下两个调整:

Add 规则 1。调用后 f 字段的值减去调用前 f 字段的值等于 delta,以字段 f 中发生的任何溢出为模。溢出发生在字段值超出其范围时,结果,下一个更大的字段会递增或递减,并将字段值调整回其范围内。

Add 规则 2。如果期望某一个更小的字段是不变的,但让它等于以前的值是不可能的,因为在字段 f 发生更改之后,或者在出现其他约束之后,比如时区偏移量发生更改,它的最大值和最小值也在发生更改,然后它的值被调整为尽量接近于所期望的值。更小的字段表示一个更小的时间单元。HOUR 是一个比 DAY_OF_MONTH 小的字段。对于不期望是不变字段的更小字段,无需进行任何调整。日历系统会确定期望不变的那些字段。

此外,与 set() 不同,add() 强迫日历系统立即重新计算日历的毫秒数和所有字段。

示例:假定 GregorianCalendar 最初被设置为 1999 年 8 月 31 日。调用 add(Calendar.MONTH, 13) 将日历设置为 2000 年9 月 30 日。Add 规则 1 将 MONTH 字段设置为 September,因为向 August 添加 13 个月得出的就是下一年的 September。因为在 GregorianCalendar 中,DAY_OF_MONTH 不可能是 9 月 31 日,所以 add 规则 2 将DAY_OF_MONTH 设置为 30,即最可能的值。尽管它是一个更小的字段,但不能根据规则 2 调整 DAY_OF_WEEK,因为在 GregorianCalendar 中的月份发生变化时,该值也需要发生变化。

roll(f, delta) 将 delta 添加到 f 字段中,但不更改更大的字段。这等同于调用 add(f, delta),但要带以下调整:

Roll 规则。在完成调用后,更大的字段无变化。更大的字段表示一个更大的时间单元。DAY_OF_MONTH 是一个比 HOUR 大的字段。

示例:请参阅 GregorianCalendar.roll(int, int)。

使用模型。为了帮助理解 add() 和 roll() 的行为,假定有一个用户界面组件,它带有用于月、日、年和底层 GregorianCalendar 的递增或递减按钮。如果从界面上读取的日期为 1999 年 1 月 31 日,并且用户按下月份的递增按钮,那么应该得到什么?如果底层实现使用set(),那么可以将该日期读为 1999 年 3 月 3 日。更好的结果是 1999 年 2月 28 日。此外,如果用户再次按下月份的递增按钮,那么该日期应该读为 1999 年 3 月 31 日,而不是 1999 年 3 月 28 日。通过保存原始日期并使用add() 或 roll(),根据是否会影响更大的字段,用户界面可以像大多数用户所期望的那样运行。

从以下版本开始:

JDK1.1

另请参见:

System.currentTimeMillis(), Date, GregorianCalendar, TimeZone, DateFormat, 序列化表格

11.4.2Calendar类字段

字段摘要

static int

ALL_STYLES 
指示所有风格名称的 getDisplayNames 的风格说明符,比如 "January" 和 "Jan"。

static int

AM 
指示从午夜到中午之前这段时间的 AM_PM 字段值。

static int

AM_PM 
get 和 set 的字段数字,指示 HOUR 是在中午之前还是在中午之后。

static int

APRIL 
指示在格里高利历和罗马儒略历中一年中第四个月的 MONTH 字段值。

protected boolean

areFieldsSet 
如果 fields[] 与当前的设置时间同步,则返回 true。

static int

AUGUST 
指示在格里高利历和罗马儒略历中一年中第八个月的 MONTH 字段值。

static int

DATE 
get 和 set 的字段数字,指示一个月中的某天。

static int

DAY_OF_MONTH 
get 和 set 的字段数字,指示一个月中的某天。

static int

DAY_OF_WEEK 
get 和 set 的字段数字,指示一个星期中的某天。

static int

DAY_OF_WEEK_IN_MONTH 
get 和 set 的字段数字,指示当前月中的第几个星期。

static int

DAY_OF_YEAR 
get 和 set 的字段数字,指示当前年中的天数。

static int

DECEMBER 
指示在格里高利历和罗马儒略历中一年中第十二个月的 MONTH 字段值。

static int

DST_OFFSET 
get 和 set 的字段数字,以毫秒为单位指示夏令时的偏移量。

static int

ERA 
指示年代的 get 和 set 的字段数字,比如罗马儒略历中的 AD 或 BC。

static int

FEBRUARY 
指示在格里高利历和罗马儒略历中一年中第二个月的 MONTH 字段值。

static int

FIELD_COUNT 
get 和 set 可识别的不同字段的数量。

protected int[]

fields 
此日历当前设置时间的日历字段值。

static int

FRIDAY 
指示 Friday 的 DAY_OF_WEEK 字段值。

static int

HOUR 
get 和 set 的字段数字,指示上午或下午的小时。

static int

HOUR_OF_DAY 
get 和 set 的字段数字,指示一天中的小时。

protected boolean[]

isSet 
通知是否设置了该日历某一指定日历字段的标志。

protected boolean

isTimeSet 
如果 time 值是一个有效值,则返回 true。

static int

JANUARY 
指示在格里高利历和罗马儒略历中一年中第一个月的 MONTH 字段值。

static int

JULY 
指示在格里高利历和罗马儒略历中一年中第七个月的 MONTH 字段值。

static int

JUNE 
指示在格里高利历和罗马儒略历中一年中第六个月的 MONTH 字段值。

static int

LONG 
指示长名称的 getDisplayName 和 getDisplayNames 的风格说明符,比如 "January"。

static int

MARCH 
指示在格里高利历和罗马儒略历中一年中第三个月的 MONTH 字段值。

static int

MAY 
指示在格里高利历和罗马儒略历中一年中第五个月的 MONTH 字段值。

static int

MILLISECOND 
get 和 set 的字段数字,指示一秒中的毫秒。

static int

MINUTE 
get 和 set 的字段数字,指示一小时中的分钟。

static int

MONDAY 
指示 Monday 的 DAY_OF_WEEK 字段值。

static int

MONTH 
指示月份的 get 和 set 的字段数字。

static int

NOVEMBER 
指示在格里高利历和罗马儒略历中一年中第十一个月的 MONTH 字段值。

static int

OCTOBER 
指示在格里高利历和罗马儒略历中一年中第十个月的 MONTH 字段值。

static int

PM 
指示从中午到午夜之前这段时间的 AM_PM 字段值。

static int

SATURDAY 
指示 Saturday 的 DAY_OF_WEEK 字段值。

static int

SECOND 
get 和 set 的字段数字,指示一分钟中的秒。

static int

SEPTEMBER 
指示在格里高利历和罗马儒略历中一年中第九个月的 MONTH 字段值。

static int

SHORT 
指示短名称的 getDisplayName 和 getDisplayNames 的风格说明符,比如 "Jan"。

static int

SUNDAY 
指示 Sunday 的 DAY_OF_WEEK 字段值。

static int

THURSDAY 
指示 Thursday 的 DAY_OF_WEEK 字段值。

protected long

time 
日历的当前设置时间,以毫秒为单位,表示自格林威治标准时间 1970 年 1月 1 日 0:00:00 后经过的时间。

static int

TUESDAY 
指示 Tuesday 的 DAY_OF_WEEK 字段值。

static int

UNDECIMBER 
指示一年中第十三个月的 MONTH 字段值。

static int

WEDNESDAY 
指示 Wednesday 的 DAY_OF_WEEK 字段值。

static int

WEEK_OF_MONTH 
get 和 set 的字段数字,指示当前月中的星期数。

static int

WEEK_OF_YEAR 
get 和 set 的字段数字,指示当前年中的星期数。

static int

YEAR 
指示年的 get 和 set 的字段数字。

static int

ZONE_OFFSET 
get 和 set 的字段数字,以毫秒为单位指示距 GMT 的大致偏移量。

11.4.3Calendar类构造方法

构造方法摘要

protected

Calendar() 
构造一个带有默认时区和语言环境的 Calendar。

protected

Calendar(TimeZone zone,Locale aLocale) 
构造一个带有指定时区和语言环境的 Calendar。

11.4.4Calendar类方法

方法摘要

abstract void

add(int field, int amount) 
根据日历的规则,为给定的日历字段添加或减去指定的时间量。

boolean

after(Object when)
判断此 Calendar 表示的时间是否在指定 Object 表示的时间之后,返回判断结果。

boolean

before(Object when)
判断此 Calendar 表示的时间是否在指定 Object 表示的时间之前,返回判断结果。

void

clear() 
将此 Calendar 的所日历字段值和时间值(从历元至现在的毫秒偏移量)设置成未定义。

void

clear(int field) 
将此 Calendar 的给定日历字段值和时间值(从历元至现在的毫秒偏移量)设置成未定义。

Object

clone() 
创建并返回此对象的一个副本。

int

compareTo(Calendar anotherCalendar)
比较两个 Calendar 对象表示的时间值(从历元至现在的毫秒偏移量)。

protected void

complete() 
填充日历字段中所有未设置的字段。

protected abstract void

computeFields() 
将当前毫秒时间值 time 转换为 fields[] 中的日历字段值。

protected abstract void

computeTime() 
将 fields[] 中的当前日历字段值转换为毫秒时间值 time。

boolean

equals(Object obj)
将此 Calendar 与指定 Object 比较。

int

get(int field) 
返回给定日历字段的值。

int

getActualMaximum(int field) 
给定此 Calendar 的时间值,返回指定日历字段可能拥有的最大值。

int

getActualMinimum(int field) 
给定此 Calendar 的时间值,返回指定日历字段可能拥有的最小值。

static Locale[]

getAvailableLocales() 
返回所有语言环境的数组,此类的 getInstance 方法可以为其返回本地化的实例。

String

getDisplayName(int field, int style,Locale locale) 
返回给定 style 和 locale 下的日历 field 值的字符串表示形式。

Map<String,Integer>

getDisplayNames(int field, int style,Locale locale) 
返回给定 style 和 locale 下包含日历 field 所有名称的 Map 及其相应字段值。

int

getFirstDayOfWeek() 
获取一星期的第一天;例如,在美国,这一天是 SUNDAY,而在法国,这一天是 MONDAY。

abstract int

getGreatestMinimum(int field) 
返回此 Calendar 实例给定日历字段的最高的最小值。

static Calendar

getInstance() 
使用默认时区和语言环境获得一个日历。

static Calendar

getInstance(Locale aLocale)
使用默认时区和指定语言环境获得一个日历。

static Calendar

getInstance(TimeZone zone)
使用指定时区和默认语言环境获得一个日历。

static Calendar

getInstance(TimeZone zone,Locale aLocale) 
使用指定时区和语言环境获得一个日历。

abstract int

getLeastMaximum(int field) 
返回此 Calendar 实例给定日历字段的最低的最大值。

abstract int

getMaximum(int field) 
返回此 Calendar 实例给定日历字段的最大值。

int

getMinimalDaysInFirstWeek() 
获取一年中第一个星期所需的最少天数,例如,如果定义第一个星期包含一年第一个月的第一天,则此方法将返回 1。

abstract int

getMinimum(int field) 
返回此 Calendar 实例给定日历字段的最小值。

Date

getTime() 
返回一个表示此 Calendar 时间值(从历元至现在的毫秒偏移量)的 Date 对象。

long

getTimeInMillis() 
返回此 Calendar 的时间值,以毫秒为单位。

TimeZone

getTimeZone() 
获得时区。

int

hashCode() 
返回该此日历的哈希码。

protected int

internalGet(int field) 
返回给定日历字段的值。

boolean

isLenient() 
判断日期/时间的解释是否为宽松的。

boolean

isSet(int field) 
确定给定日历字段是否已经设置了一个值,其中包括因为调用 get 方法触发内部字段计算而导致已经设置该值的情况。

abstract void

roll(int field, boolean up) 
在给定的时间字段上添加或减去(上/下)单个时间单元,不更改更大的字段。

void

roll(int field, int amount) 
向指定日历字段添加指定(有符号的)时间量,不更改更大的字段。

void

set(int field, int value) 
将给定的日历字段设置为给定值。

void

set(int year, int month, int date)
设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值。

void

set(int year, int month, int date, int hourOfDay, int minute)
设置日历字段 YEAR、MONTH、DAY_OF_MONTH、HOUR_OF_DAY 和 MINUTE 的值。

void

set(int year, int month, int date, int hourOfDay, int minute, int second)
设置字段 YEAR、MONTH、DAY_OF_MONTH、HOUR、MINUTE 和 SECOND 的值。

void

setFirstDayOfWeek(int value) 
设置一星期的第一天是哪一天;例如,在美国,这一天是 SUNDAY,而在法国,这一天是 MONDAY。

void

setLenient(boolean lenient) 
指定日期/时间解释是否是宽松的。

void

setMinimalDaysInFirstWeek(int value)
设置一年中第一个星期所需的最少天数,例如,如果定义第一个星期包含一年第一个月的第一天,则使用值 1 调用此方法。

void

setTime(Date date)
使用给定的 Date 设置此 Calendar 的时间。

void

setTimeInMillis(long millis) 
用给定的 long 值设置此 Calendar 的当前时间值。

void

setTimeZone(TimeZone value)
使用给定的时区值来设置时区。

String

toString() 
返回此日历的字符串表示形式。

从类 java.lang.Object 继承的方法

finalize, getClass, notify,notifyAll, wait, wait, wait

11.4.5Calendar类代码示例一

import java.util.*;
import java.text.*;
class  CalendarDemo
{
public static void main(String[] args)
{
Calendar c = Calendar.getInstance();
String[] mons = {"一月","二月","三月","四月"
,"五月","六月","七月","八月"
,"九月","十月","十一月","十二月"};
String[] weeks = {
"","星期日","星期一","星期二","星期三","星期四","星期五","星期六",
};
int index = c.get(Calendar.MONTH);
int index1 = c.get(Calendar.DAY_OF_WEEK);
sop(c.get(Calendar.YEAR)+"年");
//sop((c.get(Calendar.MONTH)+1)+"月");
sop(mons[index]);
sop(c.get(Calendar.DAY_OF_MONTH)+"日");
//sop("星期"+c.get(Calendar.DAY_OF_WEEK));
sop(weeks[index1]);
/*
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
String year = sdf.format(d);
System.out.println(year);
*/
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}

11.4.6Calendar类代码示例二

import java.util.*;
/*
两个练习:
1,获取任意年的二月有多少天。
思路:根据指定年设置一个时间就是
c.set(year,2,1)//某一年的3月1日。
c.add(Calenar.DAY_OF_MONTH,-1);//3月1日,往前推一天,就是2月最后一天。
2,获取昨天的现在这个时刻。
c.add(Calenar.DAY_OF_MONTH,-1);
class  CalendarDemo2
{
public static void main(String[] args)
{
Calendar c = Calendar.getInstance();
//c.set(2012,2,23);
c.add(Calendar.DAY_OF_MONTH,-18);
printCalendar(c);
}
public static void printCalendar(Calendar c)
{
String[] mons = {"一月","二月","三月","四月"
,"五月","六月","七月","八月"
,"九月","十月","十一月","十二月"};
String[] weeks = {
"","星期日","星期一","星期二","星期三","星期四","星期五","星期六",
};
int index = c.get(Calendar.MONTH);
int index1 = c.get(Calendar.DAY_OF_WEEK);
sop(c.get(Calendar.YEAR)+"年");
//sop((c.get(Calendar.MONTH)+1)+"月");
sop(mons[index]);
sop(c.get(Calendar.DAY_OF_MONTH)+"日");
//sop("星期"+c.get(Calendar.DAY_OF_WEEK));
sop(weeks[index1]);
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}

11.5Math类

11.5.1Math类声明

java.lang 
类 Math

java.lang.Object
java.lang.Math

public final class Math
extends Object

Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。

与 StrictMath 类的某些数学方法不同,并非Math 类所有等价函数的实现都定义为返回逐位相同的结果。此类在不需要严格重复的地方可以得到更好的执行。

默认情况下,很多 Math 方法仅调用StrictMath 中的等价方法来完成它们的实现。建议代码生成器使用特定于平台的本机库或者微处理器指令(可用时)来提供Math 方法更高性能的实现。这种更高性能的实现仍然必须遵守Math 的规范。

实现规范的质量涉及到两种属性,即返回结果的准确性和方法的单调性。浮点 Math 方法的准确性根据 ulp(units in the last place,最后一位的进退位)来衡量。对于给定的浮点格式,特定实数值的 ulp 是包括该数值的两个浮点值的差。当作为一个整体而不是针对具体参数讨论方法的准确性时,引入的 ulp 数用于任何参数最差情况下的误差。如果一个方法的误差总是小于 0.5 ulp,那么该方法始终返回最接近准确结果的浮点数;这种方法就是正确舍入。一个正确舍入的方法通常能得到最佳的浮点近似值;然而,对于许多浮点方法,进行正确舍入有些不切实际。相反,对于Math 类,某些方法允许误差在 1 或 2 ulp 的范围内。非正式地,对于 1 ulp 的误差范围,当准确结果是可表示的数值时,应该按照计算结果返回准确结果;否则,返回包括准确结果的两个浮点值中的一个。对于值很大的准确结果,括号的一端可以是无穷大。除了个别参数的准确性之外,维护不同参数的方法之间的正确关系也很重要。因此,大多数误差大于 0.5 ulp 的方法都要求是半单调的:只要数学函数是非递减的,浮点近似值就是非递减的;同样,只要数学函数是非递增的,浮点近似值就是非递增的。并非所有准确性为 1 ulp 的近似值都能自动满足单调性要求。

从以下版本开始:

JDK1.0

11.5.2Math类字段

字段摘要

static double

E 
比任何其他值都更接近 e(即自然对数的底数)的 double 值。

static double

PI 
比任何其他值都更接近 pi(即圆的周长与直径之比)的 double 值。

11.5.3Math类方法

方法摘要

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 大小。

从类 java.lang.Object 继承的方法

clone, equals, finalize,getClass, hashCode, notify, notifyAll, toString, wait, wait,wait

11.6 Random类

11.6.1Random类声明

java.util 
类 Random

java.lang.Object
java.util.Random

所有已实现的接口:

Serializable

直接已知子类:

SecureRandom


public class Random
extends Object
implements Serializable

此类的实例用于生成伪随机数流。此类使用 48 位的种子,使用线性同余公式 (linear congruential form) 对其进行了修改(请参阅Donald Knuth 的The Art of Computer Programming,Volume 3,第 3.2.1 节)。

如果用相同的种子创建两个 Random 实例,则对每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列。为了保证此属性的实现,为类Random 指定了特定的算法。为了 Java 代码的完全可移植性,Java 实现必须让类Random 使用此处所示的所有算法。但是允许 Random 类的子类使用其他算法,只要其符合所有方法的常规协定即可。

Random 类实现的算法使用一个protected 实用工具方法,每次调用它最多可提供 32 个伪随机生成的位。

很多应用程序会发现 Math.random()方法更易于使用。

从以下版本开始:

JDK1.0

另请参见:

序列化表格

11.6.2Random类构造方法

构造方法摘要

Random() 
创建一个新的随机数生成器。

Random(long seed) 
使用单个 long 种子创建一个新的随机数生成器。

11.6.3Random类方法

方法摘要

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 种子设置此随机数生成器的种子。

从类 java.lang.Object 继承的方法

clone, equals, finalize,getClass, hashCode, notify, notifyAll, toString, wait, wait,wait

11.6.4Random类代码示例

/*
练习。给定一个小数。
保留该小数的后两位。
选作。可以考虑,保留时进行四舍五入。
*/
import java.util.*;
class  MathDemo
{
public static void main(String[] args)
{
/*
Random r = new Random();
for(int x=0; x<10; x++)
{
//int d = (int)(Math.random()*10+1);
int d = r.nextInt(10)+1;
sop(d);
}
*/
saveTwo(12.3456,3,true);//12.34
}
public static void saveTwo(double d,int scale,boolean isRound)
{
double base = Math.pow(10,scale);
double num = isRound?Math.round(d*base)/base:((int)(d*base))/base;
sop("num="+num);
/*
double d1 = d*100;
sop("d1="+d1);
d1 = d1+0.5;
double d2 = (int)d1;
sop("d2="+d2);
double d3 = d2/100;
sop("d3="+d3);
*/
}
public static void show()
{
double d = Math.ceil(16.34);//ceil返回大于指定数据的最小整数。
double d1 = Math.floor(12.34);//floor返回小于指定数据的最大整数。
long l = Math.round(12.54);//四舍五入
sop("d="+d);
sop("d1="+d1);
sop("l="+l);
double d2 = Math.pow(2,3);
sop("d2="+d2);
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
--------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IO开发S</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

黑马程序员---其他对象相关推荐

  1. 黑马程序员 oc对象的方法成员变量

    -----------黑马程序员 IOS培训.Android培训.Java培训.期待与您交流---------------- #import <Foundation/Foundation.h&g ...

  2. 【黑马程序员 C++教程从0到1入门编程】【笔记4】C++核心编程(类和对象——封装、权限、对象的初始化和清理、构造函数、析构函数、深拷贝、浅拷贝、初始化列表、友元friend、运算符重载)

    黑马程序员C++教程 文章目录 4 类和对象(类属性[成员属性],类函数[成员函数]) 4.1 封装 4.1.1 封装的意义(三种权限:public公共.protected保护.private私有)( ...

  3. [黑马程序员C++笔记]P99-P104类和对象-封装

    视频地址:黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难_哔哩哔哩_bilibili 目录 P99类和对象-封装-属性和行为作为整体 P100类和对象-封装-案例-设计学生类 P101 ...

  4. 【黑马程序员pink老师前端】JavaScript对象

    java 学习笔记指路 基础知识 Python转java补充知识 Java中常见的名词解释 前端 [黑马程序员pink老师前端]HTML [黑马程序员pink老师前端]JavaScript基础大总结 ...

  5. 黑马程序员C语言基础(第七天)内存管理

    黑马程序员C语言基础(第一天) 黑马程序员C语言基础(第二天) 黑马程序员C语言基础(第三天) 黑马程序员C语言基础(第四天)数据类型 黑马程序员C语言基础(第五天)运算符与表达式.程序流程结构.数组 ...

  6. Flask学习 黑马程序员-6节课入门Flask框架web开发视频(中途撤退,寻找py3教程)

    文章目录 postman工具 get和post 如何给路由传参 解析 @app.route('')这个叫视图函数 Jinja2模板引擎 动态传参 注释.变量代码块以及控制代码块的使用 注释:ctrl+ ...

  7. 【168天】黑马程序员27天视频学习笔记【Day07】

    [168天]黑马程序员27天视频学习笔记[Day07] 叨逼叨两句 决定了,我会记住这一天! 07-01:构造方法Constructor概述和格式 构造方法概述和作用 给对象的数据(属性)进行初始化. ...

  8. 黑马程序员-----集合框架类(四) 高级for循环、方法的可变参数及静态导入

    ------- android培训.java培训.期待与您交流! ---------- 黑马程序员-----集合框架类(四) 高级for循环.方法的可变参数及静态导入 1.1 高级for循环(示例1) ...

  9. 黑马 程序员——Java基础---IO(下)

    黑马程序员--Java基础---IO(下) ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------ 一.概述 Java除了基本的字节流.字符流之外,还提供 ...

最新文章

  1. JDK相关版本特性浏览
  2. 解禁 115 天,中兴事件的“反思”中藏着什么?
  3. 深度高能粒子对撞追踪:Kaggle TrackML粒子追踪挑战赛亚军访谈
  4. 使用NTDSXtract离线抓取Domain Hash
  5. windows下实现Git在局域网使用
  6. mysql里面的页面筛选_【mysql】像很多网站(比如电商)里的筛选功能一般是如何实现的?...
  7. 两个整数集合的交集 ———— 腾讯2014软件开发笔试题目
  8. 190101每日一句
  9. 微信小程序添加外部字体方法
  10. html input属性都有啥,input 属性有哪些input标签常用属性
  11. oracle卸载步骤图解,oracle卸载步骤
  12. 屏幕种类有哪些,特点,怎么挑?TFT、LCD、OLED、IPS、TN的含义与区别?高色域、刷新率、广视角、雾面屏又是什么?
  13. 用Python爬取网易云音乐全部歌手信息(歌手id和歌手名字)
  14. cve_2019_0708 bluekeep复现踩坑
  15. Golang chan的任务分发和优雅退出
  16. 普陀区科技创新型小巨人企业
  17. 【GDOI2017模拟11.7】太阳神
  18. Win10 Linux子系统编译Android系统源码
  19. Solid Converter PDF10.1Crack,将pdf表转换为可编辑的Excel文档
  20. [rUDP] KCP梳理

热门文章

  1. 分布式缓存(Redis)连杀
  2. 【转】WPF自定义控件与样式(13)-自定义窗体Window 自适应内容大小消息框MessageBox...
  3. Skiplist跳表详解及其模拟实现
  4. 英语 Yang liang 120 --180
  5. 【算法随记五】使用FFT变换自动去除图像中严重的网纹。
  6. mysql查询使用qq邮箱注册_Spring Boot实现qq邮箱验证码注册和登录验证功能
  7. C++基础学习笔记(五)——核心编程PART3
  8. 游戏框架 核心科技与面试精粹 (樊松阳 著)
  9. 免费好用的录屏软件OBS-Studio
  10. python pandas修改列名,Python_Pandas学习笔记02:DataFrame获取列名和修改列名