包装类
为了能将基本数据类型视为对象进行处理,java提出了包装类的概念,它主要是将基本数据类型封装在包装类中,如int类型的包装类Integer、boolean等,这样便可以把这些基本数据类型转换为对象进行处理。
包装类及其对应的基本数据类型
包装类 | 对应的基本数据类型 | 包装类 | 基本数据类型 |
Byte | byte | Short | short |
Integer | int | Long | long |
Float | float | Double | double |
Character | char | Boolean | boolean |
Integer类
Integer类在对象中包装了一个基本数据类型int的值,该类的对象包含一个int类型的字段。此外,该类提供了多个方法,能在int类型和String类型之间进行相互转换,同时还提供了其他一些处理int类型时非常好用的常量和方法。
方法 | 功能描述 |
valueOf(String str) | 返回保存指定的String值的Integer对象 |
parseInt(String str) | 返回包含在由str指定的字符串中的数字的等价整数值 |
toString() | 返回一个表示该Integer值的String对象(可以指定进制基数) |
toBinaryString(int i) | 以二进制无符号整数形式返回一个整数参数的字符串表示形式 |
toHexString(int i) | 以十六进制无符号整数形式返回一个整数参数的字符串表示形式 |
toOctalString(int i) | 以八进制无符号整形形式返回一个整数形式返回一个整数参数的字符串表示形式 |
equals(Object IntegerOnj) | 比较此对象与指定的对象是否相等 |
intValue() | 以int型返回此Integer对象 |
shortValue() | 以short型返回此Integer对象 |
byteValue() | 以byte型返回此Integer对象 |
compareTo(Integer anotherInteger) | 在数字上比较两个Integer对象。如果这两个值相等,则返回0;如果调用对象的数值小于anotherInteger的数值,则返回负值;如果调用对象的数值大于anotherInteger的数值,则返回正值 |
eg.Integer类常用方法:
public class IntegerDemo {
public static void main(String[] args) {
int num = Integer.parseInt("456");
Integer iNum = Integer.valueOf("456");
System.out.println("int数据与Integer对象的比较:" + iNum.equals(num));
String str2 = Integer.toBinaryString(num);
String str3 = Integer.toHexString(num);
String str4 = Integer.toOctalString(num);
String str5 = Integer.toString(num,15);
System.out.println("456的二进制表示为:" + str2);
System.out.println("456的16进制表示为:" + str3);
System.out.println("456的八进制表示为:" + str4);
System.out.println("456的15进制表示为:" + str5);
}
}
eg.查看Integer列队额常量值:
public class GetCon {
public static void main(String[] args) {
int maxint = Integer.MAX_VALUE;
int minint = Integer.MIN_VALUE;
int intsize = Integer.SIZE;
System.out.println("int类型可取的最大值为:" + maxint);
System.out.println("int类型可取的最小值为:" + minint);
System.out.println("int类型的二进制位数为:" + intsize);
}
}
Double类
Double类和Float类都是double和float基本类型的封装,他们都是Number类的子类,都是对浮点数进行操作,所以常用方法基本相同。
Double类的常用方法
方法 | 功能描述 |
valueOf(String str) | 返回保存用参数字符串str表示的double值的Double对象 |
parseDouble(String s) | 返回一个新的double值,该值被初始化用指定String表示的值,这与Double类的valueOf方法一样 |
doubleValue() | 以double形式返回此double对象 |
isNaN() | 如果此double值时非数字(NaN)值,则返回true,否则返回false |
intValue() | 以int形式返回double值 |
byteValue() | 以byte形式返回byte值 |
longValue() | 以long形式返回long值 |
compareTo(Double d) | 对两个Double对象进行数值比较。如果两个值相等,则返回0;如果调用对象的数值小于d的数值,则返回负值;如果调用对象的数值大于d的值,则返回正值 |
equals(Object obj) | 将此对象与指定的对象相比较 |
toString() | 返回此Double对象的字符串表示形式 |
toHexString(double d) | 返回double参数的十六进制字符串表示形式 |
eg.Double类的常用方法
public class DoubleDemo {
public static void main(String[] args) {
Double dNum = Double.valueOf("3.14");
System.out.println("3.14是否为非数字值:" + Double.isNaN(dNum.doubleValue()));
System.out.println("3.14转换为int值为:" + dNum.intValue());
System.out.println("值为3.14的Double对象与3.14的比较结果:" + dNum.equals(3.14));
System.out.println("3.14的16进制表示为:" + Double.toHexString(dNum));
}
}
Boolean类
Boolean类将基本类型为boolean的值包装在一个对象。一个Boolean类型的对象只包含一个类型为boolean的字段。此外还对boolean类型和String类型的相互转换提供了许多方法,并提供了处理boolean类型是非常有用的其他一些常量和方法。
方法 | 功能描述 |
booleanValue() | 将Boolean对象的值以对应的boolean值返回 |
equals(String s) | 判断调用该方法的对象与obj是否相等。当且仅当参数不是null,而且与调用该方法的对象一样都表示同一个boolean值的Boolean对象时,才返回true |
parseBoolean(String s) | 将字符串参数解析为boolean值 |
toString() | 返回表示该boolean值的String对象 |
valueOf(String s) | 返回一个用指定的字符串表示的boolean值 |
eg.Boolean类的常用方法
public class BooleanDemo {
public static void main(String[] args) {
Boolean b1 = Boolean.valueOf("true");
Boolean b2 = Boolean.valueOf("ok");
System.out.println("b1:" + b1.booleanValue());
System.out.println("b2:" + b2.booleanValue());
}
}
Character类
Character类在对象中包装一个基本类型为char类型,该类型提供了多种方法,以确定字符的类别,并可以很方便地将字符从大写转换成小写。
方法 | 功能描述 |
valueOf(char a) | 返回宝UC你指定char值的Character对象 |
compareTo(Character anotherCharacter) | 根据数字比较两个Character对象,若这两个对象相等则返回0 |
equals(Object obj) | 将调用该方法的对象与指定的对象比较 |
toUpperCase(char ch) | 将字符参数转换为大写 |
toLowerCase(char ch) | 将字符参数转换为小写 |
toString() | 返回一个表示指定char值的String对象 |
charValue() | 返回此Character对象的值 |
isUpperCase(char ch) | 判断指定字符是都为大写字符 |
isLowerCase(char ch) | 判断指定字符是都为小写字符 |
isLetter(char ch) | 判断指定字符是否为字母 |
isDigit(char ch) | 判断指定字符是否为数字 |
eg.Character类的常用方法
public class UpperOrLower {
public static void main(String[] args) {
Character mychar1 = Character.valueOf('A');
Character mychar2 = Character.valueOf('a');
if(Character.isUpperCase(mychar1)){
System.out.println(mychar1 + "是大写字母");
System.out.println("转换为小写字母结果" + Character.toLowerCase(mychar1));
}
if(Character.isLowerCase(mychar2)){
System.out.println(mychar2 + "是小写字母");
System.out.println("转换为大写字母结果" + Character.toUpperCase(mychar2));
}
}
}
Number类
前面介绍的各种类当中都有一个共同的父类 —— Number类,该类是一个抽象类,其他子类必须提供将表示的数值转换为byte、int等基本数据类型的方法。
如下表所示:
方法 | 功能描述 |
byteValue() | 以byte形式返回指定数值 |
intvalue() | 以int形式返回指定数值 |
floatValue() | 以float形式返回指定数值 |
doubleValue() | 以double形式返回指定数值 |
shortValue() | 以short形式返回指定数值 |
longValue() | 以long形式返回指定数值 |
Number类的方法分别被这些子类所实现,所以Number类的所有子类都包含了以上这几种方法
数字处理
数字格式化
引例:商场中我们总是看见商品的价格总是保留了两位小数的结果,可见它们在使用之前都已经被格式化过,我们引入DecimalFormat类来格式化数据。其位于java.text包中
下面是DecimalFormat类中的特殊字符及其说明
字符 | 功能描述 |
0 | 代表阿拉伯数字,使用特殊字符‘0’表示数字的一位阿拉伯数字,如果该位不存在数字,则不显示 |
# | 代表阿拉伯数字,使用特殊字符“#”表示数字的一位阿拉伯数字,如果该位存在数字则显示字符;如果该位不存在数字则不显示 |
. | 小数分隔符或货币小数分隔符 |
- | 负号 |
, | 分组分隔符 |
E | 分隔科学计数法中的尾数和指数 |
% | 放置在数字的前缀和后缀,将数字乘以100显示为百分数 |
\u2030 | 放置在数字的前缀或后缀,将数字乘以1000显示为千分数 |
\u00A4 | 放置在数字的前缀或后缀,作为货币记号 |
' | 单引号,当上述特殊字符出现在数字中时,应为特殊符号添加单引号,系统 视为普通符号 |
eg.DecimalFormat类的常用方法
import java.text.DecimalFormat;
public class DecimalFormatSimpleDemo {
static public void SimpleFormat(String pattern,double value){
DecimalFormat myFormat = new DecimalFormat(pattern);
String output = myFormat.format(value);
System.out.println(value + " " + pattern + " " + output);
}
static public void UseApplyPatternMethodFormat(String pattern,double value){
DecimalFormat myFormat = new DecimalFormat();
myFormat.applyPattern(pattern);
System.out.println(value + " " + pattern + " " + myFormat.format(value));
}
public static void main(String[] args) {
SimpleFormat("###,###.###",123456.789);
SimpleFormat("00000000.###kg",123456.789);
SimpleFormat("000000.000",123.78);
UseApplyPatternMethodFormat("#.###%",0.789);
UseApplyPatternMethodFormat("###。##",123465.789);
UseApplyPatternMethodFormat("0.00\u2030",0.789);
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/2bfea6de15d692ba774f809c392b3bf9.png)
Math类
Math类提供了众多数学函数方法,主要包括三角函数方法,指数函数方法,取整函数方法,去最大值最小值,以及平均数的方法。这些方法都被定义为static形式,所以在程序中应用更加简介。
三角函数方法
public static double sin(double a) : 返回角的正弦值
public static double cos(double a) : 返回角的余弦值
public static double tan(double a) : 返回角的正切值
public static double asin(double a) : 返回一个值的反正弦
public static double scos(double a) : 返回一个值的反余弦
public static double atan(double a) : 返回一个值的反正切
public static double toRadians(double a) : 将角度转换为弧度
public static double toDegrees(double a) : 将弧度转换为角度
eg.在java代码中进行三角函数运算
public class TrigonometricFunction {
public static void main(String[] args) {
System.out.println("90度的正弦值:" + Math.sin(Math.PI/2));
System.out.println("0度的余弦值:" + Math.cos(0));
System.out.println("60度的正切值:" + Math.tan(Math.PI/3));
System.out.println("2的平方根与2商的反正弦值:" + Math.asin(Math.sqrt(2)/2));
System.out.println("1的反正切值:" + Math.tan(1));
System.out.println("120度的弧度值:" + Math.toRadians(120.0));
System.out.println("PI/2的角度值:" + Math.toDegrees(Math.PI/2));
}
}
指数函数方法
public static double exp(double a) : 用于获取e的次方
public static double log(double a) : 用于取自然对数,即取lna的值
public static double log10(double a) : 用于取底数为10的对数
public static double sqrt(double a) : 用于取a的平方根,其中a的值不能为负数
public static double cbrt(double a) : 用于取a的立方根
public static double pow(double a,double b) : 用于取a的b次方根
eg.在java代码中进行指数函数运算
public class ExponentFunction {
public static void main(String[] args) {
System.out.println("e的平方值:" + Math.exp(2));
System.out.println("以e的为底2的对数值:" + Math.log(2));
System.out.println("以10为底2的对数值:" + Math.log10(2));
System.out.println("4的平方根值:" + Math.sqrt(4));
System.out.println("8的立方根值:" + Math.cbrt(8));
System.out.println("2的2次方值:" + Math.pow(2,2));
}
}
取整数函数方法
public static double ceil(double a) : 返回大于等于参数的最小整数
public static double floor(double a) : 返回小于等于参数的最大整数
public static double rint(double a) : 返回与参数最接近的整数,如果存在两个同样接近的整数
public static int round(float a) : 将参数加上0.5后与参数最近的整数
public static long round(double a) : 将参数加上0.5后返回与参数最近的整数,然后强制转换为长整型
eg.各场景下取整函数的运算结果
public class IntFunction {
public static void main(String[] args) {
System.out.println("使用ceil()方法取整:" + Math.ceil(5.2));
System.out.println("使用floor()方法取整:" + Math.floor(2.5));
System.out.println("使用rint()方法取整:" + Math.rint(2.7));
System.out.println("使用rint()方法取整:" + Math.rint(2.5));
System.out.println("使用round()方法取整:" + Math.round(3.4f));
System.out.println("使用round()方法取整:" + Math.round(2.5));
}
}
取最大值、最小值、绝对值的方法
此方法都有重载(long、int、float、double、byte)
public class AnyFunction {
public static void main(String[] args) {
System.out.println("4和8较大者:" + Math.max(4,8));
System.out.println("4.4和8较小者:" + Math.min(4.4,8));
System.out.println("-7的绝对值:" + Math.abs(-7));
}
}
Random类
Random类对象seedValue:随机生成随机数
在Random类中,提供获取各种数据类型随机数的方法,下面列举几个常用方法
public int nextInt() : 返回一个随机整数
public int nextInt(int n) : 返回大于等于0且小于n的随机数
public long nextLong() : 返回一个随机长整数值
public boolean nextBoolean() : 返回一个随机布尔类型
public float nextFloat() : 返回一个随机单精度浮点型值
public double nextDouble() : 返回一个随机双精度浮点型值
public double nextGaussion() : 返回一个概率密度为高斯分布的双精度浮点型值
eg.获取不同取值范围、不同类型的随机数
import java.util.Random;
public class RandomDemo {
public static void main(String[] args) {
Random r = new Random();
System.out.println("随机产生一个整数:" + r.nextInt());
System.out.println("随机产生一个大于等于0且小于10的整数:" + r.nextInt(10));
System.out.println("随机产生一个布尔类型值:" + r.nextBoolean());
System.out.println("随机产生一个双精度浮点型值:" + r.nextDouble());
System.out.println("随机产生一个单精度浮点型值:" + r.nextFloat());
System.out.println("随机产生一个概率密度分布为高斯分布的双精度浮点型的值:" + r.nextGaussian());
}
}
BigInteger类
BigInteger类的数字范围较Integer类的数字范围 加入了小数的概念。一般的float型和double型数据只可以用来做科学计算或工程计算,但由于在商业计算中要求数字精度比较高,所以要用到BigInteger类。
BigDecimal类中的常用结构方法
结构方法 | 功能说明 |
BigDecimal(double val) | 实例化时将双精度浮点型转换为BigDecimal类型 |
BigDecimal(String val) | 实例化时将字符串形式转换为BigDecimal类型 |
BigDecimal类实现的加、减、乘、除的方法
方法 | 功能说明 |
add(BigDecimal augend) | 做加法操作 |
subtract(BigDecimal subtrahend) | 做减法操作 |
multiply(BigDecimal divisor,int scale,RoundingMode roundingMode) | 做除法操作,方法中3个参数分别代表除数、商的小数点后的位数、近似处理模式 |
BigDecimal类中的divide()方法的多种处理模式
模式 | 含义 |
RoundingMode.UP | 商的最后一位如果大于0,则向前进位 |
RoundingMode.DOWN | 商的最后一位无论是什么数字都省略 |
RoundingMode.CEILNG | 商如果是正数,按照UP模式处理:如果是负数,按照DOWN模式处理。这种模式的处理都会使近似值大于等于实际值 |
RoundingMode.FLOOR | 与CEILING模式相反,商如果是正数,按照DOWN模式处理;商如果是负数,则按照UP模式处理。这种模式的处理都会使近似值小于等于实际值 |
RoundingMode.HALF_DOWN | 对商进行四舍五入操作,如果商最后一位小于等于5,则做舍弃操作;如果最后一位大于5,则做进位操作,如:7.5~8 |
RoundingMode.HALF_EVEN | 如果商的倒数第二位奇数,则按照HALF_UP模式处理;如果为偶数,则按照HALF_DOWN模式处理,如7.5~8,8.5~9。 |
eg.使用BigDecimal类进行数学运算
import java.math.BigDecimal;
import java.math.RoundingMode;
public class BigDecimalDemo {
public static void main(String[] args) {
BigDecimal b1 = new BigDecimal("0.00987654321987654321");
BigDecimal b2 = new BigDecimal("0.00123456789123456789");
System.out.println("两个数字相加结果:" + b1.add(b2));
System.out.println("两个数字相减结果:" + b1.subtract(b2));
System.out.println("两个数字相乘结果:" + b1.multiply(b2));
System.out.println("两个数字相除,保留小数后9位:" + b1.divide(b2,9,RoundingMode.HALF_UP));
}
}
System类
方法 | 功能描述 |
currentTimeMillis() | 返回以毫秒为单位的当前时间 |
exit(int status) | 通过启动虚拟机的关闭序列,终止当前正在运行的java虚拟机,此方法从不正常返回。可以将变量作为一个状态码。根据惯例,非零的状态码表示非正常终止;0表示正常终止 |
Map<String,String>getenv | 返回一个不能修改的当前系统环境的字符串映射视图 |
getenv(String name) | 获取指定的环境变量值 |
getProperties() | 确定当前的系统属性 |
getProperty(String key) | 获取用指定键描述的系统属性 |
setIn(InputStream in) | 重新分配“标准”输入 |
控制台输出字符
1.不会自动换行的print()方法
2.会自动换行的println()方法
计时
System.currentTimeMillis()方法可以获取从1970年1月1日0点至今的毫秒数
eg.查看执行一万次字符串拼接所消耗的时间
public class SystemTimeDemo {
public static void main(String[] args) {
long start = System.currentTimeMillis();
String str = null;
for(int i = 0;i < 10000;i ++){
str += i;
}
long end = System.currentTimeMillis();
System.out.println("循环用时:" + (end - start) + "毫秒");
}
}
Scanner类
Scanner的几个常用方法
方法名 | 返回类型 | 功能说明 |
next() | Stirng | 查找并返回此扫描器获取的下一个完整标记 |
nextBoolean() | boolean | 扫描一个布尔值标记并返回 |
nextByte() | byte | 扫描一个值返回byte类型 |
nextDouble() | double | 扫描一个值返回double类型 |
nextFloat() | float | 扫描一个返回float类型 |
nextInt() | int | 扫描一个返回int类型 |
nextLine() | String | 扫描一个返回String类型 |
nextLong() | Long | 扫描一个返回long类型 |
nextShort() | short | 扫描一个返回short类型 |
close() | void | 关闭此扫描器 |
eg.猜数字游戏
import java.util.Random;
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
Random r = new Random();
int num = r.nextInt(100);
int input = -1;
Scanner sc = new Scanner(System.in);
while(true){
System.out.println("猜一猜随机数是多少?");
input = sc.nextInt();
if(input > num){
System.out.println("你输入的数字大了。");
}else if(input < num){
System.out.println("你输入的数字小了。");
}else if(input == num){
break;
}else{
System.out.println("你的输入有误!");
}
}
System.out.println("恭喜你答对了!");
sc.close();
}
}
日期时间类
Date类
Date类用于表示日期时间,使用该类表示时间需要使用其构造方法创造对象,其构造方法及其说明如表所示:
构造方法 | 说明 |
Date() | 分配Date对象并初始化此对象,以表示分配它的时间(精确到秒) |
Date(long date) | 分配Date对象初始化此对象,以表示自标准基准时间(即1970年1月1日00:00:00GMT)起经过指定毫秒数date后的时间 |
Date类的常用方法及其说明
方法 | 说明 |
after(Date when) | 测试当前日期是否在指定的日期之后 |
before(Date when) | 测试当前日期是否在指定的日期之前 |
getTime() | 获得自1970年1月1日00:00:00GMT开始到现在所经过的毫秒数 |
setTime(long time) | 设置当前Date对象所表示的日期时间值,该值用以表示1970年1月1日00:00:00GMT以后time毫秒的时间点 |
eg.获取当前的日期和时间
import java.util.Date;
public class DateDemo {
public static void main(String[] args) {
Date date = new Date();
long value = date.getTime();
System.out.println("日期:" + date);
System.out.println("到现在所经历的毫秒数为:" + value);
}
}
日期时间格式化
方法 | 说明 |
format(Date date) | 将一个Date对象实例格式化为日期/时间字符串 |
getCalendar() | 获取此日期/时间格式器关联的日历 |
getDateInstance() | 获取日期格式器,该格式器具有默认语言环境的默认格式化风格 |
getDateTimeInstance() | 获取日期/时间格式器,该格式器具有默认语言环境的默认格式化风格 |
getInstance() | 获取为日期和时间SHORT风格的默认日期/时间格式器 |
getTimeInstance() | 获取 时间格式器,该格式器具有默认默认语言环境的默认格式化风格 |
parse(String source) | 将字符串解析成一个日期,并返回这个日期的Date对象 |
SimpleDateFormat的格式化字符
字母 | 日期或时间元素 | 类型 | 示例 |
G | Era标志符 | Text | AD |
y | 年 | Year | 1966;96 |
M | 年中的月份 | Month | July;Jul;07 |
w | 年中的周数 | Number | 27 |
W | 月份中的周数 | Number | 2 |
D | 年中的天数 | Number | 189 |
d | 月份中的天数 | Number | 10 |
F | 月份中的星期 | Number | 2 |
E | 星期中的天数 | Test | Tuesday;Tue |
a | Am/pm标记 | Test | PM |
H | 一天中的小时数(0~23) | Number | 0 |
h | am/pm中的小时数(1~12) | Number | 12 |
k | 一天中的小时数(1~24) | Number | 24 |
K | am/pm中的小时数(0~11) | Number | 0 |
m | 小时中的分钟数 | Number | 30 |
s | 分钟中的秒数 | NUmber | 55 |
S | 毫秒数 | Number | 978 |
z | 时区 | General time zone | Pacific Standard Time,RST;GMT-08:00 |
Z | 时区 | RFC 822 time zone | -800 |
常用时间格式
日期时间 | 对应的格式 |
2021/10/25 | yyyy/MM/dd |
2021.10.25 | yyyy.MM.dd |
2021-02-15 13:30:25 | yyyy-MM-dd HH:mm:ss |
2021年10月24日 10时25分07秒 | yyyy年MM月dd日 HH时mm分ss秒 EEEE ah时 |
下午3时 | ah时 |
今年已经过去了297天 | 今年已经过去了D天 |
eg.以中文形式打印当前的日期时间
import java.util.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
public class DateFormatDemo {
public static void main(String[] args) {
DateFormat df = new SimpleDateFormat("yyyy4年MM月dd日 EEEE HH时mm分ss秒");
System.out.print("各位观众大家好,现在是");
System.out.print(new Date());
System.out.print(",欢迎收看新闻。");
}
}
Calendar类
Calendar类提供的常用字段及其说明
字段名 | 说明 |
DATE | get和set的字段数字,指示一个月中的某天 |
DAY_OF_MONTH | get和set的字段数字,指示一个月中的某天 |
DAY_OF_WEEK | get和set的字段数字,指示一个星期中的某天 |
DAY_OF_WEEK_IN_MONTH | get和set的字段数字,指示当前月中的第几个星期 |
DAY_OF_YEAR | get和set的字段数字,指示前年中的天数 |
HOUR | get和set的字段数字,指示上午或下午的小时 |
HOUR_OF_DAY | get和set的字段数字,指示一天中的小时 |
MILLISECOND | get和set的字段数字,指示一秒中的毫秒 |
MINUTE | get和set的字段数字,指示一小时中的分钟 |
MONTH | 指示月份的get和set的字段数字 |
SECOND | get和set的字段数字,指示一分钟中的秒 |
time | 日历的当前设置时间,以毫秒为单位,表示自格林威治标准时间1970年1月1日0:00:00后经过的时间 |
WEEK_OF_MONTH | get和set的字段数字,指示当前月中的星期数 |
WEEK_OF_YEAR | get和set的字段数字,指示当前年中的星期数 |
YEAR | 指示年的get和set的字段数字 |
Calendar类提供的常用方法及其说明
方法 | 说明 |
add(int field,int amount) | 根据日历的规则,为给定的日历字段添加或减去指定的时间量 |
after(Object when) | 判断此Calendar对象表示的时间是否在指定Object表示的时间之后,返回判断结果 |
before(Object when) | 判断此Calendar对象表示的时间是否在指定Object表示的时间之前,返回判断结果 |
get(int field) | 返回给定日历字段的值 |
getInstance() | 使用默认时区和语言环境获得一个日历 |
getTime() | 返回一个表示此Calendar对象时间值的Date对象 |
getTimeInMillis() | 返回此Calendar对象的时间值,以毫秒为单位 |
roll(int field,boolean up) | 在给定的时间字段上添加或减去单个时间单元,不更改更大的字段 |
set(int field,int value) | 将给定的日历字段设置给定值 |
set(int year,int month,int day) | 设置日历字段YEAR、MONTH、DAY_OF_MONTH、HOUR、MINUTE和SECOND的值 |
setTime(Date date) | 使用给定的Date对象设置此Calendar对象的时间 |
setTimeInMillis(long millis) | 用给定的long值设置此Calendar对象的当前时间值 |
eg.今天离中华人民共和国成立100周年差多少天?
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class CountDown {
public static void main(String[] args) {
System.out.println("-----------中华人民共和国成立100周年倒计时-----------------");
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日");
String today = simpleDateFormat.format(date);
System.out.println("今天是" + today);
long time1 = date.getTime();
Calendar calendar = Calendar.getInstance();
calendar.set(2049,10 - 1,1);
long time2 = calendar.getTimeInMillis();
long day = (time2 - time1)/(1000 * 60 *60 *24);
System.out.println("距离2049年10月1日还有" + day + "天!");
}
}
Runtime类
java可以利用该类对当前运行环境执行一些简单操作
注:Runtime类不能直接创建实例,只能通过Runtime.getRuntime()间接创造实例
Runtime类的常用方法:
方法 | 功能描述 |
getRuntime() | 返回与当前java应用程序相关的运行时对象 |
exec(String command) | 在单独的进程中执行指定的字符串命令 |
exec(Stirng[] cmdarray ) | 在单独的进程中执行指定命令和指定参数 |
totalMemory() | 返回java虚拟机中的内存总量 |
freeMemory() | 返回java虚拟机中的空闲内存量 |
load(String filename) | 加载作为动态库的指定文件名 |
loadLibrary(String libname) | 加载具有指定库名的动态库 |
指定命令:
本地命令是指操作系统的命令。eg.Linux系统下就表示shell命令,在win操作系统下就表示cmd命令
Process类:
exec()方法会返回一个Process对象。Process类就是进程类,该类是抽象类,同样不能使用new关键词创造实例。
方法 | 功能描述 | 方法 | 功能描述 |
destroy() | 结束进程 | getInputStream() | 获取进程的输入流 |
getErrorStream() | 获取进程的错误流 | getOutputStream() | 获取进程的输出流 |
eg.让java程序执行Windows系统的help命令
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class RuntimeExecDemo {
public static void main(String[] args){
Runtime r = Runtime.getRuntime();
try{
Process p = r.exec("help");
InputStream is = p.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String str = null;
while((str = br.readLine()) != null){
System.out.println(str);
}
}catch(IOException e){
e.printStackTrace();
}
}
}
查看内存
Runtime类可以通过freeMemory()方法查看当前java虚拟机可用内存的剩余量。
eg.监控虚拟内存使用情况:
public class MemoryDemo {
public static void main(String[] args) {
Runtime r = Runtime.getRuntime();
Integer ints[] = new Integer[100];
long before = r.freeMemory();
System.out.println("赋值前空闲内存字节数:" + before);
for(int i = 0,length = ints.length;i < length;i ++){
ints[i] = i;
}
long after = r.freeMemory();
System.out.println("赋值后空闲内存字节数:" + after);
System.out.println("数组用掉的内存字节数:" + (before-after));
}
}