Java 基础类库

Oracle为Java提供了丰富的基础类库,通过这些基础类库可以提高开发效率,降低开发难度。作为合格的Java程序员而言,至少要熟悉Java SE中70%以上的类。

运行Java程序的参数

// Java程序入口:main()方法
public static void main(String[ ] args){....}
  • public修饰符:Java类由JVM调用,为了让JVM可以自由调用这个main()方法,所以使用public修饰符把这个方法暴露出来。
  • static修饰符:JVM调用这个主方法时,不会先创建该主类的对象,然后通过对象来调用该主方法。JVM直接通过该类来调用主方法,因此使用static修饰该主方法。
  • void返回值:因为主方法被JVM调用,该方法的返回值将返回给JVM,这没有任何意义,因此main()方法没有返回值。
  • 还包括了一个字符串数组形参数,根据方法调用的规则:谁调用方法,谁负责为形参赋值。也就是说,main()方法由JVM调用,即args形参应该由JVM负责赋值。

但是JVM怎么知道如何为args数组赋值呢?

public class ArgsTest
{
  public static void main(String[ ] args)
  {
    // 输出args数组的长度
    System.out.println(args.length);
    // 遍历args数组的每个长度
    for(String arg : args){
      System.out.println(arg);
    }
  }
}

执行上面的程序,发现程序仅仅输出一个0,这表明args数组是一个长度为0的数组—这是合理的。因为程序没有给args数组设定参数值,那么JVM就不知道args数组的元素,所以JVM将args数组设置成一个长度为0的数组。

如果改用下面的命令来运行的话

java ArgsTest Java Spring

那么输出则为

2
Java
Spring

使用Scanner获取键盘输入

Scanner是一个基于正则表达式的文本扫描器,它可以从文件、输入流、字符串解析出基本类型值和字符串值。

方法名说明
hasNextXxx():是否还有下一个输入项,其中Xxx可以是Int、Long等代表基本数据类型的字符串。如果只是判断是否包含下一个字符串,则直接使用hasNext()
nextXxx():获取下一个输入项。Xxx的含义与前一个方法中的Xxx相同

Scanner还提供了两个简单的方法来逐行读取

方法名说明
boolean hasNextLine():返回输入源中是否还有下一行
String nextLine():返回输入源中下一行的字符串

System类

System类代表当前Java程序的运行平台,程序不能创建System类的对象,System类提供了一些类变量和类方法,允许直接通过System类来调用这些类变量和类方法。

package 测试;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Map;
import java.util.Properties;

public class Test1 {

	public static void main(String[] args) throws FileNotFoundException, IOException {

		Map<String, String> env = System.getenv();
		for (String name : env.keySet()) {
			System.out.println(name + ">>>>>>" + env.get(name));
		}

		// 获取指定环境变量的值
		System.out.println("获取指定环境变量的值:---->" + System.getenv("Java_HOME"));

		// 获取所有的系统属性
		Properties props = System.getProperties();
		// 将所有的系统属性都保存到props.txt文件中
		props.store(new FileOutputStream("props.txt"), "System.properties");
		// 输出特定的系统属性
		System.out.println("输出特定的系统属性---->" + System.getProperty("os.name"));

	}

}

此外还会在此路径下创建一个props.txt文件,该文件记录了当前平台的所有系统属性。

System类还有两个获取系统当前时间的方法:currentTimeMillis()和nanoTime(),它们都返回一个long型整数。实际上它们都返回当前时间与UTC 1970年1月1日午夜的时间差,前者以毫秒作为单位,后者以纳秒作为单位。必须指出的是,这两个方法返回的时间粒度取决于顶层操作系统,可能所在的操作系统根本不支持以毫秒】纳秒作为计时单位。

System类的in、out和err分别代表系统的标准输入(通常是键盘)、标准输出(通常是显示器)和错误输入流,并提供了setIn(),setOut()和setErr()方法来改变系统的标准输入、标准输出和标准错误输出流。

Object类

方法名说明
boolean equals(Object obj):判断指定对象与该对象是否相等,此处相等的标准是,两个对象是同一个对象,因此该equals()方法通常没有太大的实用价值
protected void finalize():当系统中没有引用变量引用到该对象时,垃圾回收器调用此方法来清理该对象的资源。
Class<?> getClass()返回该对象的运行时类
int hashCode()返回该对象的hashCode值。在默认情况下,Object类的hashCode()方法根据该对象的地址来计算
String toString()返回该对象的字符串表示

当程序使用System.out,println()方法输出一个对象,或者把某个对象和字符串进行连接运算时,系统会自动调用该对象的toString()方法返回该对象的字符串表示。object类的toString()方法返回"运行时类名@十六进制hashCode值"格式的字符串,但是很多类都重写了Object类的toString方法,用于返回可以表述该对象信息的字符串

日期、时间类

Date类

Date对象既包括日期,也包括时间。

Date类提供的构造器

方法名说明
Date()生成一个代表当前日期时间的Date对象,该构造器在底层调用System.currentTimeMillis()获得long整数作为日期参数
Date(long date)根据指定的long型整数来生成一个Date对象。该构造器的参数表示创建的Date对象和GMT 1970年1月1日00:00:00之间的时间差,以毫秒作为计时单位

Date对象提供的方法

方法名说明
boolean after(Date when):测试该日期是否在指定日期when之后
boolean before(Date when):测试该日期是否在指定日期when之前
long getTime():返回该时间对应的long型整数,即从GMT 1970年1月1日00:00:00 到该Date对象之间的时间差,以毫秒作为计时单位。
void setTime(long time):设置该Date对象的时间

总体来说,Date是一个设计相当糟糕的类,因此Java官方推荐尽量少用Date的构造器和方法。

Calendar类

Calendar 类是一个抽象类,它为特定瞬间与 YEAR、MONTH、DAY_OF—MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(如获得下星期的日期) 提供了一些方法。

创建 Calendar 对象不能使用 new 关键字,因为 Calendar 类是一个抽象类,但是它提供了一个 getInstance() 方法来获得 Calendar类的对象。getInstance() 方法返回一个 Calendar 对象,其日历字段已由当前日期和时间初始化。

Calendar c = Calendar.getInstance();
方法描述
void add(int field, int amount)根据日历的规则,为给定的日历字段 field 添加或减去指定的时间量 amount
boolean after(Object when)判断此 Calendar 表示的时间是否在指定时间 when 之后,并返回判断结果
boolean before(Object when)判断此 Calendar 表示的时间是否在指定时间 when 之前,并返回判断结果
void clear()清空 Calendar 中的日期时间值
int compareTo(Calendar anotherCalendar)比较两个 Calendar 对象表示的时间值(从格林威治时间 1970 年 01 月 01 日 00 时 00 分 00 秒至现在的毫秒偏移量),大则返回 1,小则返回 -1,相等返回 0
int get(int field)返回指定日历字段的值
int getActualMaximum(int field)返回指定日历字段可能拥有的最大值
int getActualMinimum(int field)返回指定日历字段可能拥有的最小值
int getFirstDayOfWeek()获取一星期的第一天。根据不同的国家地区,返回不同的值
static Calendar getInstance()使用默认时区和语言坏境获得一个日历
static Calendar getInstance(TimeZone zone)使用指定时区和默认语言环境获得一个日历
static Calendar getInstance(TimeZone zone, Locale aLocale)使用指定时区和语言环境获得一个日历
Date getTime()返回一个表示此 Calendar 时间值(从格林威治时间 1970 年 01 月 01 日 00 时 00 分 00 秒至现在的毫秒偏移量)的 Date 对象
long getTimeInMillis()返回此 Calendar 的时间值,以毫秒为单位
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, int second)设置字段 YEAR、MONTH、DAY_OF_MONTH、HOUR、 MINUTE 和 SECOND 的值
void setFirstDayOfWeek(int value)设置一星期的第一天是哪一天
void setTimeInMillis(long millis)用给定的 long 值设置此 Calendar 的当前时间值

Calendar 对象可以调用 set() 方法将日历翻到任何一个时间,当参数 year 取负数时表示公元前。Calendar 对象调用 get() 方法可以获取有关年、月、日等时间信息,参数 field 的有效值由 Calendar 静态常量指定。

Calendar 类中定义了许多常量,分别表示不同的意义。

  • Calendar.YEAR:年份。
  • Calendar.MONTH:月份。
  • Calendar.DATE:日期。
  • Calendar.DAY_OF_MONTH:日期,和上面的字段意义完全相同。
  • Calendar.HOUR:12小时制的小时。
  • Calendar.HOUR_OF_DAY:24 小时制的小时。
  • Calendar.MINUTE:分钟。
  • Calendar.SECOND:秒。
  • Calendar.DAY_OF_WEEK:星期几。
package 时间类;

import java.util.Calendar;
import java.util.Date;

public class Calendar的使用 {
	public static void main(String[] args) {
		Calendar calendar = Calendar.getInstance(); // 如果不设置时间,则默认为当前时间
		calendar.setTime(new Date()); // 将系统当前时间赋值给 Calendar 对象
		System.out.println("现在时刻:" + calendar.getTime()); // 获取当前时间
		
		int year = calendar.get(Calendar.YEAR); // 获取当前年份
		System.out.println("现在是" + year + "年");
		
		int month = calendar.get(Calendar.MONTH) + 1; // 获取当前月份(月份从 0 开始,所以加 1)
		System.out.print(month + "月");
		
		int day = calendar.get(Calendar.DATE); // 获取日
		System.out.print(day + "日");
		
		int week = calendar.get(Calendar.DAY_OF_WEEK) - 1; // 获取今天星期几(以星期日为第一天)
		System.out.print("星期" + week);
		
		int hour = calendar.get(Calendar.HOUR_OF_DAY); // 获取当前小时数(24 小时制)
		System.out.print(hour + "时");
		
		int minute = calendar.get(Calendar.MINUTE); // 获取当前分钟
		System.out.print(minute + "分");
		
		int second = calendar.get(Calendar.SECOND); // 获取当前秒数
		System.out.print(second + "秒");
		
		int millisecond = calendar.get(Calendar.MILLISECOND); // 获取毫秒数
		System.out.print(millisecond + "毫秒");
		
		int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH); // 获取今天是本月第几天
		System.out.println("今天是本月的第 " + dayOfMonth + " 天");
		
		int dayOfWeekInMonth = calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH); // 获取今天是本月第几周
		System.out.println("今天是本月第 " + dayOfWeekInMonth + " 周");
		
		int many = calendar.get(Calendar.DAY_OF_YEAR); // 获取今天是今年第几天
		System.out.println("今天是今年第 " + many + " 天");
		
		Calendar c = Calendar.getInstance();
		c.set(2012, 8, 8); // 设置年月日,时分秒将默认采用当前值
		System.out.println("设置日期为 2012-8-8 后的时间:" + c.getTime()); // 输出时间
	}
}
现在时刻:Fri Dec 31 15:41:22 CST 2021
现在是20211231日
星期5
15412217毫秒
今天是本月的第 31 天
今天是本月第 5 周
今天是今年第 365 天
设置日期为 2012-8-8 后的时间:Sat Sep 08 15:41:22 CST 2012

DateFormat 类

DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。日期/时间格式化子类(如 SimpleDateFormat)允许进行格式化(也就是日期→文本)、解析(文本→日期)和标准化日期。

在创建 DateFormat 对象时不能使用 new 关键字,而应该使用 DateFormat 类中的静态方法 getDateInstance(),示例代码如下:

DateFormat df = DateFormat.getDatelnstance();
方法描述
String format(Date date)将 Date 格式化日期/时间字符串
Calendar getCalendar()获取与此日期/时间格式相关联的日历
static DateFormat getDateInstance()获取具有默认格式化风格和默认语言环境的日期格式
static DateFormat getDateInstance(int style)获取具有指定格式化风格和默认语言环境的日期格式
static DateFormat getDateInstance(int style, Locale locale)获取具有指定格式化风格和指定语言环境的日期格式
static DateFormat getDateTimeInstance()获取具有默认格式化风格和默认语言环境的日期/时间 格式
static DateFormat getDateTimeInstance(int dateStyle,int timeStyle)获取具有指定日期/时间格式化风格和默认语言环境的 日期/时间格式
static DateFormat getDateTimeInstance(int dateStyle,int timeStyle,Locale locale)获取具有指定日期/时间格式化风格和指定语言环境的 日期/时间格式
static DateFormat getTimeInstance()获取具有默认格式化风格和默认语言环境的时间格式
static DateFormat getTimeInstance(int style)获取具有指定格式化风格和默认语言环境的时间格式
static DateFormat getTimeInstance(int style, Locale locale)获取具有指定格式化风格和指定语言环境的时间格式
void setCalendar(Calendar newCalendar)为此格式设置日历
Date parse(String source)将给定的字符串解析成日期/时间

格式化样式主要通过 DateFormat 常量设置。将不同的常量传入到表 1 所示的方法中,以控制结果的长度。DateFormat 类的常量如下。

  • SHORT:完全为数字,如 12.5.10 或 5:30pm。
  • MEDIUM:较长,如 May 10,2016。
  • LONG:更长,如 May 12,2016 或 11:15:32am。
  • FULL:是完全指定,如 Tuesday、May 10、2012 AD 或 11:l5:42am CST。
// 获取不同格式化风格和中国环境的日期
DateFormat df1 = DateFormat.getDateInstance(DateFormat.SHORT, Locale.CHINA);
DateFormat df2 = DateFormat.getDateInstance(DateFormat.FULL, Locale.CHINA);
DateFormat df3 = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.CHINA);
DateFormat df4 = DateFormat.getDateInstance(DateFormat.LONG, Locale.CHINA);

// 获取不同格式化风格和中国环境的时间
DateFormat df5 = DateFormat.getTimeInstance(DateFormat.SHORT, Locale.CHINA);
DateFormat df6 = DateFormat.getTimeInstance(DateFormat.FULL, Locale.CHINA);
DateFormat df7 = DateFormat.getTimeInstance(DateFormat.MEDIUM, Locale.CHINA);
DateFormat df8 = DateFormat.getTimeInstance(DateFormat.LONG, Locale.CHINA);

// 将不同格式化风格的日期格式化为日期字符串
String date1 = df1.format(new Date());
String date2 = df2.format(new Date());
String date3 = df3.format(new Date());
String date4 = df4.format(new Date());

// 将不同格式化风格的时间格式化为时间字符串
String time1 = df5.format(new Date());
String time2 = df6.format(new Date());
String time3 = df7.format(new Date());
String time4 = df8.format(new Date());

// 输出日期
System.out.println("SHORT:" + date1 + " " + time1);
System.out.println("FULL:" + date2 + " " + time2);
System.out.println("MEDIUM:" + date3 + " " + time3);
System.out.println("LONG:" + date4 + " " + time4);
SHORT:21-12-31 下午3:53
FULL:2021年12月31日 星期五 下午03时53分12秒 CST
MEDIUM:2021-12-31 15:53:12
LONG:2021年12月31日 下午03时53分12秒

SimpleDateFormat 类

如果使用 DateFormat 类格式化日期/时间并不能满足要求,那么就需要使用 DateFormat 类的子类——SimpleDateFormat。

SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类,它允许进行格式化(日期→文本)、解析(文本→日期)和规范化。SimpleDateFormat 使得可以选择任何用户定义的日期/时间格式的模式

SimpleDateFormat 类主要有如下 3 种构造方法。

  • SimpleDateFormat():用默认的格式和默认的语言环境构造 SimpleDateFormat。
  • SimpleDateFormat(String pattern):用指定的格式和默认的语言环境构造 SimpleDateF ormat。
  • SimpleDateFormat(String pattern,Locale locale):用指定的格式和指定的语言环境构造 SimpleDateF ormat。
字母含义示例
y年份。一般用 yy 表示两位年份,yyyy 表示 4 位年份使用 yy 表示的年扮,如 11; 使用 yyyy 表示的年份,如 2011
M月份。一般用 MM 表示月份,如果使用 MMM,则会 根据语言环境显示不同语言的月份使用 MM 表示的月份,如 05; 使用 MMM 表示月份,在 Locale.CHINA 语言环境下,如“十月”;在 Locale.US 语言环境下,如 Oct
d月份中的天数。一般用 dd 表示天数使用 dd 表示的天数,如 10
D年份中的天数。表示当天是当年的第几天, 用 D 表示使用 D 表示的年份中的天数,如 295
E星期几。用 E 表示,会根据语言环境的不同, 显示不 同语言的星期几使用 E 表示星期几,在 Locale.CHINA 语 言环境下,如“星期四”;在 Locale.US 语 言环境下,如 Thu
H一天中的小时数(0~23)。一般用 HH 表示小时数使用 HH 表示的小时数,如 18
h一天中的小时数(1~12)。一般使用 hh 表示小时数使用 hh 表示的小时数,如 10 (注意 10 有 可能是 10 点,也可能是 22 点)
m分钟数。一般使用 mm 表示分钟数使用 mm 表示的分钟数,如 29
s秒数。一般使用 ss 表示秒数使用 ss 表示的秒数,如 38
S毫秒数。一般使用 SSS 表示毫秒数使用 SSS 表示的毫秒数,如 156
package 时间类;

import java.text.SimpleDateFormat;
import java.util.Date;

public class SimpleDateFormat类的使用 {

	public static void main(String[] args) {
		Date now = new Date(); // 创建一个Date对象,获取当前时间
		// 指定格式化格式
		SimpleDateFormat f = new SimpleDateFormat("今天是 " + "yyyy 年 MM 月 dd 日 E HH 点 mm 分 ss 秒");
		System.out.println(f.format(now)); // 将当前时间袼式化为指定的格式
	}
}
今天是 2021 年 12 月 31 日 星期五 15 点 55 分 52 秒
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Micek

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值