常用API
- Date类
- DateFormat类
- Calendar类
- System类
- StringBuilder类
- Object类
Date类
简述:
java.util.Date
;表示日期和时间的类
类Date表示特定的瞬间,精确到毫秒
时间原点:1970年1月1日 00:00:00
把毫秒转换为日期:1天 = 86400000毫秒
中国属于东八区:1970年1月1日 08:00:00
构造方法
public Date()
:分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)。public Date(long date)
:分配Date对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即1970年1月1日00:00:00 GMT)以来的指定毫秒数。
常用方法
public long getTime()
:返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
public class Demo04Date {
public static void main(String[] args) {
// System.out.println(System.currentTimeMillis());//获取当前系统时间经历了多少毫秒
Date date = new Date();
System.out.println(date);
Date date1 = new Date(0L);
System.out.println(date1);
System.out.println(new Date().getTime());//相当于System.currentTimeMillis()
}
}
DateFormat类
简述: java.text.DataFormat
:是日期/时间格式化子类的抽象类
作用:
格式化(日期 -> 文本)、解析(文本-> 日期)和标准化
注意事项: DateFormat是一个抽象类,不能直接创建对象,可以使用DateFormate的子类
构造方法
由于DateFormat为抽象类,不能直接使用,所以需要常用的子类java.text.SimpleDateFormat
SimpleDateFormat(String pattern):
用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat。
常用方法
public final String format(Date date):
将一个 Date 格式化为日期/时间字符串。
使用步骤:
- 创建SimpleDateFormat对象,构造方法中传递指定的模式
- 调用SimpleDateFormat对象中的方法format,按照构造方法中指定格式,把Date日期格式化为符合模式的字符串
public Date parse(String source):
从给定字符串的开始解析文本,以生成一个日期。该方法不使用给定字符串的整个文本。
使用步骤:
- 创建SimpleDateFormat对象,构造方法中传递指定的模式
- 调用SimpleDateFormat对象中的方法parse,把符合模式的字符串,解析为Date日期
注意:
public Date parse(String souce) throws ParseException
public class Demo05DateFormat {
public static void main(String[] args) throws ParseException {
//1、创建SimpleDateFormat对象,构造方法中传递指定的模式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
Date date = new Date();
System.out.println(date);//Wed Nov 27 13:47:15 CST 2019
//2、调用SimpleDateFormat对象中的方法format,按照构造方法中指定格式,把Date日期格式化为符合模式的字符串
System.out.println(sdf.format(date));//2019年11月27日 13时47分15秒
// System.out.println(new SimpleDateFormat("yyyy年MM月DD日 HH时mm分ss秒").format(new Date()));通过匿名对象转换
System.out.println("====================");
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
Date date1 = sdf1.parse("2019年11月27日 14时03分35秒");
System.out.println(date1);
}
}
Calendar类
简述:
Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。
静态方法
Calendar是一个抽象类,不能直接创建对象,但是里面有一个静态的getInstance方法,返回类型为Calendar类的子类对象
static Calendar getInstance(){
//...
}使用默认时期和语言环境获得一个日历
常用方法
public int get(int field):
返回给定日历字段的值。public void set(int field, int value):
将给定的日历字段设置为给定值。public abstract void add(int field, int amount):
根据日历的规则,为给定的日历字段添加或减去指定的时间量。public Date getTime():
返回一个表示此Calendar时间值(从历元到现在的毫秒偏移量)的Date对象。
public class Demo06Calendar {
public static void main(String[] args) {
/* Calendar c = Calendar.getInstance();//多态 日历格式
System.out.println(c);*/
Calendar c = Calendar.getInstance();
//public int get(int field):返回给定日历字段的值。
System.out.println("现在的年份:"+c.get(Calendar.YEAR));
System.out.println("现在的月份:"+(c.get(Calendar.MONTH)+1));//西方月份是0-11,所以要+1
//public void set(int field, int value):将给定的日历字段设置为给定值。
c.set(Calendar.YEAR,2020);
//同时设置年月日 利用了方法的重载
c.set(2020,11,27);
System.out.println("现在的年份:"+c.get(Calendar.YEAR));
System.out.println("现在的月份:"+(c.get(Calendar.MONTH)));
//public abstract void add(int field, int amount):根据日历的规则,为给定的日历字段添加或减去指定的时间量。
c.add(Calendar.MONTH,-2);
c.add(Calendar.YEAR,-1);
System.out.println("现在的年份:"+c.get(Calendar.YEAR));
System.out.println("现在的月份:"+(c.get(Calendar.MONTH)));
// public Date getTime():返回一个表示此Calendar时间值(从历元到现在的毫秒偏移量)的Date对象。
System.out.println(c.getTime());//把日历转换为日期
}
}
System类
简述:
java.lang.System
类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作
常用方法
java.lang.System
类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作,在System类的API文档中,常用的方法有:
public static long currentTimeMillis():
返回以毫秒为单位的当前时间。public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length):
将数组中指定的数据拷贝到另一个数组中。
- src : 源数组
- srcPos: 源数组起始位置
- dest: 目标数组
- destPos: 目标数组起始位置
- length:复制的数组元素数量
public class Demo07System {
public static void main(String[] args) {
/*long start = System.currentTimeMillis();
for (int i = 0; i < 1000; i++) {
System.out.println(i);
}
long end = System.currentTimeMillis();
System.out.println("共耗时毫秒:" + (end - start));*/
int[] src = {7,8,9};
int[] dest = {1,2,3};
System.out.println(Arrays.toString(dest));
System.arraycopy(src,0,dest,0,3);
System.out.println(Arrays.toString(dest));
}
}
StringBuilder类
简述:
java.lang.StringBuilder:
字符串缓冲区,可以提高字符串的效率
构造方法
StringBuilder():
构造一个不带任何字符的字符串生成器,其初始容量为 16 个字符StringBuilder(CharSequence seq):
构造一个字符串生成器,它包含与指定的 CharSequence 相同的字符。
常用方法
public StringBuilder append():
可以添加任意类型字符串,返回当前对象
将 boolean 参数的字符串表示形式追加到序列。public String toString():
返回此序列中数据的字符串表示形式。
String -> StringBuilder :可以通过调用StringBuilder的构造方法
StringBuilder -> String :可以通过toString方法
public class Demo01StringBuilder {
public static void main(String[] args) {
String str = "aaa";
StringBuilder bu = new StringBuilder(str);
bu.append("bbb");
System.out.println("bu:"+bu);
String s = bu.toString();
System.out.println("s:"+s);
//无参构造
/* StringBuilder str1 = new StringBuilder();
System.out.println(str1);
StringBuilder str2 = new StringBuilder("aaaa");
System.out.println(str2);
//append方法返回的是this
System.out.println(str1.append("aaaa"));
System.out.println(str1==str1.append("111"));
System.out.println(str1==str1.append(true));
System.out.println(str1==str1.append(1.1));
System.out.println(str1==str1.append(111));
System.out.println("aaaa".toUpperCase().toLowerCase());*/
}
}
Object类
简述:
java.lang.Object
类是Java语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使用。
常用方法
-
public String toString():
返回该对象的字符串表示。
toString方法返回该对象的字符串表示,其实该字符串内容就是对象的类型+@+内存地址值。
由于toString方法返回的结果是内存地址,而在开发中,经常需要按照对象的属性得到相应的字符串表现形式,因此也需要重写它。输出对象名的时候默认调用了toString方法 -
public boolean equals(Object obj):
指示其他某个对象是否与此对象“相等”。
默认地址比较
如果没有覆盖重写equals方法,那么Object类中默认进行==运算符的对象地址比较,只要不是同一个对象,结果必然为false。
对象内容比较
如果希望进行对象的内容比较,即所有或指定的部分成员变量相同就判定两个对象相同,则可以覆盖重写equals方法。
import java.util.Objects;
public class Person {
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
private String name;
private int age;
/*
我们需要重写equals方法
但是有一个问题:
这个时候涉及到多态问题
多态的弊端:无法使用该子类特殊有的方法属性
结局方法:我们可以通过向下转型(强制类型转换)
Person p = (Person)obj;
*/
@Override
public boolean equals(Object o) {
if (this == o) return true;
//getClass() != o.getClass() 使用反射技术,判断o是否是Person类型,等效于o instanceof Person
如果参数为空,或者类型信息不一样,则认为不同
if (o == null || getClass() != o.getClass()) return false;
转换为当前类型
Person person = (Person) o;
//要求基本类型相等,并且将引用类型交给java.util.Objects类的equals静态方法取用结果
return age == person.age &&
Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
/*public boolean equals(Object obj){
//增加一次判断,传递的参数obj如果是this本身,直接返回true,提高程序效率
if(obj==this){
return true;
}
//增加一次判断,传递的参数obj如果是null,直接返回false,直接返回false,提高程序效率
if(obj==null){
return false;
}
//增加一次判断,防止类型转换异常ClassCastException
if(obj instanceof Person){
Person p = (Person)obj;
//比较两个对象的属性this(p1),另外一个是obj(p2)
boolean b = this.name.equals(p.name) && this.age == p.age;
}
return false;
}*/
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public Person() {
}
}
*/
public class Demo01String {
public static void main(String[] args) {
Person per = new Person("迪丽热巴",18);
System.out.println(per);
String aaa = "aaaaa";
System.out.println(aaa);
}
}
public class Demo02Equals {
public static void main(String[] args) {
Person p1 = new Person("迪丽热巴",15);
Person p2 = new Person("迪丽热巴",15);
/* boolean result = p1.equals(p2);
System.out.println(p1);
System.out.println(p2);
System.out.println(result);
System.out.println("=================");
p1=p2;
result = p1.equals(p2);
System.out.println(result);*/
System.out.println("===================");
//重写了equals方法
System.out.println(p1.equals(p2));
}
}
参考文献
《JDK API 1.6.0 中文版》