API_01

1.Object类, 所有类的父类

方法: 11个

Class getClass():

通过对象的该方法,可以获得对象对应的类的字节码对象
“haha”.getClass() -> String的字节码对象
“hi”.getClass() -> String的字节码对象

Class c1 = "haha".getClass();
        Class c2 = "hi".getClass();
        // 同种类型的对象, 对应的字节码对象都是同一个
        System.out.println(c1 == c2);

Object clone():

克隆, 复制
复制一份全新的, 属性内容一致的对象, 深克隆
复制的是引用 -> 浅克隆
调用方法的对象, 需要类实现Cloneable接口

public class CloneDemo {
    public static void main(String[] args) throws CloneNotSupportedException {
        ZiClone zi = new ZiClone();
        zi.setName("lucy");
        ZiClone clone = (ZiClone)zi.clone();

        ZiClone clone2 = zi; // 引用的赋值 -> 浅克隆

        // 默认的clone方法, 是复制一份全新的, 属性内容一致的对象 -> 深克隆
        System.out.println(clone.getName());
        System.out.println(zi == clone);
    }
}

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();
    }
}

wait() * 3

notify() / notifyAll() – 以上5个和线程有关

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方法
    }
}

public class ZiFinalize {
    // JDK9开始 过时了, 不推荐使用
    protected void finalize() throws Throwable {
        System.out.println("我要走了!");
    }
}

String toString(): 将对象变成字符串格式

直接打印对象时, 自动就会调用对象的toString方法
System.out.println(zi.toString()); // 简化写法
System.out.println(zi); // 简化写法
Object中默认toString的实现方式:
getClass().getName() + “@” + Integer.toHexString(hashCode());
自定义打印格式: 重写toString方法

public class ToStringDemo {
    public static void main(String[] args) {
        ZiToString zi = new ZiToString("张三", 28);
        // com.zzxx.api.Object.ZiToString@5fe5c6f
        System.out.println(zi);
        System.out.println(zi + "");
        System.out.println(zi.toString());

        // 想要打印对象时, 显示对象的属性内容 -- 重写toString方法
        System.out.println(zi);


        String str = "haha";
        // java.lang.String@abdcef
        System.out.println(str);

        System.out.println(str.hashCode());
    }
}
public class ZiToString {
    private String name;
    private int age;

    public ZiToString() {
    }

    /*public String toString() {
        return name + "," + age;
    }*/

    @Override
    public String toString() {
        return "ZiToString{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public ZiToString(String name, int age) {
        this.name = name;
        this.age = 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 native int hashCode(); – 获得的是地址, 哈希码

boolean equals(Object o)
Object中默认equals的实现方式:
return (this == obj); – 比较对象的地址
当我们想要比较两个相同类型对象的属性值时, 需要重写equals
Objects.equals(name, ziEquals.name);

public class EqualsDemo {
    public static void main(String[] args) {
        ZiEquals zi1 = new ZiEquals("张三", 18);
        ZiEquals zi2 = new ZiEquals("张三", 18);

        boolean b = zi1.equals(zi2);
        System.out.println(b);

        /**
         * 1.先判断空值
         * 2.再调用对象的equals方法比较 zi1.equals(zi2)
         */
        boolean b2 = Objects.equals(zi1, zi2);
        System.out.println(b2);
    }
}

public class ZiEquals {
    private String name;
    private int age;

    public ZiEquals(String name, int age) {
        this.name = name;
        this.age = age;
    }
    /*public boolean equals(Object obj) {
        // this-ZiEquals 和 obj-Object
        // 1.this == obj, 一定相等
        if (this == obj) {
            return true;
        }
        // 2.类型不一致,一定是不等
        if (!(obj instanceof ZiEquals)) {
            return false;
        }
        // 3.类型一致,不是同一个对象,才要比较属性内容
        ZiEquals zi = (ZiEquals) obj;
        if(this.name == zi.name)
        if(this.name != null)  this.name.equals(zi.name)
        if(this.name == null && zi.name) zi.name.equals(this.name)
        return zi.age == this.age && this.name.equals(zi.name);
    }*/

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        ZiEquals ziEquals = (ZiEquals) o;
        return age == ziEquals.age &&
                Objects.equals(name, ziEquals.name);
    }

    @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;
    }
}

2.java.util.Date: 日期, 时间

构造方法:

// 空参构造方法 -> 当前系统时间
        Date date = new Date();
        // Tue Jul 21 11:48:57 CST 2020
        System.out.println(date);

        // 参数是long类型的构造方法
        Date date1 = new Date(0l + 30l*24*60*60*1000);

常用API:

void setTime(long time) -> 将date设置为对应毫秒值表示的时间
long getTime() -> 获得date对应的毫秒值
date1.after(date)
date1.before(date)

   Date date = new Date();
        // 将时间从date类型, 转换成了long类型所表示的毫秒值
        long time = date.getTime();
        System.currentTimeMillis();
        System.out.println("time: " + time);

        // 一个月以后的date时间
        time += 30l*24*60*60*1000;
        date.setTime(time);
        System.out.println(date);

        Date date1 = new Date(0l);
        // date1 是否在 date 的后面
        boolean b = date1.after(date);
        System.out.println(b);
        // date1 是否在 date 的前面
        boolean b2 = date1.before(date);
        System.out.println(b2);

时间计算: 计算long值

需求例如:入职时间已知, 入职十周年当月的第三周的周五

 // 1.获得万年历对象 2020-7-21
        Calendar cal = Calendar.getInstance();
        System.out.println(cal);
        // 入职10周年, 当月的第三周的周五
        cal.add(Calendar.YEAR, 10);
        cal.set(Calendar.WEEK_OF_MONTH, 3);
        cal.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);

        // 2.将 Calendar 转换成 Date 类型, 再来打印
        Date date = cal.getTime();
        System.out.println(date);

商品过期日前面2周的周三是促销日

// 1.获得万年历对象 2020-7-21
        Calendar cal = Calendar.getInstance();
        System.out.println(cal);

        // 2) 保质期7天, 求当天是几号
//        cal.add(Calendar.DATE, 7);
//        System.out.println(cal.get(Calendar.DAY_OF_MONTH));
        // 当加的内容结果跨月\年\星期, 自动进行推算
        // 保质期48天, 求当天是几号  2020-9-7
        cal.add(Calendar.DATE, 48);
        // 到期日往前推两周
        cal.add(Calendar.WEEK_OF_MONTH, -2);
        // 要周四
        cal.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY);

单纯使用long计算,不可能完成
万年历 java.util.Calendar -> 复杂的时间推算
初始化: static Calendar getInstance();
常用API:
int get(分量字段) -> 获得字段对应的值
void set(分量字段, 值)
void add(分量字段, 值) -> 向前计算, 加负数

// 1.获得万年历对象
        Calendar cal = Calendar.getInstance();
        System.out.println(cal);

        // 2.get set add
        // 1). 获得cal对应的月份, 月份从0开始
        int month = cal.get(Calendar.MONTH);
        System.out.println("month: " + month); // 6
        // 2). 获得cal对应的年份
        int year = cal.get(Calendar.YEAR);
        System.out.println("year: " + year); // 2020
        // DATE  DAY_OF_MONTH
        // HOUR MINUTE SECOND DAY_OF_WEEK
        // HOUR_OF_DAY

        // 3) 今天时间是:2020-7-21 ->设置为2020-8-15
        cal.set(Calendar.MONTH, Calendar.AUGUST);
        cal.set(Calendar.DAY_OF_MONTH, 15);
        System.out.println(cal);

时间日历日期的转换:

 // 1.Date -> long
        Date date = new Date();
        long time = date.getTime();

        // 2.long -> Date
        date.setTime(time);
        // 如果原先没有Date对象, 可以通过long创建一个新的Date对象
        Date date2 = new Date(time);
        // --------------------------
        // 3.Calendar -> Date
        Calendar cal = Calendar.getInstance();
        Date date3 = cal.getTime();

        // 4.Date -> Calendar
        Date date4 = new Date(0);
        cal.setTime(date4);
        // --------------------
        // 5.Calendar -> long (了解)
        Calendar cal1 = Calendar.getInstance();
        long time2 = cal1.getTimeInMillis();

        // 6.long -> Calendar (了解)
        cal1.setTimeInMillis(time2 + 1000);

1.long: 简单时间计算, 7天之内
运行效率计算
2.Date: 展示时间
2020-07-21 16:47:55
2020/07/21 16:47:55
2020年07月21日 16:47:55
3.Calendar: 复杂计算
时间的展示: Date
自定义格式 java.text.DateFormat 子类 SimpleDateFormat
将日期以一定格式输出:

 // 为了显示时间 Date -> String
        Date date = new Date();
        System.out.println(date);

        // 构造SimpleDateFormat对象, 需要传参 - 格式
        // 2020-07-21  16:47:55
        // yyyy-MM-dd HH:mm:ss E
        SimpleDateFormat sf = new
                SimpleDateFormat("yyyy-MM-dd HH:mm:ss E");
        String str = sf.format(date);
        System.out.println(str);

        // ------------------------
        // 自行输入日期(String) -> Date  19980228
        String s = "19980228";
        SimpleDateFormat sf1 = new
                SimpleDateFormat("yyyyMMdd");
        Date date1 = sf1.parse(s);
        System.out.println(sf.format(date1));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值