1. 面向对象概念
把要研究的事物抽象成对象处理。一个对象内部含有:数据值描述其状态、操作方法即对象的行为用于改变对象的状态。面向对象具有对象唯一性、分类型、继承性、多态性。自己的理解就是将一项活动抽象成一个个角色对象,通过内部的属性和方法彼此连接,构成整个活动。
2. 面向对象三特性
继承
封装
多态:指允许不同类的对象对同一消息作出响应,即同一消息可以根据发送对象的不同而采用不同的行为方式。
3. String、StringBuilder、StringBuffer比较
·String被final修饰,因此是线程安全类且是不可变类。
区别
运行速度:StringBuild>StringBuffer>String。String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。
线程安全:StringBuffer和String是线程安全的,StringBuilder线程不安全。
应用场景:String适用于少量字符串操作的情况;StringBuilder:适用于单线程下的字符缓冲区进行大量操作的情况;StringBuffer适用于在字符串缓冲区进行大量操作的情况。
4. 元注解
——元注解作用是负责注解其他注解
——自定义注解
//自定义注解 [@Target] [@Retention] [@Documented] [@Inherited] public @interface [名称] { // 元素 }
——Java自带的注解
@Override: 标记方法,重写父类方法
@Deprecated: 标明某个类或方法过时
@SuppressWarnings:标明要忽略的警告
5. 抽象类&接口
参数 | 抽象类 | 接口 |
默认的方法实现 | 它可以有默认的方法实现 | 接口完全是抽象的。它根本不存在方法的实现 |
实现 | 子类使用extends关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现。 | 子类使用关键字implements来实现接口。它需要提供接口中所有声明的方法的实现 |
构造器 | 抽象类可以有构造器 | 接口不能有构造器 |
与正常Java类的区别 | 除了你不能实例化抽象类之外,它和普通Java类没有任何区别 | 接口是完全不同的类型 |
访问修饰符 | 抽象方法可以有public、protected和default这些修饰符 | 接口方法默认修饰符是public。你不可以使用其它修饰符。 |
main方法 | 抽象方法可以有main方法并且我们可以运行它 | 接口没有main方法,因此我们不能运行它。(java8以后接口可以有default和static方法,所以可以运行main方法) |
多继承 | 抽象方法可以继承一个类和实现多个接口 | 接口只可以继承一个或多个其它接口 |
速度 | 它比接口速度要快 | 接口是稍微有点慢的,因为它需要时间去寻找在类中实现的方法。 |
添加新方法 | 如果你往抽象类中添加新的方法,你可以给它提供默认的实现。因此你不需要改变你现在的代码。 | 如果你往接口中添加方法,那么你必须改变实现该接口的类。 |
6. 深拷贝&浅拷贝
实现深拷贝方式:
7. 异常分类及处理
throws & throw
8. 八种基本数据类型及所占字节数
类型 | byte | char | short | int | long | float | double | boolean |
所占字节数 | 1 | 2 | 2 | 4 | 8 | 4 | 8 | 1 |
9. 内部类
new 类名或接口名(){ 重写方法; }; //注意分号 //以上就是匿名内部类的格式,其实这整体就相当于是new出来的一个对象
10. equals & ==
“==”对比两个对象时比较的是对象的内存地址,对比两个基本数据类型时,比较的是数值的大小。
equals()如果没有重写,那么Object类中默认的是“==”实现的,与==效果相同。但是一般会重写equals方法,用来比较两个对象内容是否相同。
11. equal & hashcode
equals()如果没有重写,那么Object类中默认的是“==”实现的,与==效果相同。但是一般会重写equals方法,用来比较两个对象内容是否相同。
hashcode()代表这个对象的哈希码,但是会出现哈希冲突,即两个不同的对象但是哈希码相同。
有这样的一个逻辑:如果两个对象equals相等(即对象内存地址相同),那么hashcode一定相等,反之则不然。
【扩展】哈希算法:开发定址法、再哈希法、链地址法、建立一个公共溢出区。
12. JDK8新特性
① Lambda:Lambda允许把函数作为一个方法的参数。
② 方法引用:可以直接引用已有的Java类或对象的方法或构造器。
③ Data Time API:加强对日期和事件的处理。
13. final关键字
① 当final修改类时,该类成为最终类,无法被继承。简称为“断子绝孙类”。
② 当final修饰方法时,这个方法将成为最终方法,无法被子类重写。但是,该方法仍然可以被继承。
③ 当final修饰引用时
14. volatile关键字o
volatile关键字用来保证有序性和可见性。我们所写的代码并不会按照我们输入的顺序来执行,编译器会做重排序,CPU也会做重排序,这样的重排序是为了减少流水线阻塞的,提高CPU的执行效率。但需要满足happens-before规则,其中有一条就是:对一个变量的写操作先行发生于读操作。有序性就是通过插入内存屏障实现的。可见性:主内存、工作内存、JMM展开叙述。
15. Comparable & Comparator (示例参考)
Comparable相当于“内部比较器”,而Comparator相当于“外部比较器”
原文:https://www.cnblogs.com/qmillet/p/12609407.html