JAVA day13,14 API、Object类、日期时间类(long,Date,Calendar,DateFormat)、String类(字符串,可变长字符串)、正则表达式、包装类

本文介绍了Java API的基础知识,包括API的作用和如何查询。详细讲解了Object类的主要方法,如getClass()、clone()、finalize()、toString()和equals()。接着探讨了日期时间类,如long、Date、Calendar和DateFormat,以及它们之间的转换。在String类部分,讲解了字符串的不可变性、创建方式和常用API。最后提到了正则表达式和包装类的概念与应用。
摘要由CSDN通过智能技术生成

1.API

 API(Application Programming Interface),应⽤程序编程接⼝。Java API是⼀本程序员的”字 典”,是JDK提供给我们使⽤的类的说明⽂档。这些类将底层的代码实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使⽤即可。所以我们可以通过查询API的⽅式,来学习Java提供的类,并得知如何使⽤它们。

JDK 包结构
为了便于使⽤和维护, JDK 类库按照包结构划分,不同功能的类划分在不同的包中;

 2.Object类

此类存在于java.lang包下,java.lang.Object类是java语言中的根类,也就是所有类的父类。

根据 JDK 源代码及 Object 类的 API ⽂档, Object 类当中包含的⽅法有 11 个。

其中只有一个无参构造方法,并且没有静态常量,所有方法必须通过对象来调用。

1.Class<?> getClass() 

//get class() 可以获得对应的类的对象的字节码文件
public class GetClassDemo {
    public static void main(String[] args) {
        Student stu1 = new Student("小白",23);
        Student stu2 = new Student("小青",21);

        Class c1 = stu1.getClass();//获取对象的字节码文件
        Class c2 = stu2.getClass();//Class是用来接收字节码文件的类型

        System.out.println(stu1 == stu2);//false 因为是两块不一样的内存空间,所以地址值不会一样
        System.out.println(c1 == c2);//true 这对比的是字节码文件一不一样 因为是同一个类 那肯定是一样的
    }
}

public class Student {
    int age;
    String name;

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

}
}

2. protected Object clone()

//clone()
public class TestClone {
    public static void main(String[] args) throws CloneNotSupportedException {
        CloneDemo demo = new CloneDemo();
        demo.setA(2);
        demo.setB(5);

        //深克隆:复制对象
        CloneDemo cloneDemo =  (CloneDemo)demo.clone();//克隆demo对象
        int a = cloneDemo.getA();
        System.out.println(a);//2
        System.out.println(demo == cloneDemo);//false 注意地址值还是不一样的

        //浅克隆:复制引用
        CloneDemo cloneDemo1 = demo;
        System.out.println(cloneDemo1.getB());//5
        
    }
}

//CloneNotSupportedException
//当调用 Object 类中的 clone 方法复制对象,但该对象的类无法实现 Cloneable 接口时,抛出该异常。
//方法必须重写
//必须要实现Cloneable接口,否则会抛出CloneNotSupportedException - 不支持的克隆异常
public class CloneDemo implements Cloneable{//Cloneable接口 - 是一个空接口,目的就是为了标记是可克隆的
    int a;
    int b;

    public CloneDemo(){}
    public CloneDemo(int a,int b){
        this.a = a;
        this.b = b;
    }

    public int getA() {
        return a;
    }

    public void setA(int a) {
        this.a = a;
    }

    public int getB() {
        return b;
    }

    public void setB(int b) {
        this.b = b;
    }

    @Override
    public int hashCode() {
        return super.hashCode();
    }

    @Override
    public boolean equals(Object obj) {
        return super.equals(obj);
    }

    @Override
    public String toString() {
        return super.toString();
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

3.protected void finalize()

  • 内存溢出:在内存中没有存储的地方
  • 内存泄漏:内存被没有用的对象占用。一个对象分配内存空间后,在使用结束时没有及时释放,导致一直都在占用内存,没有及时清除,使得实际的可使用内存在减少。
  • java存在垃圾回收机制 - gc :定时清理内存中的垃圾

注意:java原则上是不存在内存溢出和泄漏问题的。

//当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。
// 子类重写 finalize 方法,以配置系统资源或执行其他清除。
public class FinalizeDemo {
    public static void main(String[] args) throws Throwable {
        Student stu = new Student();
        //对于任何给定对象,Java 虚拟机最多只调用一次 finalize 方法。
        stu.setAge(2);
        stu.finalize();//调用方法 抛出异常
        System.gc();
        //垃圾回收:定时清理内存中的垃圾
        //1.垃圾: 没有引用的对象,被定成垃圾
        //2.可以手动调用 System.gc
        System.out.println(stu.getAge());

    }
}
public class Student {
    int age;
    String name;

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

}

    @Override//子类重写
    protected void finalize() throws Throwable {
        super.finalize();
        System.out.println("hhhhh");
    }
}

4.String toString() 

返回该对象的字符串表示。
Java 语⾔中很多地⽅会默认调⽤对象的 toString ⽅法:
1、"" + 对象:⾃动调⽤对象的 toString ⽅法
2、System.out.print (对象):直接调⽤ toString ⽅法
toString ⽅法返回该对象的字符串表示,其实该字符串内容就是对象的类型 +@+ 内存地址值。
public class toStringDemo {
    public static void main(String[] args) {
        Student stu = new Student("lulu",25);
        System.out.println(stu);//day13Api01.d_toString.Student@75412c2f
        System.out.println(stu.toString());//day13Api01.d_toString.Student@75412c2f
        //重写后:Studnet{name='lulu', age=25}

        int[] arr = {1,2,4};
        System.out.println(arr);
        //[I@282ba1e
        /*
        * [ :表示数组
        * I :表示数据类型
        * @282ba1e : 16进制表示地址值
        * */

    }
public class Student {
    int age;
    String name;

    public Student(){}
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;

    }

    public void
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值