第6章Java基础类库
6.1 与用户互动
6.1.1 运行Java程序的参数
下面详解main()方法为什么采用这个方法签名。
- public修饰符:Java类由JVM调用,为了让JVM可以自由调用这个main()方法,所以使用public修饰符把这个方法暴露出来。
- static修饰符:JVM调用这个主方法时,不会先创建该主类的对象,然后通过对象来调用该主方法。JVM直接通过该类来调用主方法,因此使用static修饰主方法。
- void返回值:因为主方法被JVM调用,该方法的返回值将返回给JVM,这没有任何意义,因此main()方法没有返回值。
6.1.2 使用Scanner获取键盘输入
Scanner主要提供了两个方法来扫描输入:
- hasNextXxx():是否还有下一个输入项,其中Xxx可以是Int、Long等代表基本数据类型的字符串。如果只是判断包含下一个字符串,则直接使用hasNext()。
- nextXxx():获取下一个输入项。Xxx的含义与前一个方法中的Xxx相同。
import java.util.Scanner;
public class ScannerKeyBoardTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()){
System.out.println("键盘输入的内容是:" +
sc.next());
}
}
}
事实上,Scanner提供了两个简单的方法来逐行读取。
- boolean hasNextLine():返回输入源中是否还有下一行。
- String nextLine():返回输入源中下一个的字符串。
import java.util.Scanner;
public class ScannerLongTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNextLong()){
System.out.println("键盘输入的内容是:"
+ sc.nextLong());
}
}
}
6.2 系统相关
6.2.1 System类
6.2.2 Runtime类
6.3 常用类
6.3.1 Object类
Object类提供了如下几个常用方法:
- boolean equals(Object obj):判断指定对象与该对象是否相等。
- protected void finalize():当系统中没有引用变量引用到该对象时,垃圾回收器调用此方法来清理该对象的资源。
- Class<?>getClass():返回该对象的运行时类。
- int hashCode():返回该对象的hashCode值。
- String toString():返回该对象的字符串表示。
6.3.2 Objects类
6.3.3 String、StringBuffer、StringBuilder类
6.3.4 Math类
6.3.5 ThreadLocalRandom类与Random类
6.4 Java 8 的日期、时间类
6.4.1 Date类
Date类的两个构造器:
- Date():生成一个代表当前日期的Date对象。
- Date(long date):根据指定的long型整数来生成一个Date对象。
Date类的方法:
- boolean after(Date when):测试该日期是否在指定日期when之后。
- boolean before(Date when):测试该日期是否在指定日期when之前。
- long getTime():返回该时间对应的long型整数。
- void setTime(long time):设置该类Date对象的时间。
总体来说,Date是一个设计相当糟糕的类,因此Java官方推荐尽量少用Date的构造器和方法。
6.4.2 Calendar类
Calendar类提供了大量访问、修改日期时间的方法,常用方法如下:
- void add(int field, int amount):根据日历的规则,为给定的日历字段添加或减去指定的时间量。
- int get(int field):返回指定日历字段的值。
- int getActualMaximum(int field):返回指定日历字段可能拥有的最大值。
- int getActualMinimum(int field):返回指定日历字段可能拥有的最小值。
- void roll(int field, int amount):与add()方法类似,区别在于架上amount后超过了该字段所能表示的最大范围时,也不会向上一个字段进位。
- void set(int field, int value):将给定的日历字段设置为给定值。
- void set(int year, int mouth, int date):设置Calendar对象的年、月、日三个字段的值。
- void set(int year, int mouth, int date, int hourOfDay, int minute, int second):设置Calendar对象的年、月、日、时、分、秒6个字段的值。
如下程序示范了Calendar类的常规用法:
import java.util.Calendar;
public class CalendatTest {
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
System.out.println(c.get(Calendar.YEAR));
System.out.println(c.get(Calendar.MONTH));
System.out.println(c.get(Calendar.DATE));
c.set(2003, 10, 23, 12, 32, 23);
System.out.println(c.getTime());
c.add(Calendar.YEAR, -1);
System.out.println(c.getTime());
c.roll(Calendar.MONTH, -8);
System.out.println(c.getTime());
}
}
Calendar类还有如下几个注意点 1.add和roll的区别 (1)add有如下两条规则: ①当被修改的字段超出它允许的范围时,会发生进位,即上一级字段也会增大。 ②如下下一级字段也需要改变,那么该字段会修正到变化最小的值。 (2)roll()的规则与add()处理规则不同,当修改的字段超出了它允许的范围时,上一级字段不会增大。 (3)下一级字段的处理规则与add()相似。 2.设置Calendar的容错性
import java.util.Calendar;
public class LenientTest {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.MONTH, 13);
System.out.println(cal.getTime());
cal.setLenient(false);
cal.set(Calendar.MONTH, 13);
System.out.println(cal.getTime());
}
}
3.set方法延迟修改
import java.util.Calendar;
public class LazyTest {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
cal.set(2003, 7, 31);
cal.set(Calendar.MONTH, 8);
cal.set(Calendar.DATE, 5);
System.out.println(cal.getTime());
}
}
6.4.3 Java 8 新增的日期、时间包
Java 8 专门新增了一个java.time包,该包下包含了如下常用的类:
- Clock:该类用于回去指定时区的当前日期、时间。
- Duration:该类代表持续时间。
- Instant:代表一个具体的时刻,可以精确到纳秒。
- LocalDate:该类不带时区的日期,例如2003-12-03。
- LocalTime:该类代表不带时区的时间,例如10:15:30。
- LocalDateTime:该类代表不带时区的日期、时间,例如2007-12-03T10:15:30。
- MonthDay:该类仅代表月日,例如–04-12。
- Year:该类仅代表年。
- YearMonth:该类仅代表年月。
- ZonedDateTime:该类代表一个时区化的日期。
- Zoneld:该类代表一个时区。
- DayOfWeek:这是一个枚举类,定义了周日到周六的枚举值。
- Month:这也是一个枚举类,定义了一月到十二月的枚举值。
6.5 Java 8 新增的日期、时间格式器
获取DateTimeFormatter对象有如下三种常见的方式:
- 直接使用静态常量创建DateTimeFormatter格式器。
- 使用达标不同风格的枚举值来创建DateTimeFormatter格式器。
- 根据模式字符串来创建DateTimeFormatter格式器。
6.5.1 使用DateTimeFormatter完成格式化
使用DateTimeFormatter将日期、时间(LocalDate、LocalDateTime、LocalTime等实例)格式化为字符串,可通过如下两种方式:
- 调用DateTimeFormatter的format(TemporalAccessor temporal)方法执行格式化,其中LocalDate、LocalDateTime、LocalTime等类都是TemporalAccessor接口的实现类。
- 调用LocalDate、LocalDateTime、LocalTime等日期、时间对象的format(DateTimeFormatter formatter)方法执行格式化。
6.5.2 使用DateTimeFormatter解析字符串
本章练习
1.定义一个长度为10的整数数组,可用于保存用户通过控制台输入的10个整数。并计算它们的平均值、最大值、最小值。 2.将字符串“ABCDEFG”中的“CD”截取出来;再将“B”、“F”截取出来。 3.将A1B2C3D4E5F6G7H8拆分开来,并分别存入int[]和String[]数组。得到的结果为[1,2,3,4,5,6,7,8]和[A,B,C,D,E,F,G,H]。
|