一.Object类, 所有类的父类
1.Class getClass(): 通过对象的该方法,可以获得对象对应的类的字节码对象
“haha”.getClass() -> String的字节码对象
“hi”.getClass() -> String的字节码对象
public class GetClassDemo {
public static void main(String[] args) {
Class c1 = "haha".getClass();
Class c2 = "hi".getClass();
// 同种类型的对象, 对应的字节码对象都是同一个
System.out.println(c1 == c2);
}
}
2.Object clone(): 克隆, 复制
复制一份全新的, 属性内容一致的对象, 深克隆
复制的是引用 -> 浅克隆
调用方法的对象, 需要类实现Cloneable接口
public class ZiClone implements Cloneable {
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
public class CloneDemo {
public static void main(String[] args) throws CloneNotSupportedException {
ZiClone zi = new ZiClone();
zi.setName("lucy");
ZiClone clone = (ZiClone)zi.clone(); // 默认的clone方法, 是复制一份全新的, 属性内容一致的对象 -> 深克隆
ZiClone clone2 = zi; // 引用的赋值 -> 浅克隆
System.out.println(clone.getName());
System.out.println(zi == clone);
}
}
- void finalize()
GC: 垃圾回收机制, 定时清理内存中
栈:方法结束, 方法栈直接释放
堆:无效对象, 等待gc回收
手动调用: System.gc()
引用类型对象变为空,若不回收其在堆中的地址内容,叫做内存泄漏
public class FinalizeDemo {
public static void main(String[] args) {
ZiFinalize zi = new ZiFinalize();
zi = null;
System.gc(); // 手动调用垃圾回收方法
// new ZiFinalize()对象被回收, 自动调用finalize方法
}
}
4.String toString(): 将对象变成字符串格式
直接打印对象时, 自动就会调用对象的toString方法
System.out.println(zi.toString()); // 简化写法
System.out.println(zi); // 简化写法
Object中默认toString的实现方式:
getClass().getName() + “@” + Integer.toHexString(hashCode());
自定义打印格式: 重写toString方法
public class Tostring {
int age=18;
String name="The shy";
@Override
public String toString() {//重写
return name+","+age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Text {
public static void main(String[] args) {
Tostring k=new Tostring();
System.out.println(k.toString());//toString重写后打印格式
//没重写默认为 getClass().getName() + '@' + Integer.toHexString(hashCode())
//类名+对象名+@+地址
}
}
5.boolean equals(Object o)
Object中默认equals的实现方式:
return (this == obj); – 比较对象的地址
所以当我们想要比较两个相同类型对象的属性值时, 需要重写equals
public class Equals {
String name;
int age;
Equals(String name,int age){
this.name=name;
this.age=age;
}
@Override
public boolean equals(Object o) {//equals重写
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Equals equals = (Equals) o;
return age == equals.age &&
Objects.equals(name, equals.name);//会自动判断nanme是不是空值
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
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 class Text {
public static void main(String[] args) {
Equals m=new Equals("张益达",18);
Equals n=new Equals("张益达",18);
boolean q=m.equals(n);//equals重写了
System.out.println(q);
// Objects.equals(,)会先自动判断空值,再调用对象的equals方法比较m.equals(n);
boolean q2= Objects.equals(m,n);
System.out.println(q2);
}
}
二。 Date
1.构造方法:
new Date()
new Date(long time)
常用API:
void setTime(long time) -> 将date设置为对应毫秒值表示的时间
long getTime() -> 获得date对应的毫秒值
Date中的 toString() 重写过了
public class Date1 {
public static void main(String[] args) {
//空参构造方法->当前系统时间
Date date=new Date();
System.out.println(date);
//参数是long类型的有参构造方法
Date date1=new Date(0l+30l*24*60*60*1000);//java元年时间的后一个月
System.out.println(date1);
//时间的简单计算
long time=date.getTime();//getTime获得时间的类型是long毫秒
time+=30l*24*60*60*1000;
date.setTime(time);
System.out.println(date);
//比较date2是否在date时间之后
Date date2=new Date(0l);
boolean b=date.after(date2);
System.out.println(b);
//获得当前系统时间
System.currentTimeMillis();
}
}
2.Calendar:
Calendar使用方法及Calendar\Date\Long之间的转换
public class Calendar1 {
public static void main(String[] args) {
//生成万年历
Calendar cal=Calendar.getInstance();
System.out.println(cal);
//获得对应月份,月份从0开始
int month=cal.get(Calendar.MONTH);
System.out.println("month:"+month);
//获得对应年份
int year=cal.get(Calendar.YEAR);
System.out.println("year:"+year);
//DAY_OF_MONTH,获得日
int day=cal.get(Calendar.DAY_OF_MONTH);
System.out.println("day:"+day);
//HOUR_OF_DAY,获得当天小时
int hour=cal.get(Calendar.HOUR_OF_DAY);
System.out.println("hour"+hour);
//MINUTE,获得分钟
int minute=cal.get(Calendar.MINUTE);
System.out.println("minute:"+minute);
//DAY_OF_WEEK,获得周几
int day_week=cal.get(Calendar.DAY_OF_WEEK);
System.out.println("week:"+day_week);
//设置万年历时间
cal.set(Calendar.MONTH,Calendar.AUGUST);//设置月
cal.set(Calendar.DAY_OF_MONTH,13);//设置日
System.out.println("月:"+cal.get(Calendar.MONTH)+"\t日:"+cal.get(Calendar.DAY_OF_MONTH));
//入职十周年的当月的第三周的周五
Calendar cal1=Calendar.getInstance();
System.out.println(cal1);
System.out.println("入职时间,年月星期和天:"+cal1.get(Calendar.YEAR)+cal1.get(Calendar.MONTH)+cal1.get(Calendar.WEEK_OF_MONTH)+cal1.get(Calendar.DAY_OF_WEEK));
cal1.add(Calendar.YEAR,10);//add加;
cal1.set(Calendar.WEEK_OF_MONTH,3);
cal1.set(Calendar.DAY_OF_WEEK,Calendar.FRIDAY);
//Calendar转Date
Date date=cal1.getTime();
System.out.println(date);
//Date转Calender
Date date2=new Date(0l);
cal1.setTime(date2);
System.out.println(cal1);
//date转long
long time=date.getTime();
System.out.println("********"+time);
//long转date
date2.setTime(time);
System.out.println(date2);
}
}
3.DateFormat
public class DateFormat {
public static void main(String[] args) throws ParseException {
Date date=new Date();
//自定义格式yyy-MM-dd HH:mm:ss E
SimpleDateFormat df=new
SimpleDateFormat("yyyy-MM-dd HH:mm:ss E");
//Date转String
String str=df.format(date);
System.out.println(str);
//通过parse把String转Date
String s="19980531";
SimpleDateFormat df1=new
SimpleDateFormat("yyyyMMdd");
Date date1=df1.parse(s);
System.out.println(date1);//打印Date模式
System.out.println(df.format(date1));//打印自定义df模式
}
}