Java 基础类库

Java 基础类库,第1张

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 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 添加或减去指定的时间量 amountboolean 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,相等返回 0int 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
现在是2021年
12月
31日
星期5
15时
41分
22秒
17毫秒
今天是本月的第 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 表示的年份,如 2011M月份。一般用 MM 表示月份,如果使用 MMM,则会 根据语言环境显示不同语言的月份使用 MM 表示的月份,如 05; 使用 MMM 表示月份,在 Locale.CHINA 语言环境下,如“十月”;在 Locale.US 语言环境下,如 Octd月份中的天数。一般用 dd 表示天数使用 dd 表示的天数,如 10D年份中的天数。表示当天是当年的第几天, 用 D 表示使用 D 表示的年份中的天数,如 295E星期几。用 E 表示,会根据语言环境的不同, 显示不 同语言的星期几使用 E 表示星期几,在 Locale.CHINA 语 言环境下,如“星期四”;在 Locale.US 语 言环境下,如 ThuH一天中的小时数(0~23)。一般用 HH 表示小时数使用 HH 表示的小时数,如 18h一天中的小时数(1~12)。一般使用 hh 表示小时数使用 hh 表示的小时数,如 10 (注意 10 有 可能是 10 点,也可能是 22 点)m分钟数。一般使用 mm 表示分钟数使用 mm 表示的分钟数,如 29s秒数。一般使用 ss 表示秒数使用 ss 表示的秒数,如 38S毫秒数。一般使用 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 秒

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5686947.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存