Java 进阶篇
笔记首页
序号 | 内容 | 链接地址 |
1 | Java核心Api | |
2 | Java集合框架接口 | |
3 | List实现类 | |
4 | Set实现类 | |
5 | Map实现类 | |
6 | 常见接口 |
文章目录
- Java 进阶篇
- Java常见接口
- Comparable
- Runnable
- Cloneable
- Serializable
- 优秀博文参考
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();
}
}
这里报错了!
但是如果我们实现了这个接口,就能正常使用,控制台打印2
public class Demo3 implements Cloneable{
这是Java早期的产物,如果换做现在,我们可能会让他实现一个@Clonable注解只要实现了这个注解,就能成功clone()。
Serializable
public interface Serializable {
}
也是一个没有方法的接口,只要JVM运行的时候,扫描到一个类实现了这么一个接口,那么这个类就可以被序列化,即能被对象流ObjectWriter和ObjectReader等一些流对象操作。