目录
包装类
Integer类
Double 类
Boolean类
Character类
Number类
数字处理
数字格式化
Math类
1.三角函数方法
2.指数函数方法
3.取整函数方法
4.取最大值、最小值、绝对值函数方法
Random类
BigInteger类
BigDecimal类
System类
控制台输出字符
1.不会自动换行的print()方法
2.可以自动换行的println()方法
计时
Scanner类
日期时间类
Date类
日期时间格式化
Calender类
Runtime类
执行本地命令
查看内存
为了能将基本数据类型视为对象进行处理,Java提出了包装类的概念,它主要是将基本数据类型封装在包装类中,如int型的包装类Integer、boolean型的包装类Boolean等,这样便可以把这些基本数据类型转换为对象进行处理。Java中的包装类及其对应的基本数据类型如下表:
java.lang包中的Integer类、Byte类、Short类和Long类,分别将基本数据类型int、byte、short和long封装成一个类,由于这些类都是Number类的子类,区别就是封装不通过的数据类型,其包含的方法基本相同。
Integer类在对象中包装了一个基本数据类型int的值,该类的对象包含一个int类型的字段。此外,该类提供了多个方法,能在int类型和String类型之间互相转换,同时还提供了其他一些处理int类型时非常有用的常量和方法。Integer类的常用方法如下表:
public class LntegerDemo { //创建类
public static void main(String[] args) { //主方法
int num = Integer.parseInt("456"); //将字符串转换为int类型
Integer iNum = Integer.valueOf("456"); //创建一个Integer对象
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的十六进制表示为:" + str3);
System.out.println("456的八进制表示为:" + str4);
System.out.println("456的十五进制表示为:" + str5);
}
}
运行结果如下:
Integer类提供了以下4个常量:
public class LntegerDemo { //创建类
public static void main(String[] args) { //主方法
int maxint = Integer.MAX_VALUE; //获取Integer类的常量值
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类和Float 类是对 double、 float基本类型的封装,它们都是 Number 类的子类,都是对浮数进行操作,所以常用方法基本相同。
Double 类在对象中包装一个基本类型为 double 的值,每个 Double 类的对象都包含一个double类型的字段。此外,该类还提供多个方法,可以将 double 类型转换为 Sting 类型,将 String 类型转换为 double类型,也提供了其他一些处理 double 类型时有用的常量和方法。Double类的常用方法如下:
public class LntegerDemo { //创建类
public static void main(String[] args) { //主方法
Double dNum = Double.valueOf("3.14"); //创建一个Double对象
//判断是否为非数字值
System.out.println("3.14是否为非数字值:" + Double.isNaN(dNum.doubleValue()));
System.out.println("3.14是否为非数字值:" + dNum.intValue());
//判断大小
System.out.println("值为3.14的Double对象与3.14的比较结果:" + dNum.equals(3.14));
//转换为十六进制
System.out.println("3.14的十六进制表示为:" + Double.toHexString(dNum));
}
}
运行结果如下:
Double类主要提供了以下常量:
MAX_EXPONENT:返回int值,表示有限double变量可能具有的最大指数 。
MIN_EXPONENT:返回int值,表示标准化double变量可能具有的最小指数 。
NEGATIVE_INFINITY:返回double值,表示保存double类型的负无穷大值的常量。
POSITIVE_INFIINITY:返回double值,表示保存double类型的正无穷大值的常量。
Boolean类将基本类型为 boolean 的值包装在一个对象中。一个 Boolean类型的对象只包含一个类型为 boolean 的字段。此外,此类还为 boolean 类型和 String 类型的相互转换提供了许多方法,并提供了处理 boolean 类型时非常有用的其他一些常量和方法。Boolean类的常用方法如下表:
public class LntegerDemo { //创建类
public static void main(String[] args) { //主方法
Boolean b1 = Boolean.valueOf("true"); //创建Boolean对象
Boolean b2 = Boolean.valueOf("ok");
System.out.println("b1:" + b1.booleanValue()); //输出
System.out.println("b2:" + b2.booleanValue());
}
}
运行结果如下:
Boolean 提供了以下3个常量:
Character类在对象中包装一个基本类型为char的值,该类提供了多种方法,以确定字符的类别(小写字母、数字等),并可以很方便地将字符从大写转换成小写,反之亦然。Character类提供了很多方法来完成对字符的操作,常用的方法如下表:
public class LntegerDemo { //创建类
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));
}
}
}
运行结果如下:
Character 类提供了大量表示特定字符的常量,例如:
对于数值型的包装类,它们有一个共同的父类一Number 类,该类是一个抽象类,它是 Byte、Integer、Short、Long、Float 和 Double 类的父类,其子类必须提供将表示的数值转换为 byte、int、short、 long、float 和 double 的方法。例如,doubleValue0方法返回双精度浮点值,floatValue0方法返回单精度浮点值,这些方法如下表:
Number 类的方法分别被其各子类所实现,也就是说,在 Number 类的所有子类中都包含以上这几种方法。
在 Java 语言中,提供了一个执行数学基本运算的 Math 类,该类包括常用的数学运算方法,如角函数方法、指数函数方法、对数函数方法、平方根函数方法等一些常用数学函数方法。除此之外还提供了一些常用的数学常量,如 PI、E 等。
在实际开发中,随机数的使用是很普遍的,所以要掌握生成随机数的操作。在Java 中主要提供]两种生成随机数的方式,分别为调用 Math 类的random()方法生成随机数和调用 Random 类生成各种整据类型的随机数。
在Java 中,还提供了大数字的操作类,即 java.math.BigInteger 类与java.math.BigDecimal类。这个类用于高精度计算,其中 BigInteger 类是针对大整数的处理类,而 BigDecimal类则是针对大小数的处理类。
数字格式化在解决实际问题时应用非常普遍,如表示某超市的商品价格,需要保留两位有效数字数字格式化操作主要针对的是浮点型数据,包括 double 型和 float 型数据。在 Java 中使用 java.textDecimalFormat格式化数字。
在 Java 中,没有格式化的数据遵循以下原则:
由于上述输出格式不能满足解决实际问题的要求,通常将结果格式化为指定形式后输出。在 Jav
中,可以使用DecimalFormat类进行格式化操作。
DecimalFormat类是NumberFormat 的一个子类,用于格式化十进制数字。它可以将一些数字格式化为整数、浮点数、百分数等。通过使用该类可以为要输出的数字加上单位或控制数字的精度。一艘情况下,可以在实例化 DecimalFormat 对象时传递数字格式,也可以通过 DecimalFormat 类中applyPattern0方法来实现数字格式化。
当格式化数字时,可在 DecimalFormat 类中使用一些特殊字符构成一个格式化模板,使数字按照定的特殊字符规则进行匹配。表 11.7 列举了格式化模板中的特殊字符及其所代表的含义。
public class Test1{
public static void main(String args[]) {
//11.2数字处理
//11.2.1数字格式化
DecimalFormat myFormat1=new DecimalFormat();//实例化DecimalFormat对象
myFormat1.applyPattern("###,###,###");
String my1=myFormat1.format(7857478);//将数字格式化
System.out.println(my1);
DecimalFormat myFormat2=new DecimalFormat();
myFormat2.setGroupingSize(3);//设置将数字分组为3
myFormat2.setGroupingUsed(true);//设置允许数字进行分组
String my2=myFormat2.format(7857478);
System.out.println(my2);
}
}
运行结果如下:
Math 类提供了众多数学函数方法,主要包括三角函数方法,指数函数方法,取整函数方法,取量大值、最小值,以及平均值函数方法。这些方法都被定义为 static 形式,所以在程序中应用比较简便可以使用如下形式调用:
Math. 数学方法
在Math类中,除函数方法外还存在一些常用数字常量,如PI、E等。这些数学常量作为Math 关的成员变量出现,调用起来也很简单。可以使用如下形式调用:
Math.PI
Math.E
Math 类中的常用数学运算方法较多,大致可以将其分为四大类别,分别为三角函数方法,指数函数方法,取整函数方法,以及取最大值、最小值和绝对值函数方法。
Math 类中包含的三角函数方法如下:
以上每个方法的参数和返回值都是double型的。将这些方法的参数的值设置为 double 型是有一定道理的,参数以弧度代替角度来实现,其中1°等于 /180 弧度,所以 180°可以使用弧度来表示。除了可以获取角的正弦、余弦、正切、反正弦、反余弦、反正切,Math 类还提供了角度和弧度相互转换的方法 toRadians()和 toDegrees()。但需要注意的是,角度与弧度的转换通常是不精确的。
public class TrigonometricFunction {
public static void main(String[] args){
System.out.println("90 度的正弦值:"+Math.sin(Math.PI/2));//取90°的正弦
System.out.println("0 度的余弦值:"+Math.cos(0));//取0°的余弦
System.out.println("60 度的正切值:"+Math.tan(Math.PI/3));//取60°的正切
//取2的平方根与2商的反正弦
System.out.println("2 的平方根与 2 商的反正弦值:"+ Math.asin(Math.sqrt(2)/2));
//取2的平方根与2商的反余弦
System.out.println("2 的平方根与 2 商的反余弦值: " + Math.acos(Math.sqrt(2)/2));
System.out.println("1 的反正切值:"+Math.atan(1));//取1的反正切
System.out.println("120 度的弧度值:"+ Math.toRadians(120.0));//取120°的弧度值
System.out.println("Π/2 的角度值:"+ Math.toDegrees(Math.PI/2));//取Π/2的角度
}
}
运行结果如下:
Math 类中与指数相关的函数方法如下:
指数运算包括求方根、取对数以及求 n 次方的运算。
public class TrigonometricFunction {
public static void main(String[] args){
System.out.println("e的平方值:"+Math.exp(2));//取e的2次方
System.out.println("以e 为底2 的对数值:"+ Math.log(2));//取以e为底2的对数
System.out.println("以 10 为底2的对数值:"+ Math.log10(2));//取以10为底2的对数
System.out.println("4 的平方根值:"+ Math.sqrt(4));//取4的平方根
System.out.println("8 的立方根值:"+ Math.cbrt(8));//取8的立方根1
System.out.println("2的 2 次方值:"+ Math.pow(2, 2));//取2的2次方
}
}
运行结果如下:
在具体的问题中,取整操作使用也很普遍,所以Java 在 Math 类中添加了数字取整方法。Math 类中主要包括以下几种取整方法:
public class TrigonometricFunction {
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));//返回与参数最接近的整数
//将参数加上05后返回最接近的整数
System.out.println("使用 round()方法取整:"+ Math.round(3.4f));
//将参数加上0.5后返回最接近的整数,并将结果强制转换为长整型
System.out.println("使用 round()方法取整:"+ Math.round(2.5));
}
}
运行结果如下:
在程序中最常用的方法就是取最大值、最小值、绝对值等,Math 类中包括的操作方法如下:
public class TrigonometricFunction {
public static void main(String[] args){
System.out.println("4和8 较大者:"+ Math.max(4,8));//取两个参数的最大值
System.out.println("4.4和4较小者:"+Math.min(4.4, 4));//取两个参数的最小值
System.out.println("-7的绝对值:"+ Math.abs(-7));//取参数的绝对值
}
}
运行结果如下:
Random类是JDK 中的随机数生成器类,可以通过实例化一个 Random 对象创建一个随机数生成器,语法如下:
Random r = new Random();
以这种方式实例化对象时,Java 编译器将以系统当前时间作为随机数生成器的种子。因为每时每刻的时间不可能相同,所以产生的随机数不同。但是如果运行速度太快,也会产生两个运行结果相同的随机数。
用户也可以在实例化 Random 类对象时,设置随机数生成器的种子。语法如下:
Random r = new Random(seedValue);
r:Random类对象。
seedValue:随机数生成器的种子。
在Random类中,提供了获取各种数类机数的方法,下面列举几个常用的方法:
import java.util.Random;
public class TrigonometricFunction {
public static void main(String[] args){
Random r = new Random();//实例化一个Random 类
//随机产生一个整数
System.out.println("随机产生一个整数:"+r.nextInt());
//随机产生一个大于等于0且小于10的整数
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 类的数字范围校 Integer类的数字范围要大得多。前文介绍计 Ineger 类是int的包装类,int的最大值为 ,如果要计算更大的数字,使用 Integer 类就无法实现了,所以Java中提供了BigInteger类来处理更大的数字。Biglnteger 类支持任意精度的整数,也就是说,在运算中BigInteger类可以准确地表示任何大小的整数值而不会丢失信息。
在BigInteger 类中封装了多种操作,除了基本的加、减、乘、除操作,还提供了绝对值、相反数、最大公约数以及判断是否为质数等操作。
使用BigInteger 类,可以实例化一个BigInteger 对象,并自动调用相应的构造函数。BigInteger 类具有很多构造函数,但是直接的一种方式是参数以字符串形式代表有处理的数字。
例如,将 2 转换为 BigInteger 类型,可以使用以下语句进行初始化操作:
Biginteger twolnstance = new Bigintegor("2");
一且创建了对象实例,就可以调用 BigInteger 类中的一些方法进行运算操作,包括基本的数学运算和位运算以及一些取相反数、取绝对值等操作。下面列举了 Biglnteger类中常用的几种运算方法:
public BigInteger add(BigInteger val): 做加法运算。
public BigInteger subtract(BigInteger val): 做减法运算。
public BigInteger multiply(BigInteger val): 做乘法运算。
public BigInteger divide(BigInteger val): 做除法运算。
public BigInteger remainder(BigInteger val): 做取余操作。
public BigInteger[] divideAndRemainder(BigInteger val): 用数组返回余数和商,结果数组中第一个值为商,第二个值为余数。
public BigInteger pow(int exponent): 进行取参数的 exponent 次方操作。
public BigInteger negate(): 取相反数。
public BigInteger shifLeft(intn): 将数字左移n位,如果n为负数,做右移操作。
public BigInteger shiftRight(int n): 将数字右移n 位,如果n为负数,做左移操作。
public BigInteger and(BigInteger val): 做与操作。
public BigInteger or(BigInteger val): 做或操作。
public int compareTo(BigInteger val): 做数字比较操作。
public boolean equals(Object x): 当参数是 BigInteger 类型的数字并且数值与对象实例的数值相等时,返回 true。
public BigInteger min(BigInteger val): 返回较小的数值。
public BigInteger max(BigInteger val): 返回较大的数值。
BigDecimal类和 BigInteger 类都能实现大数字的运算,不同的是 BigDecimal 类加入了小数的概念。一般的 float 型和 double 型数据只可以用来做科学计算或工程计算,但由于在商业计算中要求数字精度比较高,所以要用到 BigDecimal 类。BigDecimal 类支持任何精度的定点数,可以用它来精确计算货币值。在 BigDecimal类中,常用的两个构造方法如下表:
BigDecimal 类型的数字可以用来做超大的浮点数的运算,如加、减、乘、除等,但是在所有的运算中除法是最复杂的,因为在除不尽的情况下商小数点后的末位的处理是需要考虑的。BigDecimal 实现的加、减、乘、除的方法如表下:
在上述方法中,BigDecimal类中 divide0方法有多种设置,用于返回商小数点后的末位的处理,这些模式的名称与含义如表所示。
system 类是JDK 中提供的系统类,该类是用 fmal 修饰的,所以不允许被继。 System 类提供了最多系统层面的操作方法,并且这些方法全部都是静态的。System 类提供的较常用方法如下表:
System类提供了标准输入、标准输出和错误输出流,也就是说,System 类提供了3 个静态对象:in、out和err。本书中的代码多次使用了这些对象,最常见的就是out 对象。在控制台输出字符串,输出的方法有两种。
print()方法的语法如下:
System.out.print("Hello!");
此方法输出“Hello”文字,输出完毕后,光标会停留在“Hello” 文字末尾,不会自动换行。
printin()方法在 print 后面加上了“ln”后缀 (就是 line 的简写),语法知下:
System.out.println("书籍是人类进步的阶梯!");
此方法输出“书籍是人类进步的阶梯!”后会自动换行。光标停留在下一行的开头。
println()方法与 println()方法输出的对比效果如表所示:
综上所述,Java 输出换行的方法有以下两种:
System.out.print("\n");//利用换行符\n实现换行
System.out.printIn();//空参数即可实现换行
System.currentTimeMillis()方法可以获取自 1970年1月1日零点至今的毫秒数。Date日期类也有类似的方法,但代码会比 System 类多,所以 System.currentTimeMillis()方法是为获取当前毫秒数最常用的方法。因为该方法的返回值精确到毫秒,所以可以利用该方法来记录程序的运行时间。
public class Test2{
public static void main(String[] args) {
long start=System.currentTimeMillis();//程序开始记录时间
String str=null;//创建null字符串
for(int i=0;i<10000;i++) {//循环一万次
str+=i;//字符串与循环变量拼接
}
long end=System.currentTimeMillis();//记录循环结束时间
System.out.println("循环用时:"+(end-start)+"毫秒");
}
}
运行结果如下:
与C 语言不同,Java 从控制台中读出用户输入的值,用到的不是一行可以直接使用的代码,而是 Scaner 的类来实现的。Scanner 英文直译就是扫描仪,它的用途就和现实生活的扫描仪一样,可以把数字化信息流转为人类可识别的文字。控制台输入内容用到了 System.out 就表示向控制台输出 ,System.in 就表示从控制台输入,让 Scanner 扫描 System.in 就可以获取用户输入的值了。
使用 Scanner 类首先要引入该类,其语法如下:
import java.util.Scanner; //引入 Scanner类
Scanner 类提供了如表 11.13 所示的几种常用的方法,通过这些方法可以取控制台中输入的不同类型的值。
使用Scanner类扫描控制台的代码如下:
Scanner se = new Scanner(System.in);
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(5000);//从1~99取值
int input=-1; //记录用户输入的值
Scanner sc=new Scanner(System.in); //扫描器扫描控制台输入
while (true) {
System.out.println("猜一猜随机数是多少");
input=sc.nextInt();//获取用户输入的一个整数
if(input>num) { //如果大于随机数
System.out.print("你输入的数字大了!");
}else if(input
运行结果如下:
Date 类用于表示日期时间,使用该类表示时间需要使用其构造方法创建对象,其构造方法及其说明如表所示。
例如,使用 Date 类的第 2种构造方法创建一个 Date 类的对象,代码如下:
long timeMillis = System.currentTimeMillis(); //当前系统时间所经历的毫秒数
Date date = new Date(timeMillis);
import java.util.Date;
public class DateTest {
public static void main(String[] args) {
//11.5 日期时间类
//Date类
Date d1 = new Date();
System.out.println(d1);//当前时间
System.out.println(System.currentTimeMillis());
Date d2 = new Date(163723625435674L);//指定时间
System.out.println(d2);
System.out.println(d1.after(d2));//
System.out.println(d1.before(d2));//
System.out.println(d1.getTime());
d1.setTime(163723625435674L);
System.out.println(d1.getTime());
}
}
运行结果如下:
DateFormat 类是日期时间格式化子类的抽象类,可以按照指定的格式对日期或时间进行格式化DateFormat 类提供了很多类方法,以获得基于默认或给定语言环境和多种格式化风格的默认日期时间Formatter,格式化风格主要包括 SHORT、MEDIUM、LONG 和FULL4种:
另外,使用 DateFormat 类还可以自定义日期时间的格式。要格式化一个当前语言环境下的日期,首先需要创建 DateFormat 类的一个对象,由于它是抽象类,因此可以使用其静态方getDateInstance()进行创建,语法如下:
DateFormat df = DateFormat.getDatelnstance();
使用 getDateInstance()方法获取的是所在国家或地区的标准日期格式。另外,DateFormat 类还提供了一些其他静态方法。例如,使用 getTimeInstance()方法可获取所在国家或地区的时间格式,使用getDateTimeInstance()方法可获取日期和时间格式。DateFormat 类的常用方法及其说明如表 11.16 所示:
例如,将当前日期按照DateFormat类默认格式输出:
DateFormat df = DateFormat.getlnstance();
System.out.println(df.format(new Date()));
结果如下:
2021/2/19上午9:59
输出长类型格式的当前时间:
DateFormat df = DateFormat.getTimelnstance(DateFormat.LONG);
System.out.println(df.format(new Date()));
结果如下:
CST 上午10:00:33
输出长类型格式的当前日期:
DateFormat df = DateFormat.getDatelnstance(DateFormat.LONG);
System.out.println(df.format(new Date()));
结果如下:
2021年2月19日
输出长类型格式的当前日期和时间:
DateFormat df = DateFormatgetDate Timelnstance(DateFormat.LONG,DateFormat.LONG);
System.out.println(df.format(new Date()));
结果如下:
2021年2月19日CST 上午10:01:12
SimpleDateFormat 类提供了 19 个格式化字符,可以让开发者随意编写日期格式,这19 个格式化字符如表 11.17 所示。
SimpleDateFormat 类提供了 19 个格式化字符,可以让开发者随意编写日期格式,这19 个格式化字符如表 11.17 所示。
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateTest {
public static void main(String[] args) {
// 日期时间格式化
DateFormat df1=DateFormat.getInstance();
System.out.println(df1.format(d1));
DateFormat df2=DateFormat.getDateInstance();
System.out.println(df2.format(d1));
DateFormat df3=DateFormat.getTimeInstance();
System.out.println(df3.format(d1));
DateFormat df4=new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒 kk时mm分ss秒");
System.out.println(df4.format(d1));
}
}
DateFormat 类提供的 Date parse(String source)方法可以将字符串转为其字面日期对应的 Date对象,整个过程相当于日期格式化的逆操作。
例如,将“2021-02-19”这个字符串转成 Date 对象,可以使用如下代码:
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd);.
Date date = sdf.parse("2021-02-19");
Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY OF_MONTH、HOUR等日历字段之间的转换提供了一些方法,并为操作日历字段(如获得下星期的日期)提供了一些方法。另外,该类还为实现包范围外的具体日历系统提供了其他字段和方法,这些字段和方法被定义为 protected。
Calendar 提供了一个类方法 getInstance(),以获得此类型的一个通用的对象。Calendar 类的getInstance()方法返回一个 Calendar 对象,其日历字段已由当前日期和时间初始化,其使用方法如下:
Calendar rightNow = Calendar.getlnstance();
Calendar 类提供的常用字段及其说明如表所示:
Calendar 类提供的常用方法及其说明如表所示:
从表可以看到,add()方法和 roll()方法都用来为给定的日历字段添加或减去指定的时间量,它们的主要区别在于:使用 add()方法时会影响大的字段,像数学里加法的进位或错位,而使用 roll()方法设置的日期字段只是进行增加或减少,不会改变更大的字段
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 simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日");
//调用format方法,格式化时间,转换为指定格式
String today = simpleDateFormat.format(date);
System.out.println("今天是:" + today); //输出当前日期
//获取自1970年1月1日至当前时间所经过的毫秒数
long time1 = date.getTime();
//使用默认时区和语言环境获得一个日历calendar
Calendar calendar = Calendar.getInstance();
//设置日历calendar中的年、月和日的值。因为月份是从0开始计算的,所以这里要减一
calendar.set(2049, 10-1, 1);
//计算1970年1月1日至2049年10月1日所经过的毫秒数
long time2 = calendar.getTimeInMillis();
//计算2049年10月1日距离当前时间相差的天数
long day = (time2-time1)/(1000*60*60*24);
System.out.println("距离2049年10月1日还有:" + day + "天!");
}
}
运行结果如下:
最后对 Calendar 类的使用做出几点总结:
c.set(CalendarDAY_OF_MONTH,0)获取的是上个月的最后一天,所以调用前需要将月份往后加一个月。
Calendar.MONTH的第一个月是使用0记录的,所以在获得月份数字后要加1。年和日是从1开始记录的,不需要加 1。
Calendar.DAY OF WEEK 的第一天是周日,周一是第二天,周六是最后一天。
Runtime 类是 JDK 供的运行时类,该类为 Java程序提供了与当前运行环境相连接的一个通道,Runtime 类不能使用 new 关键字创建实例,只能通过 Runtime. getRuntime()方法获取实例。
Runtime 类的常用方法如下表:
本地命令指的是操作系统的命令。例如,在 Linux 系统下就表示 shell 命令,在 Windows 系统下
表示 cmd 命令。
Runtime 类提供 exec()方法让 Java 代码可以执行系统的命令,exec()方法有很多重载的形式,例如:
Process exec(String command)
Process exec(Stringl cmdarray)
使用第二种重载方式的代码如下:
String command] = {"javac", "hello,java" };
Runtime.getRuntime().exec(command);
Process类的常用方法如表所示,开发可以使用 getInputStream()方法获取进程返回的信息。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class TrigonometricFunction {
public static void main(String[] args){
Runtime r = Runtime.getRuntime(); //获取本地Runtime对象
try {
Process p = r.exec("help");//执行 help 命令,获取进程对象
InputStream is = p.getInputStream();//获取进程的字节输入流
//将字节输入流转换为字符输入流
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String str = null;//创建 null 字符串
while ((str = br.readLine())!= null) { //如果字符流中可以获取非空内容
System.out.println(str); //打印获取的内容
}
}catch(IOException e){
e.printStackTrace();
}
}
}
Runtime类可以通过 freeMemory()方法查看当前Java 虚拟机可用内存的剩余量。如果程序能够实时监控内存剩余量,就可以尽量控制程序对内存的占用,从而避免出现“内存溢出”的情况。同样,也可以用来对测试程序性能,检验程序算法是否导致内存紧张。
public class CountDown {
public static void main(String[] args) {
Runtime r=Runtime.getRuntime();//获取本地Runtime对象
Integer ints[]=new Integer[10000];//创建长度为10000的整型数组
long before=r.freeMemory();//获取当前空闲内存数
System.out.println("赋值前空闲内存字节数:"+before);
for(int i=0,length=ints.length;i
运行结果如下: