-
Object类
定义:java.lang.Object
类是Java语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使用。在对象实例化的时候,最终找的父类就是Object。如果一个类没有特别指定父类, 那么默认则继承自Object类
-
public String toString()
:将对象转换为字符串。
toString方法返回该对象的字符串表示,其实该字符串内容就是对象的类型+@+内存地址值。
由于toString方法返回的结果是内存地址,而在开发中,经常需要按照对象的属性得到相应的字符串表现形式,因此也需要重写它。如果不希望使用toString方法的默认行为,则可以对它进行覆盖重写
@Override
public String toString() {
return "User{" +
"userId=" + userId +
", userName='" + userName + '\'' +
", userPwd='" + userPwd + '\'' +
'}';
}
-
public boolean equals(Object obj)
:指示其他某个对象是否与此对象“相等”。
调用成员方法equals并指定参数为另一个对象,则可以判断这两个对象是否是相同的。这里的“相同”有默认和自定义两种方式。
默认地址比较
如果没有覆盖重写equals方法,那么Object类中默认进行==
运算符的对象地址比较,只要不是同一个对象,结果必然为false。
对象内容比较
如果希望进行对象的内容比较,即所有或指定的部分成员变量相同就判定两个对象相同,则可以覆盖重写equals方法。例如:
package case7;
import java.util.Objects;
public class TestPerson {
public static void main(String[] args) {
Person p1 = new Person("刘德华", 45);
System.out.println(p1);//case7.Person@1540e19d
System.out.println(p1.toString());
Person p2 = new Person("刘德华", 45);
System.out.println(p1.equals(p2));
String s1 = "重地";
String s2 = "通话";
System.out.println(s1.hashCode());
System.out.println(s2.hashCode());
Class<? extends String> aClass = s1.getClass();
Class<? extends String> bClass = s2.getClass();
System.out.println(aClass == bClass);
System.out.println(Objects.isNull(s1));
System.out.println(Objects.nonNull(s1));
}
}
package case7;
import java.util.Objects;
public class Person extends Object{
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age &&
Objects.equals(name, person.name);
}
/* @Override
public boolean equals(Object obj) {
//先判断地址
if(this == obj){
return true;
}
//判断类型
if(!(obj instanceof Person)){
return false;
}
// 判断内容-属性值
Person otherPerson = (Person)obj;
if(this.name.equals(otherPerson.name) && this.age == otherPerson.age){
return true;
}
return false;
}*/
}
-
Date类
java.util.Date:
Date() // 代表当前时间的Date对象
Date(long date) // 代表Long类型表示的时间对象
基准时间 :
1970年1月1日00:00:00 GMT
getTime() :获取当前时间的毫秒值
setTime(long) : 可以将Long型数据表示的时间 设置为对应的时间
package com.case4;
import java.text.ParseException;
import java.util.Date;
public class Test {
public static void main(String[] args) throws ParseException {
Date date = new Date();
System.out.println(date);
System.out.println(date.toLocaleString());
System.out.println("================================");
System.out.println(DateUtil.convertTostring(new Date(),"yyyy-MM-dd"));
System.out.println(DateUtil.convertToDate("1998-09-13", "yyyy-MM-dd"));
}
}
tips:在使用println方法时,会自动调用Date类中的toString方法。Date类对Object类中的toString方法进行了覆盖重写,所以结果为指定格式的字符串。
-
DateFormat类
作用:是日期/时间格式化子类的抽象类,我们通过这个类可以帮我们完成日期和文本之间的转换,也就是可以在Date对象与String对象之间进行来回转换。
构造方法
由于DateFormat为抽象类,不能直接使用,所以需要常用的子类java.text.SimpleDateFormat
。这个类需要一个模式(格式)来指定格式化或解析的标准
常用方法
DateFormat类的常用方法有:
-
public String format(Date date)
:将Date对象格式化为字符串。 -
public Date parse(String source)
:将字符串解析为Date对象。
package com.case4;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateFmart {
public static void main(String[] args) throws ParseException {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
String format = simpleDateFormat.format(date);
System.out.println(format);
SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str = "1998-09-13 14:28:36";
Date parse = simpleDateFormat1.parse(str);
System.out.println(parse);
System.out.println("=================================");
}
}
-
Calendar类
根据Calendar类的API文档,常用方法有:
-
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对象。 -
日历字段与 Date之间转换
setTime(Date date) : 将Date转换为Calendar对象
Date getTime() : 将Calendar转换Date对象
获取方式
Calendar为抽象类,由于语言敏感性,Calendar类在创建对象时并非直接创建,而是通过静态方法创建,返回子类对象,如下:
Calendar静态方法
-
public static Calendar getInstance()
:使用默认时区和语言环境获得一个日历
例如:
public class CalendarTest {
public static void main(String[] args) {
Calendar instance = Calendar.getInstance();
instance.add(Calendar.YEAR, 10);
instance.add(Calendar.MONTH,2);
int y = instance.get(Calendar.YEAR);
int m = instance.get(Calendar.MONTH )+1;
int d = instance.get(Calendar.DAY_OF_MONTH);
int h = instance.get(Calendar.HOUR_OF_DAY);
int min = instance.get(Calendar.MINUTE);
int s = instance.get(Calendar.SECOND);
System.out.println(y+"-"+m+"-"+d+" "+h+":"+min+":"+s);
System.out.println("==========================================");
System.out.println(y+"-"+m+"-"+d+" "+h+":"+min+":"+s);
Date date = instance.getTime();
System.out.println(date);
System.out.println("==========================================");
instance.set(Calendar.YEAR, 2018);
System.out.println(y+"-"+m+"-"+d+" "+h+":"+min+":"+s);
}
}
注意:Calendar为抽象类,不能创建对象,只能通过调用静态方法Calendar.getInstance()创建返回子类的对象。
-
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 :copy元素的个数
import java.util.Arrays;
import static java.lang.System.arraycopy;
public class arrayCopy_2 {
public static void main(String[] args) {
int[] a = new int[20];
int[] arry = {1, 2, 3, 4, 5, 6, 7, 8, 9,};
arraycopy(arry, 1, a, 2, 4);
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
}
}
练习
请使用日期时间相关的API,计算出一个人已经出生了多少天。
思路:
1.获取当前时间对应的毫秒值
2.获取自己出生日期对应的毫秒值
3.两个时间相减(当前时间– 出生日期)
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateBirth {
public static void main(String[] args) throws ParseException {
Date date = new Date();
long time = date.getTime();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date parse = simpleDateFormat.parse("1998-09-13");
long time1 = parse.getTime();
long l = (time - time1) / 1000 / 60 / 60 / 24;
System.out.println("你已经生活了"+l+"天");
}
}
-
StringBuilder类
4.4 常用方法
StringBuilder常用的方法有2个:
-
public StringBuilder append(...)
:添加任意类型数据的字符串形式,并返回当前对象自身。 -
public String toString()
:将当前StringBuilder对象转换为String对象。
1、字符串怎么转换StringBuilder、StringBuffer
方法一: 使用构造函数
StringBuilder(String str)
StringBuffer(String str)
方法二:
StringBuffer/StringBuilder append(String str)
reverse() : 反转
2、StringBuider/StringBuffer转换为字符串
toString() :
StringBuilder : 线程非安全的可变字符序列、效率较好
StringBuffer : 线程安全的可变字符序列、效率较差
public class StringBuildTest {
public static void main(String[] args) {
//字符串反转
String s1 = "Hello Java";
//将字符串转换为StringBuilder/StringBuffer对象
StringBuilder stringBuilder = new StringBuilder(s1);
stringBuilder.reverse();
//将StringBuilder转换为字符串输出
System.out.println(stringBuilder);
StringBuilder s2 = new StringBuilder("Java");
StringBuilder s3 = new StringBuilder("Java");
System.out.println(s2.equals(s3));
StringBuffer s4 = new StringBuffer("Java");
StringBuffer s5 = new StringBuffer("Java");
System.out.println(s4.equals(s5));
String s6 = "Java";
System.out.println(s5.equals(s6));//false
System.out.println(s6.equals(s5));//false
}
}
-
包装类
基本类型与对应的包装类对象之间,来回转换的过程称为”装箱“与”拆箱“:
-
装箱:从基本类型转换为对应的包装类对象。
-
拆箱:从包装类对象转换为对应的基本类型。
用Integer与 int为例:
基本数值---->包装对象
Integer i = new Integer(4);//使用构造函数函数
Integer iii = Integer.valueOf(4);//使用包装类中的valueOf方法
包装对象---->基本数值
int num = i.intValue();