整理一下以前的Java学习笔记,查缺补漏
区别 | this | super |
---|---|---|
定义 | 表示本类对象 | 表示父类对象 |
使用 | 本类操作:this.属性this.方法()this() | 父类操作super.属性super.方法()super() |
调用构造 | 调用本类构造要放在首行 | 子类调用父类构造要放在首行 |
查找范围 | 先从本类查找找不到再查父类 | 直接由子类查找父类 |
特殊 | 表示当前对象 | - |
区别 | 重载(Overloading) | 重写(Overriding) |
---|---|---|
定义 | 方法名称相同,参数的类型及个数不同 | 方法名称、参数类型及个数、返回值类型完全相同 |
权限 | 没有权限要求 | 被子类所覆写的方法不能拥有比父类更严格的访问控制权限 |
范围 | 发生在一个类中 | 发生在继承关系类中 |
区别 | 抽象类 | 接口 |
---|---|---|
关键字 | abstrac class | interface |
组成 | 常量、变量、抽象方法、普通方法、构造方法 | 全局常量、抽象方法 |
权限 | 可以使用各种权限 | 只能是public |
关系 | 一个抽象类可以实现多个接口 | 接口不能继承抽象类,却可以继承多个接口 |
使用 | ①子类使用extends继续抽象类②抽象类和接口的对象多态性的向上转型发,进行接口或者抽象类的实例化操作(公共) | ①子类使用implements实现接口 |
设计模式 | 模板设计模式 | 工厂设计模式、代理设计模式 |
局限 | 一个子类只能继承一个抽象类 | 一个子类可以实现多个接口 |
抽象类的最大特点是包含了抽象方法,抽象方法是声明而未实现的方法(没有方法体)。抽象方法要用abstract关键字完成,并且抽象方法要在抽象类中,抽象类要用abstract声明
abstract class A {
private String info = "Hello";
public void print() {
System.out.print(info);
}
public abstract get();
}
实际开发中抽象类的使用原则:
一个全部由抽象方法和全局变量组成的类,成为接口。使用interface进行定义、 使用原则:
public abstract interface A {
public abstract String get();
}
// 使用过程中可以简写为:
public interface A {
String get();
}
在Java中,每个抽象类可以实现多个接口,一个接口却不能继承抽象类,但是一个接口可以同时继续多个接口,以实现接口的多继承操作
① 多线程的两种实现方式都需要一个线程的主类,而这个类可以实现Runnable接口或继承Thread类。不管是使用何种方式都必须在子类中覆写run()方法,此方法为线程的主方法。 ②Thread类是Runnable接口的子类,使用Runnable接口可以避免单继承的局限,以更加方便的实现数据共享概念。
程序实现结构:
}
- Thread类
public class MyThread extends Thread { @Override public void run() { // TODO } public static viod main(String[] args) { MyThread mt = new MyThread(); mt.start(); } }
#### sleep()和wait()的区别
1. sleep()是Thread类定义的static方法,表示线程休眠,将执行机会给其他线程,但是监控状态依然保持,到时会自动恢复。
2. wait()是Object类定义的方法,表示线程等待,一直到执行了notify()方法或notifyAll()后才结束等待。
#### final, finally, finalize的区别
1. final表示终结器,用于不能定义被继续的类
- 关于final修饰符
1. 如果一个类被声明为final,意味着它不能再派生新的子类,它不能作为父类被继承。一个类不能既被声明为abstract,又被声明为final
2. 将变量或方法声明为final,表示在使用中不被改变7
2. finally是异常处理的出口
3. finalize()是object类定义的一个方法,用于执行对象回收前的收尾操作
#### Comparable比较器和Comparator比较器的区别
1. java.lang.Comparable是一个类在定义时默认是实现的接口,里面只有一个compareTo()方法
2. java.util.Comparator是需要单独定义一个比较的规则类,里面有两个方法,compare()和equal()
#### 字节流和字符流的区别
1. 字符流没有使用缓冲区,而字节流使用了缓冲区
2. 处理各种数据都可以通过字节流完成,而在处理中文时使用字符流会更好
#### Java序列化的作用以及实现
序列化操作的主要目的是为了保证对象以二进制数据的方式进行传输,如果要想实现序列化,对象所在的类必须实现java.io.Serializable接口,默认情况下一个对象的所有属性都会被序列化下来,也可以使用transient关键字定义不被序列化的属性。
#### ArrayList和Vector的区别
ArrayList和Vector都是List接口的子类,区别在于:
区别|ArrayList|Vector
:--|:--|:--
推出时间|JDK1.2|JDK1.0
性能|采用异步处理方式,性能更高|采用同步处理方式,性能相对较低
安全性|非线程安全|线程安全
输出|Iterator, ListIterator, foreach|Iterator, ListIterator, foreach, Enumeration
开发中首选ArrayList
#### HashMap和HashTable的区别
HashMap和HashTable都属于Map接口的子类,区别如下:
区别|HashMap|HashTable
:--|:--|:--
推出时间|JDK1.2|JDK1.0
性能|采用异步处理方式,性能更高|采用同步处理方式,性能相对较低
安全性|非线程安全|线程安全
设置null|允许将key或value设置为null|不允许出现null,否则出现空指针异常
#### String类的两种对象实例化方式的区别
1. 直接赋值:只开辟一块内存空间,字符串的内容可以自动入池,以便下次使用
String s = "Hello";
2. 构造方法:开辟两块堆内存空间,有一块将成为垃圾,并且不能自动入池,需要使用intern()手工入池
String s = new String("Hello");
创造了两个实例化对象, 一个是String类的匿名对象, 一个是使用关键字new实例化的String对象
```
Copyright: 采用 知识共享署名4.0 国际许可协议进行许可 Links: https://lixj.fun/archives/java学习笔记