Java学习——Java常用类(上)
概述
Java提供了强大的类库,帮助开发者快速完成开发任务。
本篇主要介绍以下常用类:
- 包装类:Integer等
- 字符串相关:String、 StringBuffer、 StringBuilder
- 日期相关: Date、 Calendar、 SimpleDateFormat
- 其他:Math、Random、Runtime、System
包装类
在Java中8种基本数据类型不属于类,不具备“对象”的特征,没有成员变量和方法,不方便进行面向对象的操作。为此,Java提供包装类(Wrapper Class)来将基本数据类型包装成类,每个Java基本数据类型在java.lang包中都有一个相应的包装类, 每个包装类对象封装一个基本数据类型数值。
包装类都是final的,不能被继承。包装类都是不可 变类,类似于String类,一旦创建了对象,其内容 就不可以修改。包装类还可以分成三种不同类别: 数值包装类(Byte、Short、Integer、Long、Float和 Double)、Character和Boolean。
数值包装类
相同点:
构造方法类似
每一个数值包装类都有两个构造方法,以Integer 为例,
Integer构造方法如下:
- Integer(int value):通过指定一个数值构造 Integer 对象。
- Integer(String s):通过指定一个字符串 s 构造对象,s 是十进制字符串表示的数值。
共同的父类
这6个数值包装类有一个共同的父类—— Number,Number是一个抽象类。
除了这6个子类还有:AtomicInteger、AtomicLong、 BigDecimal和BigInteger。
Number是抽象类,要求它的子类必须实现如下6个方法:
- byte byteValue():将当前包装的对象转换为 byte类型的数值。
- double doubleValue():将当前包装的对象转 换为double类型的数值。
- float floatValue():将当前包装的对象转换为float类型的数值。
- int intValue():将当前包装的对象转换为int 类型的数值。
- long longValue():将当前包装的对象转换为 long类型的数值。
- short shortValue():将当前包装的对象转换为 short类型的数值。
通过这6个方法数值包装类可以互相转换这6种数值,但是需要注意的是大范围数值转换为小范围的数值,可能会导致精度的丢失。
compareTo()方法
每一个数值包装类都有 int compareTo(数值包装 类对象)
方法,可以进行包装对象的比较。
方法返回值是 int ,如果返回值是0,则相等;如果返回值小于0,则此对象小于参数对象;如果返回值大于0,则此对象大于参数对象。
字符串转换为基本数据类型
每一个数值包装类都提供一些静态parseXXX()方法将字符串转换为对应的基本数据类型。
例如 int 类型的包装类 Integer
- static int parseInt(String s):将字符串 s 转换有符号的十进制整数。
- static int parseInt(String s, int radix):将字符串 s 转换有符号的整数,radix是指定基数,基数用来指定进制。注意这种指定基数的方法在浮点数包装类(Double和Float)中没有的。
基本数据类型转换为字符串
每一个数值包装类都提供一些静态toString()方法实现将基本数据类型数值转换为字符串,以 Integer为例,方法定义如下:
- static String toString(int i):将该整数i转换为有符号的十进制表示的字符串。
- static String toString(int i, int radix):将该整数 i
转换为有符号的特定进制表示的字符串,radix是基数可以指定进制。注意这种指定基数的方法在浮点数包装类(Double和Float)中没有的。
举例:
// 1.构造方法 ,这样手动将数据封装到封装类里已经过时
//创建数值为80的Integer对象
Integer objInt = new Integer(80);
//创建数值为80.0的Double对象
Double objDouble = new Double(80.0);
//通过"80.0"字符串创建数值为80.0的Float对象
Float objFloat = new Float("80.0");
//通过"80"字符串创建数值为80的Long对象
Long objLong = new Long("80");
// 2.Number类方法 ,类型转换
//Integer对象转换为long数值
long longVar = objInt.longValue();
//Double对象转换为int数值
int intVar = objDouble.intValue();
System.out.println("intVar = " + intVar);
System.out.println("longVar = " + longVar);
// 3.compareTo()方法
Float objFloat2 = new Float(100);
int result = objFloat.compareTo(objFloat2); // 此时result = -1,表示objFloat小于objFloat2
System.out.println(result);
// 4.字符串转换为基本数据类型 ,parseXXX()方法
// 10进制"100"字符串转换为10进制数为100
int intVar2 = Integer.parseInt("100");
// 16进制"ABC"字符串转换为10进制数为2748
int intVar3 = Integer.parseInt("ABC", 16);
System.out.println("intVar2 = " + intVar2);
System.out.println("intVar3 = " + intVar3);
// 5.基本数据类型转换为字符串
// 100转换为10进制字符串
String str1 = Integer.toString(100);
// 100转换为16进制字符串结果是64
String str2 = Integer.toString(100, 16);
System.out.println("str1 = " + str1);
System.out.println("str2 = " + str2);
日期相关
Java 8之前日期类是java.util.Date,Date类比较古老,其中的很多方法现在已经废弃了,但是目前仍然有很多程序还在使用Date类。
Java 8之前与日期时间相关类还有 DateFormat、Calendar和TimeZone,DateFormat用于日期格式化,Calendar日历类,TimeZone是时区类。
Date类
我们从API中可以看到Date类的愈多方法都显示已过时:
我们则在其中常用几个方法,
构造方法:
- Date():用当前时间创建Date对象,精确到毫秒。
- Date(long date):指定标准基准时间以来的毫秒数创建Date对象。标准基准时间是格林威治时间1970年1月1日00:00:00。
普通方法:
- boolean after(Date when):测试此日期是否在 when日期之后。
- boolean before(Date when):测试此日期是否在 when日期之前。
- int compareTo(Date anotherDate):比较两个日期的顺序。如果参数日期等于此日期,则返回值0;如果此日期在参数日期之前,则返回小于0 的值;如果此日期在参数日期之后,则返回大于0的值。
- long getTime():返回自1970年1月1日00:00:00以来此Date对象表示的毫秒数。
- void setTime(long time):用毫秒数time设置日期对象,time是自1970年1月1日00:00:00以来此Date对象表示的毫秒数。
举例:
public class Demo1 {
public static void main(String[] args) {
Date now = new Date(); //获取系统当前时间
System.out.println("now = " + now);
System.out.println("now.getTime() = " + now.getTime()); //调用方法转换为自1970年1月1日00:00:00的毫秒数
System.out.println();
Date date = new Date(1234567890123L); //设置long类型的
System.out.println("date = " + date);
// 测试now和date日期
display(now, date);
// 重新设置日期time
date.setTime(9999999999999L);
System.out.println("修改之后的date = " + date);
// 重新测试now和date日期
display(now, date);
}
// 测试after、before和compareTo方法
public static void display(Date now, Date date) {
System.out.println(); System.out.println("now.after(date) = " + now.after(date));
System.out.println("now.before(date) = " + now.before(date));
System.out.println("now.compareTo(date) = " + now.compareTo(date));
System.out.println();
}
}
运行结果:
日期格式化和解析
我们对系统的日期输出格式不习惯的话,可以对日期进行格式化输出。日期格式化类是 java.text.DateFormat,DateFormat是抽象类,它的常用具体类是java.text.SimpleDateFormat。
DateFormat中提供日期格式化和日期解析方法,具体方法说明如下:
- String format(Date date):将一个Date格式化为日期/时间字符串。
- Date parse(String source):从给定字符串的开始解析文本,以生成一个日期对象。如果解析失败则抛出ParseException。
SimpleDateFormat构造方法如下:
- SimpleDateFormat():用默认的模式和默认语言环境的日期格式符号构造SimpleDateFormat。
- SimpleDateFormat(String pattern):用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。pattern参数是日期和时间格式模式,表中所示是常用的日期和时间格式模式。
举例:
public class Demo2 {
public static void main(String[] args) throws ParseException {
Date date = new Date(1234567890123L);
System.out.println("格式化前date = " + date);
DateFormat df = new SimpleDateFormat();
System.out.println("格式化后date = " + df.format(date));
df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("格式化后date = " + df.format(date));
String dateString = "2018-08-18 08:18:58";
Date date1 = df.parse(dateString);
System.out.println("从字符串获得日期对象 = " + date1);
}
}
运行结果:
Calendar类
从Date类的API中看到大多方法,已由Calendar类中的方法取代:
有时为了取得更多的日期时间信息,或对日期时间进行操作,可以使用java.util.Calendar类,Calendar 是一个抽象类,不能实例化,但是通过静态工厂方法getInstance()获得Calendar实例。
Calendar类的主要方法:
- static Calendar getInstance():使用默认时区和语 言环境获得一个日历。
- void set(int field, int value):将给定的日历字段 设置为给定值。
- void set(int year,int month,int date):设置日历字
段YEAR、MONTH和DAY_OF_MONTH的值。 - Date getTime():返回一个表示此Calendar时间值 (从1970年1月1日00:00:00至现在的毫秒数)的
Date对象。 - boolean after(Object when):判断此Calendar表示 的时间是否在指定时间之后,返回判断结果。
- boolean before(Object when):判断此Calendar表 示的时间是否在指定时间之前,返回判断结 果。
- int compareTo(Calendar anotherCalendar):比较 两个Calendar对象表示的时间值。
举例:
public class Demo3 {
public static void main(String[] args) throws ParseException {
// 获得默认的日历对象
Calendar calendar = Calendar.getInstance();
// 设置日期2018年8月18日
calendar.set(2018, 7, 18);
// 通过日历获得Date对象
Date date = calendar.getTime();
System.out.println("格式化前date = " + date);
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
System.out.println("格式化后date = " + df.format(date));
System.out.println();
calendar.clear();
// 设置日期2018年8月28日
calendar.set(Calendar.YEAR, 2018);
calendar.set(Calendar.MONTH, 7);
calendar.set(Calendar.DATE, 28);
// 通过日历获得Date对象
date = calendar.getTime();
System.out.println("格式化前date = " + date);
System.out.println("格式化后date = " + df.format(date)); }
}
运行结果: