Java 常见的接口 (Comparable,Runnable,Cloneable)

Java 进阶篇

笔记首页

序号内容链接地址
1Java核心Apihttps://blog.csdn.net/weixin_44141495/article/details/108277753
2Java集合框架接口https://blog.csdn.net/weixin_44141495/article/details/108146574
3List实现类https://blog.csdn.net/weixin_44141495/article/details/108146613
4Set实现类https://blog.csdn.net/weixin_44141495/article/details/108146744
5Map实现类https://blog.csdn.net/weixin_44141495/article/details/108146656
6常见接口https://blog.csdn.net/weixin_44141495/article/details/108269208

Java常见接口

Comparable

public interface Comparable<T> {

    public int compareTo(T o);

}
  • 类对象之间比较“大小”往往是很有用的操作,比如让对象数组排序时,就需要依赖比较操作。对于不同的类有不同的语义。如Student类,比较2个学生对象可以比较他们的score分数来评判。

  • 该接口是让我们给我们的实体类增加排序规,比如a与b比,如果a.compareTo(b)大于0说明a比b大,反之b比a大,相等说明一样大

  • 由于对象默认没有实现这个接口,我们无法比较两个对象的大小,当我们的对象具有一定的顺序,而且要是用TreeSet进行存储时,必须实现此接口或者在TreeSet排序时传入一个Comparator比较器,否则报错!

  • 我们的常用的String,包括基本数据类型的封装类,比如Integer,Double等都继承了这个接口。


Runnable

@FunctionalInterface
public interface Runnable {

    public abstract void run();
}
  • Java中实现多线程有两种途径:继承Thread类或者实现Runnable接口;

  • 实际上Thread类也是Runable的子类,我们在Thread初始化是传入一个Runnable,实际上是让Thread去指向新的run方法。

  • Runnable接口非常简单,就定义了一个方法run(),继承Runnable并实现这个方法就可以实现多线程了。但是如果直接对象.run()方法,则没有任何意义。需要我们把这个实现了Runnable的类传入到Thread的构造方法中,再调用Thread的start方法才是线程开启的正确打开方式!


Cloneable

public interface Cloneable {
}

这个接口没有任何内容,当类加载器运行时,如果发现一个类实现类Cloneable接口,那么这个类就可以调用Object的clone方法,没实现则抛出异常。

Object的clone方法是protected修饰的,Object是所有类的父类,子类都可以访问到。

public class Object {
	protected native Object clone() throws CloneNotSupportedException;
}

我们定义一个类,尝试使用一下super的clone方法

public class Demo3 {

    static int haha=2;
    
    public static void main(String[] args) throws CloneNotSupportedException {
        Demo3 demo3 = new Demo3();
        Demo3 clone = demo3.clone();
        System.out.println(clone.haha);
    }

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

这里报错了!image-20200827212937186

但是如果我们实现了这个接口,就能正常使用,控制台打印2

public class Demo3 implements Cloneable{

这是Java早期的产物,如果换做现在,我们可能会让他实现一个@Clonable注解只要实现了这个注解,就能成功clone()。


Serializable

public interface Serializable {
}

也是一个没有方法的接口,只要JVM运行的时候,扫描到一个类实现了这么一个接口,那么这个类就可以被序列化,即能被对象流ObjectWriter和ObjectReader等一些流对象操作。

优秀博文参考

Comparable链接

Clonable链接

Iterator链接

Serializable链接

Runnable链接

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值